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

基于Python与Twilio Voice API动态生成托管TwiML的实现方案问询

动态生成并托管TwiML的Python实现方案

1. 动态生成TwiML

直接使用Twilio官方提供的Python SDK内置的TwiML生成模块即可,无需手动拼接XML,避免出现格式错误、转义异常等问题。
首先安装依赖:
pip install twilio
示例生成代码:

from twilio.twiml.voice_response import VoiceResponse, Say, Dial

def generate_twiml_by_user_msg(user_msg: str) -> str:
    resp = VoiceResponse()
    # 根据传入的用户消息动态生成不同的TwiML逻辑
    if "转人工" in user_msg:
        resp.dial("+86你的目标手机号")
    elif "查询余额" in user_msg:
        resp.say("您当前的账户余额为120元", voice="alice", language="zh-CN")
    else:
        resp.say("抱歉我未能识别您的需求,请重新说一遍", voice="alice", language="zh-CN")
    # 直接输出标准格式的TwiML XML字符串
    return str(resp)

2. 托管TwiML接口

Twilio需要公网可访问的HTTP接口来拉取TwiML内容,你可以用任意Python Web框架实现该接口,轻量场景推荐用Flask:
首先安装依赖:
pip install flask
示例接口代码:

from flask import Flask, request, Response

app = Flask(__name__)

# Twilio回调接口
@app.route("/voice/callback", methods=["POST"])
def voice_callback():
    # 从Twilio的回调请求中获取用户语音识别结果/按键输入
    user_input = request.form.get("SpeechResult", "") or request.form.get("Digits", "")
    # 动态生成TwiML
    twiml_xml = generate_twiml_by_user_msg(user_input)
    # 返回XML格式响应
    return Response(twiml_xml, mimetype="application/xml")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

本地开发阶段可以用内网穿透工具将本地5000端口暴露到公网做测试,验证逻辑无误后可以部署到任意支持Python运行的云服务器、Serverless函数平台上。

3. 配置Twilio控制台

登录Twilio控制台,进入你要使用的语音号码配置页,将「A Call Comes In」对应的回调地址设置为你部署好的公网接口地址,请求方式选择POST即可,后续每次有电话呼入,Twilio都会主动请求你的接口拉取动态生成的TwiML并执行对应逻辑。

注意事项

  • 回调接口必须为公网可访问地址,本地局域网地址无法被Twilio访问
  • 接口响应的Content-Type必须为application/xml,否则Twilio会解析失败
  • 生产环境建议开启Twilio请求签名校验,避免恶意请求调用你的接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:48:03