如何通过Twilio网关接入Dialogflow ES机器人实现外呼及获取action链接?
解决方案
一、将Dialogflow ES接入Twilio外呼通话
- 确认Twilio与Dialogflow ES的集成配置:你已添加Dialogflow ES插件,接下来需在Twilio控制台的插件库启用该插件,完成Google Cloud/Dialogflow账号的授权关联。
- 生成对接Dialogflow的TwiML:外呼接通后,需返回包含
<Connect>标签的TwiML,将通话转接到Dialogflow机器人。Python SDK实现示例:
from twilio.twiml.voice_response import VoiceResponse, Connect response = VoiceResponse() connect = Connect() connect.dialogflow() # 自动关联已配置的Dialogflow ES代理 response.append(connect) print(response)
- 配置Dialogflow语音响应:在Dialogflow ES中,确保所有意图都设置了语音响应(通话场景仅支持语音交互),并启用语音输入自动识别功能。
- 指定外呼的TwiML路由:发起外呼的代码里,将
url参数指向能返回上述TwiML的webhook端点(比如你自己的Flask接口),Twilio接通后会自动拉取TwiML并连接到Dialogflow。
二、Connect组件中action链接的说明
action参数的值是你自行搭建的webhook端点URL,作用是在Dialogflow会话结束(用户挂断、流程完成、超时等场景)时,Twilio会向该URL发送POST请求,传递通话状态、会话结果等数据。
- 实现方式:用Python框架(如Flask)编写接收POST请求的接口,示例代码:
from flask import Flask, request app = Flask(__name__) @app.route('/virtualagent_ended', methods=['POST']) def virtual_agent_ended(): # 处理Twilio发送的回调数据,如CallSid、对话结果等 call_sid = request.form.get('CallSid') print(f"会话结束,CallSid: {call_sid}") # 返回空TwiML或后续处理指令 return "<Response></Response>" if __name__ == '__main__': app.run(port=5000)
- 测试与部署:本地测试时,用ngrok将本地端口暴露为公网URL(如
https://xxxx-xx-xx-xx-xx.ngrok.io/virtualagent_ended),此URL即为action值;部署到云服务后,使用云服务域名+接口路径即可。
内容的提问来源于stack exchange,提问作者oToMaTiX
相关产品推荐
相关产品推荐

