如何在Twilio外呼通话中获取用户的DTMF按键输入
在Twilio外呼通话中获取用户按键输入的实现方案
核心逻辑
Twilio通过TwiML的<Gather>指令实现按键收集:外呼接通后,你的服务返回包含<Gather>的TwiML引导用户按键;用户输入后,Twilio会将按键数据通过POST请求发送到你指定的webhook接口,读取接口参数即可获取输入内容。
具体实现步骤
1. 配置外呼初始响应接口
当Twilio发起外呼并接通用户后,会请求你预先设置的初始webhook地址,该接口需返回包含<Gather>的TwiML,告知用户按键规则。2. 编写按键处理接口
在<Gather>的action属性中指定接收按键数据的接口地址,Twilio会将用户输入的按键以Digits参数传递到该接口,读取此参数即可完成获取。3. 处理异常场景
通过<Gather>的timeout(等待按键超时时间)和numDigits(需收集的按键数量)属性控制交互逻辑,同时添加无输入/超时后的 fallback 处理。
代码示例(Python Flask)
初始响应接口(引导用户按键)
from flask import Flask, Response, request app = Flask(__name__) @app.route("/outbound/start", methods=['POST']) def outbound_start(): twiml = """ <Response> <Gather action="/outbound/process-key" method="POST" numDigits="1" timeout="5"> <Say>您好,请按1查询订单状态,按2联系客服。</Say> </Gather> <Say>未收到您的输入,通话即将结束。</Say> <Hangup/> </Response> """ return Response(twiml, mimetype='application/xml')
按键处理接口(获取并处理用户输入)
@app.route("/outbound/process-key", methods=['POST']) def process_key(): user_input = request.form.get('Digits') if user_input == '1': twiml = """ <Response> <Say>您的订单正在配送中,预计今日送达。</Say> <Hangup/> </Response> """ elif user_input == '2': twiml = """ <Response> <Say>正在为您转接客服,请稍候。</Say> <Dial>+1234567890</Dial> </Response> """ else: twiml = """ <Response> <Say>无效的按键,请重新输入。</Say> <Redirect method="POST">/outbound/start</Redirect> </Response> """ return Response(twiml, mimetype='application/xml')
注意事项
- 确保你的webhook地址是公网可访问的(本地调试可使用端口映射工具)
<Gather>的method属性需与接口的请求方法(POST/GET)保持一致- 若需收集固定长度的按键(如验证码),设置
numDigits为对应数值,用户输入足够位数后会自动提交 - 可通过
<Say>或<Play>指令播放语音提示,引导用户完成按键操作
内容的提问来源于stack exchange,提问作者Adnan Khan
相关产品推荐
相关产品推荐

