我有一个Express应用,该应用支持通过护照进行Google身份验证和授权。我已经开始将其与Google Assistant集成在一起,并且一切进展顺利,但是我在https://developers.google.com/actions/identity/google-sign-in#start_the_authentication_flow
中所述的帐户链接方面遇到了麻烦使用https://codelabs.developers.google.com/codelabs/actions-2/#4文档中的方法,我可以获取用户详细信息,但是当我尝试修改以支持
时app.intent('Start Signin', conv => {
conv.ask(new SignIn('To get your account details'))
})
和
app.intent('Get Signin', (conv, params, signin) => { ...}
对话框流总是回退到我的默认回退意图,并且在Express控制台中出现错误
Error: Dialogflow IntentHandler not found for intent: Default Fallback Intent
我的dialogflow意图设置为使用webhook,其他意图可以正常工作(直到我添加了这些登录意图!)
阅读此线程Dialogflow IntentHandler not found for intent: myIntent (Dialogflow V2)时,建议使用意图名称而不是操作名称,因此我在Google模拟器上检查了我的操作,并且该请求包含:
"inputs": [
{
"intent": "actions.intent.SIGN_IN",
"rawInputs": [
{
"inputType": "KEYBOARD"
}
],
"arguments": [
{
"name": "SIGN_IN",
"extension": {
"@type": "type.googleapis.com/google.actions.v2.SignInValue",
"status": "OK"
}
}
]
}
],
所以我尝试将Dialogflow意向名称更新为actions.intent.SIGN_IN
,并在Express应用程序中相应地修改意向名称,但这没有任何区别。
模拟器的响应包括:
"responseMetadata": {
"status": {
"code": 14,
"message": "Webhook error (206)"
},
但是我不确定那是否仅仅是因为某种原因,意图名称不匹配。任何帮助,不胜感激!
答案 0 :(得分:1)
正如您在评论中所推测的那样,问题是您的“获取登录”意图未注册以获得指示用户已登录(或未登录)的事件。由于没有这样的Intent设置,因此最终会调用Fallback Intent,后者显然没有在Webhook中注册任何Intent处理程序。
要使“获取登录”意图获取登录事件,请将“事件”字段设置为actions_intent_SIGN_IN
。 (请注意,它与您在模拟器中看到的Intent名称相似,但是使用下划线而不是点。)
顺便说一句,模拟器向您展示了助手和Dialogflow之间的通信情况,因此了解Dialogflow对其进行的操作可能会有些混乱。它与您的Intent名称或其他名称无关。
最后,通常不需要进行此检查。您将知道用户是否已登录,因为已设置了auth令牌或已设置了id令牌(取决于您的帐户链接方法)。