Actions-On-Google权限意图获取用户信息后无响应问题排查
解决Actions-On-Google权限意图无响应的踩坑记录
最近我在做Actions-On-Google的权限获取功能,想要通过Permission Intent获取用户的姓名和位置,写了这段代码:
const agent = new WebhookClient({request, response}); const {WebhookClient} = require('dialogflow-fulfillment'); const {Text, Card, Image, Suggestion, Payload} = require('dialogflow-fulfillment'); let payload = { "systemIntent": { "intent": "actions.intent.PERMISSION", "data": { "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec", "optContext": "To deliver your order", "permissions": [ "NAME", "DEVICE_PRECISE_LOCATION" ] } } }; agent.add('PLACEHOLDER_FOR_PERMISSION'); agent.add(new Payload(PLATFORMS.ACTIONS_ON_GOOGLE, payload));
按照预期,这个负载应该触发这样的权限请求提示:
为了配送您的订单,我需要从Google获取您的姓名和街道地址,可以吗?
我已经在Dialogflow里设置了带有actions_intent_PERMISSION事件的后续意图,可是不管用建议芯片还是其他方式触发这个事件,都完全没反应。折腾了两天都没找到问题所在,还好最后终于解决了,下面把问题和解决要点整理出来:
先附上我设置的意图相关截图:
触发permissions意图时的请求JSON:
{ "responseId": "54a4be35-3d0b-4cc8-b036-46fab0d09361", "queryResult": { "queryText": "permissions", "action": "permissions", "parameters": {}, "allRequiredParamsPresent": true, "fulfillmentMessages": [ { "text": { "text": [ "" ] } } ], "intent": { "name": "projects/projectid/agent/intents/95237653-0af0-4d0c-9101-0cd8ee0db186", "displayName": "permissions" }, "intentDetectionConfidence": 1, "diagnosticInfo": {}, "languageCode": "en" }, "originalDetectIntentRequest": { "payload": {} }, "session": "projects/projectid/agent/sessions/13213e7f-dba5-4d0c-979a-f626f7ac4691" }
fulfillment返回的响应JSON:
{ "conversationToken": "[]", "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": {}, "possibleIntents": [ { "intent": "actions.intent.PERMISSION", "inputValueData": { "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec", "permissions": [ "NAME", "DEVICE_PRECISE_LOCATION" ], "optContext": "To locate you" } } ], "speechBiasingHints": [ "$name-type", "$sports", "$gender" ] } ], "responseMetadata": { "status": { "message": "Success (200)" }, "queryMatchInfo": { "queryMatched": true, "intent": "95237653-0af0-4d0c-9101-0cd8ee0db186" } } }
当时模拟器对这个permissions意图的响应完全是空的,后来排查出几个关键问题,解决后功能就正常了:
问题解决核心要点
- Actions-on-Google模拟器不靠谱:这个模拟器稳定性很差,没法用来可靠验证Webhook的工作状态,别被它的无响应误导了
- Promise处理要到位:Agent必须等待所有Promise执行完成后才能进入下一步,之前就是因为Promise没正确解析,导致后续意图逻辑没触发
- 换个测试方式:别依赖模拟器了,把Bot发布到助手目录的Alpha版本,用真实设备或者Alpha测试通道来验证,这才是靠谱的测试方法
内容的提问来源于stack exchange,提问作者Tarun
相关产品推荐
相关产品推荐

