通过Twilio集成向Dialogflow传主叫号码遇阻:OriginalDetectIntentRequest无法提交
问题解决思路
首先,你代码里的OriginalDetectIntentRequest获取方式不对——它不在agent.parameters里,而是在agent.request_.originalDetectIntentRequest路径下。而且Twilio传递的主叫号码(from)嵌套在这个对象的payload里,SheetDB大概率不支持接收复杂嵌套对象,这也是你提交该字段失败的核心原因。
修正步骤
- 正确提取主叫号码:从Twilio的请求 payload 里直接取出需要的主叫号码,而非传递整个复杂对象:
function reschedule(agent) { // 获取原始请求对象 const originalRequest = agent.request_.originalDetectIntentRequest; // 从Twilio的payload中提取主叫号码(Twilio字段为From,注意大小写) const callerNumber = originalRequest?.payload?.From; // 仅传递扁平的字段给SheetDB axios.post('https://sheetdb.io/api/v1/q0te84lfo1aal?sheet=Appointments', { "data": { "student": student, "to_date": to_date, "from_date": from_date, "created": new Date(), "caller_number": callerNumber // 直接存储主叫号码,而非整个OriginalDetectIntentRequest对象 } }); }
适配SheetDB数据要求:SheetDB仅接受扁平的键值对数据,复杂嵌套对象会被解析失败或直接忽略,因此必须提取具体字段(比如主叫号码)而非传递整个原始请求对象。
添加容错处理:用
?.可选链操作符避免因请求结构异常导致代码报错。
补充说明
Dialogflow的OriginalDetectIntentRequest是存储第三方集成(如Twilio)原始请求数据的嵌套对象,这类结构无法被SheetDB这类表格API直接处理,所以核心是提取你实际需要的字段(主叫号码),而非传递整个对象。
内容的提问来源于stack exchange,提问作者Andrew Learned
相关产品推荐
相关产品推荐

