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

仅使用twilio.rest如何将Twilio <Gather>的用户输入结果存入变量

Twilio的语音呼叫流程完全运行在Twilio云端,用户按键输入的DTMF信号仅会被Twilio云端捕获,原生机制下必须通过回调传输结果,不存在完全脱离回调的实现方案,但你不需要自行搭建Flask服务、配置公网地址,仅借助Twilio内置的免费云端功能+twilio.rest库即可实现需求,无需额外本地依赖。

实现步骤

步骤1:创建Twilio Function存储用户输入

直接在Twilio控制台创建免费的Function(无需自行部署服务器,Twilio自动生成公网访问地址),代码如下:

exports.handler = function(context, event, callback) {
  const twilioClient = context.getTwilioClient();
  // 将用户输入的验证码写入当前呼叫的annotation字段
  twilioClient.calls(event.CallSid)
    .update({annotation: event.Digits})
    .then(() => {
      const twiml = new Twilio.twiml.VoiceResponse();
      twiml.say({language: 'ru-RU'}, 'Спасибо, код получен.');
      callback(null, twiml);
    });
};

创建完成后复制Function的公网访问地址备用。

步骤2:修改本地Python代码

本地代码仅保留twilio.rest依赖,发起呼叫后轮询呼叫详情即可拿到用户输入:

from twilio.rest import Client
import time

account_sid = 'AC274461ad47988c753424a3c8735dbcc1'
auth_token = '8ac88e8d5bce419ae3b5cbac4fc255f9'
client = Client(account_sid, auth_token)

# 替换为你上一步创建的Function的访问地址
FUNCTION_URL = "你的Twilio Function访问地址"
# 可根据实际验证码长度调整numDigits参数
xml = f'''
<Response>
    <Gather language="ru-RU" numDigits="4" action="{FUNCTION_URL}" method="POST">
        <Say language="ru-RU">Здравствуйте, пожалуйста введите код для подтверждения.</Say>
    </Gather>
    <Say language="ru-RU">Вы не ввели код, звонок завершается.</Say>
</Response>'''

# 发起呼叫
call = client.calls.create(
    twiml=xml,
    to='+375336412273',
    from_='+12318247004'
)
print(f"呼叫SID: {call.sid}")

# 轮询获取用户输入,最多等待30秒
input_code = None
for _ in range(30):
    call_info = client.calls(call.sid).fetch()
    if call_info.annotation:
        input_code = call_info.annotation
        break
    time.sleep(1)

if input_code:
    print(f"用户输入的验证码为: {input_code}")
else:
    print("未获取到用户输入,请求超时")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:18:00