Get a Transcription of Your Zoom Call

Symbl’s Telephony API allows you to connect to any conference call system using PSTN or SIP networks. In this guide we will walk you through how to get a live transcription of a Zoom call using a PSTN connection. This application uses Node.js and requires the symbl-node node package. You must have an active Zoom call (no one has to be in it but yourself) and whatever you speak in the Zoom call will be taken by our API and and processed for conversational insights.

info

You must make sure your Zoom call allows phone dial-in for this example to work correctly.

Contents#

Getting Started#

In this example we use the following variables which you must replace in the code examples in order for the code to work:

KeyTypeDescription
appIdStringThe application ID you get from the home page of the platform.
appSecretStringThe application secret you get from the home page of the platform.

Set Up Symbl SDK#

To get started, you’ll need your account credentials and Node.js installed (> v8.x) on your machine.

We’ll use the Symbl module for Node.js in this guide. Make sure you have a Node project set up. If you don’t have one, you can set one up using npm init.

From the root directory of your project, run the following command to add symbl-node in your project dependencies.

$ npm i --save symbl-node

Retrieve your Symbl API credentials#

Your credentials include your App ID and App Secret, which you can find the home page of the platform. credentials page

Initialize SDK#

Create a new file named index.js in your project and add the following lines to initialize the Symbl SDK:

const {sdk, SpeakerEvent} = require("symbl-node");
const appId = appId;
const appSecret = appSecret;
sdk.init({
appId: appId,
appSecret: appSecret,
basePath: "https://api.symbl.ai",
}).then(async() => {
console.log('SDK initialized.');
try {
// Connect to zoom here
} catch (e) {
console.error(e);
}
}).catch(err => console.error('Error in SDK initialization.', err));

Connect to Zoom#

To connect to a Zoom call you need something called a DTMF Sequence. In simple terms a DTMF sequence are the keys you press to connect to the conference call once you've dialed in. They consist of any key you find on a telephone keypad and commas (,), which add a bit of artificial delay between key presses; with one comma being 500ms. Typically we add a bit of artificial delay after the pound key is pressed to give the conference call time to process which keys were pressed.

For Zoom a DTMF Sequence is made up of two items:

  • The Zoom Meeting ID
  • The Zoom Meeting Passcode, if any.
info

If your Zoom call has a passcode you must set it to be all numerical digits.

View the Telephony API documentation to see the various configuration options.

const DTMF_MEETING_ID = "ZOOM_MEETING_ID";
const DTMF_MEETING_PASSCODE = "ZOOM_MEETING_PASSCODE";
const dtmfSequence = `,,${DTMF_MEETING_ID}#,,${DTMF_MEETING_PASSCODE}#`;
const phoneNumber = "ZOOM_PHONE_NUMBER"; // US Zoom Numbers are "+16465588656", or "+14086380968".
sdk.startEndpoint({
endpoint: {
type: "pstn",
phoneNumber: phoneNumber,
dtmf: dtmfSequence,
},
actions: [
{
invokeOn: "stop",
name: "sendSummaryEmail",
parameters: {
emails: [EMAIL_ADDRESS],
},
},
],
data: {
session: {
name: meetingName,
},
},
}).then((connection) => {
const connectionId = connection.connectionId;
console.log('connection', connection);
console.log("Successfully connected.", connectionId);
console.log("Calling into Zoom now, please wait.");
})
.catch((err) => {
console.error("Error while starting the connection", err);
});

Once the connection is established Symbl will call into your Zoom conference. Be patient, as this can take up to a minute in some cases. Once Symbl has connected to the call you will get a request to allow them in.

Grabbing the Conversation ID#

The Conversation ID is very useful for our other APIs such as the Conversation API. We don't use it in this example because it's mainly used for non-realtime data gathering, but it's good to know how to grab it as you can use the Conversation ID later to extract the conversation insights.

If you look closely at the success callback for for sdk.startEndpoint() promise, you can see you can grab the Conversation ID like this:

const conversationId = connection.conversationId;

With the Conversation ID you can do each of the following (and more!):

View conversation topics
Summary topics provide a quick overview of the key things that were talked about in the conversation.

View action items
An action item is a specific outcome recognized in the conversation that requires one or more people in the conversation to take a specific action, e.g. set up a meeting, share a file, complete a task, etc.

View follow-ups
This is a category of action items with a connotation to follow-up a request or a task like sending an email or making a phone call or booking an appointment or setting up a meeting.

Full Code Sample#

Here's the full Code Sample below:

const {sdk, SpeakerEvent} = require("symbl-node");
const appId = appId;
const appSecret = appSecret;
sdk.init({
appId: appId,
appSecret: appSecret,
basePath: "https://api.symbl.ai",
}).then(async() => {
console.log('SDK initialized.');
try {
const DTMF_MEETING_ID = "ZOOM_MEETING_ID";
const DTMF_MEETING_PASSCODE = "ZOOM_MEETING_PASSCODE";
const dtmfSequence = `,,${DTMF_MEETING_ID}#,,${DTMF_MEETING_PASSCODE}#`;
const phoneNumber = "ZOOM_PHONE_NUMBER"; // US Zoom Numbers are "+16465588656", or "+14086380968".
sdk.startEndpoint({
endpoint: {
type: "pstn",
phoneNumber: phoneNumber,
dtmf: dtmfSequence,
},
actions: [
{
invokeOn: "stop",
name: "sendSummaryEmail",
parameters: {
emails: [EMAIL_ADDRESS],
},
},
],
data: {
session: {
name: meetingName,
},
},
}).then((connection) => {
const connectionId = connection.connectionId;
console.log("Successfully connected.", connectionId);
console.log('Conversation ID', connection.conversationId);
console.log("Calling into Zoom now, please wait.");
})
.catch((err) => {
console.error("Error while starting the connection", err);
});
} catch (e) {
console.error(e);
}
}).catch(err => console.error('Error in SDK initialization.', err));

Test#

To verify and check if the code is working:

Run your code:

$ node index.js

Conclusion#

And that's it! Once Symbl is connected to the call, the API will take in your conversation and work it's magic. Once the call is over, the email address specified will be sent a summary of the conversation which includes a full text transcript, action items and conversational insights. You can also use the Conversation ID returned from the connection to perform even more tasks using our Conversation API.