Symbl Javascript SDK
The Symbl Javascript SDK provides convenient access to the Symbl API from applications written in the Javascript language via Node.js or directly in the browser. It includes a pre-defined set of classes for a simple and clear utilization of APIs.
We are working diligently to support every Symbl API. Currently we support the following APIs:
Documentation
See the API docs.
Requirements
Installation
First make sure that Node.js is installed on your system with the following command in Mac/Linux console or Windows command prompt:
node -v
To install the Node.js, just visit the link below:
You can then install the library directly on your machine using:
npm install @symblai/symbl-js
Import into your application
Node Import:
const { sdk } = require('@symblai/symbl-js');
ES6 Import:
import {sdk} from "@symblai/symbl-js/build/client.sdk.min";
Configuration
The SDK needs to be initialized with your account's credentials (appId & appSecret) which is
available in your Symbl Platform.
You can either provide the credentials by declaring constants before SDK initilization or pass them directly when creating the SDK instance.
Example:
const { sdk } = require('@symblai/symbl-js');
const APP_ID = '<your App ID>';
const APP_SECRET = '<your App Secret>';
sdk.init({
appId: APP_ID,
appSecret: APP_SECRET
}).then(() => console.log('SDK Initialized.'))
.catch(err => console.error('Error in initialization.', err));
Transcribing live audio input through the microphone
As a simple test of the Streaming API you can simply setup a live microphone and push the audio stream using the mic
npm package and use the uuid
package to create a unique meeting ID.
In order to use the mic
package, you'll need either Sox for Mac/Windows or Alsa tools for Linux installed on your computer.
To check if Sox is installed on Windows or Mac, simply open a console/terminal and type in the command sox --version
To install Sox on Windows or Mac download their latest release here and run the installer.
If you have Homebrew on your Mac install it with brew install sox
To check if you have Alsa tools installed in Linux and are able to use it, run arecord temp.wav
in your terminal.
If it is not installed you can use the following commands:
Debian/Ubuntu: sudo apt-get update && sudo apt-get install alsa-base alsa-utils
Arch: sudo pacman -Syu && sudo pacman -S alsa-tools
Initialize the SDK and connect via the built-in websocket connector. This will output the live transcription to the console.
const { sdk } = require('@symblai/symbl-js');
const uuid = require('uuid').v4;
const APP_ID = '<your App ID>';
const APP_SECRET = '<your App Secret>';
const mic = require('mic')
const sampleRateHertz = 16000
const micInstance = mic({
rate: sampleRateHertz,
channels: '1',
debug: false,
exitOnSilence: 6,
});
const connectionId = new Buffer(APP_ID).toString('base64');
(async () => {
try {
await sdk.init({
appId: APP_ID,
appSecret: APP_SECRET,
basePath: 'https://api.symbl.ai',
})
const connection = await sdk.startRealtimeRequest({
id: connectionId,
config: {
meetingTitle: 'My Test Meeting',
confidenceThreshold: 0.7,
timezoneOffset: 480,
languageCode: 'en-US',
sampleRateHertz
},
handlers: {
onSpeechDetected: (data) => {
if (data) {
const {
punctuated
} = data
console.log('Live: ', punctuated && punctuated.transcript)
}
}
}
});
console.log('Successfully connected. Conversation ID: ', connection.conversationId);
const micInputStream = micInstance.getAudioStream()
micInputStream.on('data', (data) => {
connection.sendAudio(data)
})
micInputStream.on('error', function (err) {
console.log('Error in Input Stream: ' + err)
})
micInputStream.on('startComplete', function () {
console.log('Started listening to Microphone.')
})
micInputStream.on('silence', function () {
console.log('Got SIGNAL silence')
})
micInstance.start()
setTimeout(async () => {
micInstance.stop()
console.log('Stopped listening to Microphone.')
try {
await connection.stop()
console.log('Connection Stopped.')
} catch (e) {
console.error('Error while stopping the connection.', e)
}
}, 120 * 1000)
} catch (err) {
console.error('Error: ', err)
}
})();
If you'd like to see a more in-depth examples for the Streaming API, please take a look at the extended Streaming examples here.
Subscribe to Streaming API connection
Using the Subscribe API, a read-only connection can be opened that can access the data that does not send audio or count towards minutes used on account. You'll need the connectionId
from an existing live connection as in the previous live transcription example. If you are not handling the realtime connection and subscribe api connection in the same file, you can access an existing connection's connectionId with connection.connectionId
.
This example can be run in a separate terminal while the previous example is running.
const { sdk } = require('@symblai/symbl-js');
const APP_ID = '<your App ID>';
const APP_SECRET = '<your App Secret>';
const connectionId = new Buffer(APP_ID).toString('base64');
(async () => {
try {
await sdk.init({
appId: APP_ID,
appSecret: APP_SECRET,
basePath: 'https://api.symbl.ai',
})
sdk.subscribeToStream(connectionId, (data) => {
const { type } = data;
if (type === 'message_response') {
const { messages } = data;
messages.forEach(message => {
console.log(`Message: ${message.payload.content}`)
});
} else if (type === 'insight_response') {
const { insights } = data;
insights.forEach(insight => {
console.log(`Insight: ${insight.type} - ${insight.text}`);
});
} else if (type === 'topic_response') {
const { topics } = data;
topics.forEach(topic => {
console.log(`Topic detected: ${topic.phrases}`)
});
} else if (type === 'message' && data.message.hasOwnProperty('punctuated')) {
const { transcript } = data.message.punctuated;
console.log(`Live transcript: ${transcript}`)
}
console.log(`Response type: ${data.type}. Object: `, data);
});
} catch (err) {
console.error('Error: ', err)
}
})();
Transcribing live audio input through Telephony API
Symbl’s Telephony API allows you to connect to any conference call system using PSTN or SIP networks. This allows transcription and insights while using systems like Zoom, Twilio, Chime, or the like with minimal setup.
As a simple test of the Telephony API you can call a phone number and see a live transcription of your phone call in the console.
const { sdk } = require('@symblai/symbl-js');
const APP_ID = '<your App ID>';
const APP_SECRET = '<your App Secret>';
const PHONE_NUMBER = '<your phone number>';
(async () => {
try {
await sdk.init({
appId: APP_ID,
appSecret: APP_SECRET,
basePath: 'https://api.symbl.ai',
})
const connection = await sdk.startEndpoint({
endpoint: {
type: 'pstn',
phoneNumber: PHONE_NUMBER,
},
insightTypes: ['action_item', 'question'],
data: {
session: {
name: 'My Test Meeting',
},
},
});
const { connectionId } = connection;
console.log('Successfully connected. Connection Id: ', connectionId);
sdk.subscribeToConnection(connectionId, (data) => {
const { type } = data;
if (type === 'transcript_response') {
const { payload } = data;
console.log(`Live: ${payload && payload.content}`);
} else if (type === 'message_response') {
const { messages } = data;
messages.forEach(message => {
console.log(`Message: ${message.payload.content}`)
})
} else if (type === 'insight_response') {
const { insights } = data;
}
});
setTimeout(async () => {
const connection = await sdk.stopEndpoint({
connectionId
});
console.log('Stopped the connection');
console.log('Conversation ID:', connection.conversationId);
}, 60 * 1000);
} catch (e) {
console.error('Error: ', e)
}
})();
If you'd like to see a more in-depth examples for the Telephony API, please take a look at the extended Telephony examples here.
Need support?
If you are looking for some specific use cases and more in-depth examples do check our examples folder.
If you can't find your answers, do let us know at support@symbl.ai or join our slack channel here.