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

如何在Twilio中通过DTMF输入调用Python函数且不关闭WebSocket

解决方案:无需关闭WebSocket即可发起呼叫

核心思路是绕过Twilio的TwiML后续指令依赖,直接用Twilio REST API在Python端发起呼叫,这样既能保留WebSocket连接继续处理IVR逻辑,又能执行拨号操作。

步骤1:修改TwiML模板

移除原TwiML中<Connect>后的<Dial>指令,只保留WebSocket流连接:

<Connect>
    <Stream url="wss://{{ host }}/audio/" />
</Connect>

步骤2:Python端处理DTMF并调用Twilio API

当检测到目标DTMF输入(比如数字1)时,直接调用Twilio的Calls API发起呼叫,无需关闭WebSocket。

首先确保安装Twilio Python SDK:

pip install twilio

然后在你的WebSocket消息处理逻辑中添加以下代码:

from twilio.rest import Client

# 替换为你的Twilio账户信息
ACCOUNT_SID = "你的账户SID"
AUTH_TOKEN = "你的认证令牌"
TWILIO_PHONE_NUMBER = "你的Twilio电话号码(带国家码)"

def process_dtmf_input(digit):
    if digit == "1":
        # 发起呼叫
        client = Client(ACCOUNT_SID, AUTH_TOKEN)
        call = client.calls.create(
            to="{{ number }}",  # 替换为要拨打的目标号码
            from_=TWILIO_PHONE_NUMBER,
            url="https://你的服务器地址/handle-call"  # 呼叫接通后执行的TwiML接口
        )
        # 这里可以执行你的自定义业务代码,比如记录日志、触发其他逻辑
        print(f"呼叫已发起,Call SID: {call.sid}")

# 你的WebSocket消息处理函数示例
def handle_websocket_message(message):
    if message.get("event") == "dtmf":
        dtmf_digit = message["digit"]
        process_dtmf_input(dtmf_digit)

关键说明

  • 此方案中,WebSocket连接会持续保持,你可以继续处理后续的DTMF输入或其他音频流事件。
  • 呼叫接通后的行为由url参数指定的TwiML接口控制,比如播放语音、转接等,完全独立于原IVR的WebSocket流程。
  • 确保你的Python服务器能正常访问Twilio API,且账户有可用的通话额度和权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:55:11