You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python获取Twilio外呼通话信息并传入Google Speech-to-Text

实现Twilio通话转Google Speech-to-Text的完整方案

核心实现逻辑可以直接基于你现有的<Gather>组件改造,无需复杂的流转发配置,即可实现「对方停止发言后自动识别语音」的需求,具体步骤如下:

步骤1:前置准备

  • 开通Twilio语音服务、Google Cloud Speech-to-Text服务,分别拿到Twilio的Account SID、Auth Token,以及Google服务账号的密钥JSON文件
  • 你的服务端需要暴露公网可访问的地址用来接收Twilio的回调请求,本地开发可以用ngrok做内网穿透

步骤2:配置通话入口路由

你给出的参考代码已经符合基础逻辑,<Gather>的speechTimeout参数就是用来检测用户停止发言的时长,达到阈值后会自动触发配置的action回调:

# Flask版本示例,Django仅需调整路由和请求写法即可
from twilio.twiml.voice_response import VoiceResponse, Gather

@app.route("/call", methods=['GET', 'POST'])
def call_entry():
    resp = VoiceResponse()
    gather = Gather(
        input='speech',
        # 停止发言3秒后触发回调,可根据需求调整时长
        speechTimeout=3,
        action='/process-speech',
        autoTrim='true'
    )
    gather.say('请开始发言,结束后我们将自动处理您的语音内容')
    resp.append(gather)
    # 10秒未检测到语音则重新触发提示
    resp.redirect('/call')
    return str(resp)

步骤3:实现语音识别回调接口

回调接口会在用户停止发言后被Twilio调用,我们在这个环节拿到通话录音,传给Google STT处理即可:

import os
import time
from google.cloud import speech_v1p1beta1 as speech
from twilio.rest import Client
from flask import request

# 初始化Google STT客户端,提前将密钥路径写入环境变量
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "你的Google服务账号密钥JSON文件路径"
stt_client = speech.SpeechClient()

# 初始化Twilio客户端
TWILIO_ACCOUNT_SID = "你的Twilio Account SID"
TWILIO_AUTH_TOKEN = "你的Twilio Auth Token"
twilio_client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)

@app.route("/process-speech", methods=['POST'])
def process_speech():
    call_sid = request.form.get('CallSid')
    # 生成当前通话的单声道wav格式录音
    recording = twilio_client.recordings.create(
        call_sid=call_sid,
        recording_channels='mono',
        recording_format='wav'
    )
    # 等待录音生成,避免资源不存在报错
    time.sleep(1)
    # 拼接带鉴权的录音下载地址
    recording_url = f"https://{TWILIO_ACCOUNT_SID}:{TWILIO_AUTH_TOKEN}@api.twilio.com/2010-04-01/Accounts/{TWILIO_ACCOUNT_SID}/Recordings/{recording.sid}.wav"

    # 调用Google STT识别内容
    audio = speech.RecognitionAudio(uri=recording_url)
    config = speech.RecognitionConfig(
        encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
        sample_rate_hertz=8000,
        language_code="zh-CN",
        enable_automatic_punctuation=True
    )
    stt_response = stt_client.recognize(config=config, audio=audio)
    transcript = stt_response.results[0].alternatives[0].transcript if stt_response.results else "未识别到有效语音"
    # 此处可自行添加识别结果的后续业务逻辑

    # 返回通话后续处理的TwiML
    resp = VoiceResponse()
    resp.say(f"识别完成,您刚才说的内容是:{transcript}")
    resp.hangup()
    return str(resp)

步骤4:配置Twilio Webhook

进入Twilio控制台的号码管理页,找到你用来呼叫的号码,在「Voice & Fax」配置项中,将「A Call Comes In」的回调地址填为你的服务端/call接口的公网地址,请求方式选择POST,保存后即可测试。

注意事项

  • 如果需要实时语音识别,可以使用Twilio的Media Stream功能,将通话RTP流推送到服务端后,喂给Google STT的流式识别接口即可
  • 生产环境建议将Twilio的鉴权信息、Google密钥存入环境变量或者配置中心,避免硬编码泄露

内容的提问来源于stack exchange,提问作者tachycardiazxc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:45:00