Automatically Transcribe and Summarize Phone Calls
One use for the Deepgram API is to transcribe calls between a caller and an agent. When paired with Twilio, a cloud communication platform that lets developers integrate a number of communication technologies into their applications, Deepgram’s API can be used to streamline your workflow by providing bite-sized versions of call recordings.
In this guide, you’ll learn how to use Twilio Functions and Deepgram’s Summarization feature to send phone call summaries via SMS once a conversation has ended. Using Twilio, you will build a phone number that forwards callers to your agent and begins recording. When the call is complete, Deepgram will provide both a transcript and summary of the call. Finally, the transcript and summary will be sent to both the caller and agent via SMS.
If you need reference material or you’d rather not follow along with this guide, we provide a full version of the sample code after the tutorial.
Before You Start
Section titled “Before You Start”Before you run the code, you’ll need to do a few things.
Create a Deepgram Account
Section titled “Create a Deepgram Account”Create a Deepgram API Key
Section titled “Create a Deepgram API Key”Create a Twilio Account
Section titled “Create a Twilio Account”Before you can use Twilio, you’ll need to sign up for a Twilio account. Once signed up, make sure you have a phone number with SMS and Voice capabilities set up in your account.
Have Access to Two Phones
Section titled “Have Access to Two Phones”To test your project, you’ll need access to two phones—one to make a call and one to receive a call.
Setting Up Twilio
Section titled “Setting Up Twilio”To use Twilio, you will need to create a new service, add the Deepgram SDK as a dependency, and add the appropriate environment variables.
Create a Service
Section titled “Create a Service”Create a new service, which can contain multiple Twilio Functions and assets related to a single project.
- Log in to the Twilio Console, and navigate to Developer Tools > Functions & Assets.
- Create a new service. It’s important that you create a new service rather than a standalone function.
Add Dependencies
Section titled “Add Dependencies”Inside your new service, add the Deepgram SDK as a dependency:
- Locate the Dependencies section.
- Add
@deepgram/sdk. To get the latest version, omit the version number.
Add Environment Variables
Section titled “Add Environment Variables”Inside your new service, add your Deepgram API Key and your agent phone number as environment variables:
-
Locate the Environment Variables section.
-
Add the following variables:
Variable name Variable content DEEPGRAM_KEYValue of your Deepgram API Key generated in your Deepgram Console FORWARDING_NUMBERValue of your agent phone number in E.164 formatting (example: +14155552671)
Recording and Forwarding Inbound Calls
Section titled “Recording and Forwarding Inbound Calls”Create a Twilio function that receives incoming call data and forwards it to your agent while recording it:
-
Rename the
/welcomefunction to/inbound. -
Replace the entire file with the following code:
JavaScript exports.handler = function (context, event, callback) { let twiml = new Twilio.twiml.VoiceResponse(); const dial = twiml.dial({ record: "record-from-answer-dual", recordingStatusCallback: "/recordings", }); dial.number(process.env.FORWARDING_NUMBER); return callback(null, twiml); };
- Save the function, and select Deploy All. Once deployed, this function is ready to be used.
Configure Your Twilio Number
Section titled “Configure Your Twilio Number”Now that you have created a function to receive incoming calls, apply it to your Twilio number:
- Navigate to your Twilio number settings.
- Under A Call Comes In, select Function.
- Under Service, select your service.
- Under Function Path, select
/inbound.
Transcribing and Summarizing Calls
Section titled “Transcribing and Summarizing Calls”Now that your Twilio number is configured to record the phone call, you can use Deepgram to transcribe and summarize it.
Transcribe the Call
Section titled “Transcribe the Call”When a call is received, use Deepgram to transcribe it:
-
Create a new Twilio function named
/transcribe. -
Replace the boilerplate code with the following code:
JavaScript import { DeepgramClient } from "@deepgram/sdk"; const deepgram = new DeepgramClient({ apiKey: process.env.DEEPGRAM_API_KEY }); exports.handler = async function (context, event, callback) { const { RecordingUrl, CallSid } = event; const twilioClient = context.getTwilioClient(); const { from: caller, to: twilioNumber } = await twilioClient.calls(CallSid).fetch(); // Further code here return callback(null, true); };
-
Generate a transcription of the call using Deepgram’s Node.js SDK:
JavaScript const result = await deepgram.listen.v1.media.transcribeUrl({ url: RecordingUrl, punctuate: true, tier: "enhanced", summarize: "v2", });
Summarize the Call
Section titled “Summarize the Call”From Deepgram’s transcription, isolate the summary:
const summary = result.results.summary.short;Sending Summary Messages
Section titled “Sending Summary Messages”Now that you have a summary of the call, you can send it to both the caller and the agent.
Send the Summary via SMS
Section titled “Send the Summary via SMS”Finally, you can send Deepgram’s summary via SMS:
for (let number of [process.env.FORWARD_NUMBER, caller]) {
await twilioClient.messages.create({
body: summary,
to: number,
from: twilioNumber,
});
}Save both files again, and deploy all functions in your service.
Testing Your Implementation
Section titled “Testing Your Implementation”To test your implementation, call your Twilio number, pick it up on your “agent device”, speak, and hang up. You should receive a summary message via SMS a few seconds later.
Full Sample Code
Section titled “Full Sample Code”In case you need it for reference, we provide the full sample code used in this tutorial below:
// /inbound
exports.handler = function (context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
const dial = twiml.dial({
record: "record-from-answer-dual",
recordingStatusCallback: "/transcribe",
});
dial.number(process.env.FORWARDING_NUMBER);
return callback(null, twiml);
};
// /transcribe
import { DeepgramClient } from "@deepgram/sdk";
const deepgram = new DeepgramClient({ apiKey: process.env.DEEPGRAM_API_KEY });
exports.handler = async function (context, event, callback) {
const { RecordingUrl, CallSid } = event;
const twilioClient = context.getTwilioClient();
const { from: caller, to: twilioNumber } = await twilioClient.calls(CallSid).fetch();
const result = await deepgram.listen.v1.media.transcribeUrl({
url: RecordingUrl,
punctuate: true,
tier: "enhanced",
summarize: "v2",
});
const summary = result.results.summary.short;
for (let number of [process.env.FORWARDING_NUMBER, caller]) {
await twilioClient.messages.create({
body: summary,
to: number,
from: twilioNumber,
});
}
return callback(null, true);
};