Twilio 기능 및 Deepgram으로 전화 통화 기록
16872 단어 deepgramserverlesstwilio
오늘은 Twilio Functions를 사용하여 발신자에게 메시지를 표시한 다음 음성 메일과 유사한 메시지를 녹음하는 전화번호를 만들 것입니다. 완료되면 Deepgram으로 성적표가 생성되어 발신자에게 전송됩니다.

시작하기 전에
무료Deepgram API Key가 필요합니다. 또한 SMS 및 음성 기능이 있는 계정에 Twilio account 및 전화번호가 필요합니다.
Twilio 기능 공간 설정
Twilio Console 내에서 Developer Tools -> Functions & Assets로 이동하여 새 서비스를 만듭니다. 서비스에는 단일 프로젝트와 관련된 여러 Twilio 함수 및 자산이 포함될 수 있습니다. 여기서 독립 실행형 기능이 아닌 새 서비스를 만드는 것이 중요합니다.
종속성 섹션으로 이동하여
@deepgram/sdk
를 추가합니다(최신 버전은 생략 가능). 그런 다음 환경 변수 섹션으로 이동하여 Deepgram 콘솔에서 생성된 API 키 값으로 DEEPGRAM_KEY
라는 키를 추가합니다.함수는 공개, 보호 및 비공개의 세 가지 가시성 수준 중 하나를 가질 수 있습니다. 기본값인 '보호됨'은 이 프로젝트에 적합하며 Twilio 웹후크만 트리거할 수 있음을 의미합니다.
인바운드 통화 녹음
기본
/welcome
함수의 이름을 /inbound
로 바꿉니다. 전체 파일을 다음으로 바꿉니다.
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse()
twiml.say({ voice: 'woman', language: 'en' }, 'Try Deepgram transcription by speaking after the beep. Talk about what you see around you right now.')
twiml.record({
maxLength: 30, // seconds, 30 is default
playBeep: true,
recordingStatusCallback: '/transcribe'
})
return callback(null, twiml)
};
수신 전화 및 문자에 응답하기 위해 Twilio를 사용하면 TwiML(Twilio Markup Language)로 요청을 구성하고 응답할 수 있습니다. XML과 매우 유사하며 기본적으로 Twilio Functions에 포함된 Node Helper Library로 생성할 수 있습니다.
이 스니펫은 새 TwiML 응답을 생성하고 구를 말하고 경고음을 울리고 녹음을 시작합니다. 통화가 종료되면(녹화 30초 후 끊기 또는 종료) 페이로드가
/transcribe
로 전송됩니다(다음 섹션에서 생성됨).함수를 저장하고 모두 배포를 클릭합니다. 배포되면 이 기능을 사용할 준비가 된 것입니다. Twilio 번호 설정으로 이동하고 전화가 오면 기능을 선택합니다. 서비스 및
/inbound
기능 경로를 선택하십시오.
전화를 걸면 말하는 소리가 들리고 신호음이 울립니다. 지금 말하면 녹음이 진행되고 데이터가
/transcribe
로 전송되지만 해당 엔드포인트가 아직 존재하지 않습니다. 해결해 보겠습니다.통화 녹음
새 함수를 만듭니다 -
/transcribe
. 상용구를 삭제하고 다음 코드로 함수를 설정합니다.const { Deepgram } = require('@deepgram/sdk')
const deepgram = new Deepgram(process.env.DEEPGRAM_KEY)
exports.handler = async function(context, event, callback) {
const { RecordingUrl, CallSid } = event
// Further code here
return callback(null, true)
};
기록 데이터는
event
및 RecordingUrl
값으로 분해되는 CallSid
개체에서 사용할 수 있습니다. 안타깝게도 이 페이로드에는 발신자의 전화번호가 포함되어 있지 않지만 CallSid
에서 조회할 수 있습니다. Further code here
주석이 상황인 경우 다음을 추가합니다.const twilioClient = context.getTwilioClient()
const { from: caller, to: twilioNumber } = await twilioClient.calls(CallSid).fetch()
발신자의 전화번호는 이제
caller
라는 변수에서 사용할 수 있으며 전화를 건 번호는 twilioNumber
로 사용할 수 있습니다. 이제 Deepgram의 Node.js SDK로 전사를 생성합니다.const transcriptionFeatures = { punctuate: true, tier: 'enhanced' }
const { results } = await deepgram.transcription.preRecorded({ url: RecordingUrl }, transcriptionFeatures)
const { transcript } = results.channels[0].alternatives[0]
이 요청은 Deepgram의 punctuation 기능을 사용하며, 더 정확한 기록을 위해 enhanced tier을 사용하라는 요청도 함께 사용합니다.
SMS를 통해 전사 보내기
이제 대화 내용이 생성되었으므로 호출자에게 보낼 차례입니다. 성적표가 생성된 직후에 다음을 추가하여 SMS 메시지를 보냅니다.
const message = await twilioClient.messages.create({
body: `Here is what you said:\n\n${transcript}`,
to: caller,
from: twilioNumber
})
마지막으로 콜백 값을
true
에서 { results, message }
로 변경합니다. 이것은 순전히 Twilio 콘솔에 로그인하기 위한 것입니다.두 파일을 다시 저장하고 서비스에 모든 기능을 배포합니다. Twilio 번호로 전화를 걸어 신호음이 들리면 말한 다음 끊습니다. 몇 초 후에 메시지를 받게 됩니다.
요약해서 말하자면
최종 코드는 다음과 같습니다.
// /record
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse()
twiml.say({ voice: 'woman', language: 'en' }, 'Try Deepgram transcription by speaking after the beep. Talk about what you see around you right now.');
twiml.record({
maxLength: 30,
playBeep: true,
recordingStatusCallback: '/transcribe'
})
return callback(null, twiml)
}
// /transcribe
const { Deepgram } = require('@deepgram/sdk')
const deepgram = new Deepgram(process.env.DEEPGRAM_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 transcriptionFeatures = { punctuate: true , tier: 'enhanced' }
const { results } = await deepgram.transcription.preRecorded({ url: RecordingUrl }, transcriptionFeatures)
const { transcript } = results.channels[0].alternatives[0]
const message = await twilioClient.messages.create({
body: `Here is what you said:\n\n${transcript}`,
to: caller,
from: twilioNumber
})
return callback(null, { results, message })
}
종속성을 설치하고 환경 변수를 설정하는 것을 잊지 마십시오. 이 프로젝트에 대해 궁금한 점이 있으면 언제든지 문의하십시오.
Reference
이 문제에 관하여(Twilio 기능 및 Deepgram으로 전화 통화 기록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/deepgram/transcribe-phone-calls-with-twilio-functions-and-deepgram-3e3p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)