Twilio 기능 및 Deepgram으로 전화 통화 기록

Twilio는 개발자가 전체 통신 기술 세트를 애플리케이션에 통합할 수 있는 클라우드 통신 플랫폼입니다. API를 제공하는 것 외에도 Twilio Runtime이 있어 Twilio 콘솔에서 직접 서버리스 애플리케이션을 개발하고 배포할 수 있습니다. 정말 멋지다.

오늘은 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)
};


기록 데이터는 eventRecordingUrl 값으로 분해되는 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 })
}


종속성을 설치하고 환경 변수를 설정하는 것을 잊지 마십시오. 이 프로젝트에 대해 궁금한 점이 있으면 언제든지 문의하십시오.

좋은 웹페이지 즐겨찾기