【问题标题】:Dialogflow change surface from webhookDialogflow 从 webhook 更改表面
【发布时间】:2019-02-21 22:58:38
【问题描述】:

我正在尝试从我的 webhook 发送响应以触发更改到另一个表面的过程,但 Actions on Google 总是抛出:

必须设置 MalformedResponse 'final_response'。

而且它不是很有帮助。

这是我返回的 JSON:

{
    "payload": {
        "google": {
            "expectUserResponse": true,
            "conversationToken": "{\"data\":{}}",
            "userStorage": "{\"data\":{}}",
            "expectedInputs": [
                {
                    "inputPrompt": {
                        "richInitialPrompt": {
                            "items": [
                                {
                                    "simpleResponse": {
                                        "textToSpeech": "PLACEHOLDER"
                                    }
                                }
                            ]
                        }
                    },
                    "possibleIntents": [
                        {
                            "intent": "actions.intent.NEW_SURFACE",
                            "inputValueData": {
                                "@type": "type.googleapis.com/google.actions.v2.NewSurfaceValueSpec",
                                "capabilities": [
                                    {
                                        "name": "actions.capability.SCREEN_OUTPUT"
                                    }
                                ],
                                "context": "Sure, I have some sample images for you.",
                                "notificationTitle": "Sample Images"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

在 Dialogflow 上,我设置了 2 个意图;一个意图返回此处指定的 json,另一个意图带有事件 actions_intent_NEW_SURFACE,所以我知道用户对更改表面的问题的反应。

我一直在阅读这些网站:

https://developers.google.com/actions/assistant/surface-capabilities#multi-surface_conversations

https://dialogflow.com/docs/reference/api-v2/rest/Shared.Types/WebhookResponse

https://developers.google.com/actions/build/json/dialogflow-webhook-json#dialogflow-response-body

Action On Google, webhook response with actions.intent.NEW_SURFACE(这似乎与我有同样的问题,但 OP 没有写响应。)

但是他们都没有让我对这件事有所了解。

【问题讨论】:

  • 建议:尝试使用独立的 AoG NodeJS 客户端 - github.com/actions-on-google/actions-on-google-nodejs 或 AoG 客户端与 Dialogflow Fulfillment Client - github.com/dialogflow/dialogflow-fulfillment-nodejs 这些将帮助您进行编码,并且易于使用表面切换、权限等功能, RichUI 通过这些客户端。
  • 感谢您的建议,我支持您,使用 NodeJS 比使用 webhook 实现要容易得多,因为所有文档都是针对 Node.js 的。但是 webhook 决定来自于使用我正在使用的框架中的其他工具的必要性。
  • 您使用的是哪个版本的 Dialogflow 和 AoG?
  • Dialogflow v2. AoG 我认为只有一个?
  • 看起来developers.google.com/actions/assistant/… 中的文档已经过时并且不起作用。我尝试将 NEW_SURFACE 意图作为 systemIntent 发送,并且有效。

标签: dialogflow-es actions-on-google


【解决方案1】:

您似乎正尝试发送完整的 Action SDK 正文作为 Dialogflow 响应的一部分。虽然 JSON 的 payload.google 部分包含与 Action SDK 响应相似的对象,但存在一些差异。您可以查看 https://developers.google.com/actions/build/json/dialogflow-webhook-json#dialogflow-response-body 以获取使用帮助程序时响应应该是什么的完整示例,但我认为您的响应需要类似于

{
    "payload": {
        "google": {
            "expectUserResponse": true,
            "userStorage": "{\"data\":{}}",
            "richResponse": {
                "items": [
                    {
                        "simpleResponse": {
                            "textToSpeech": "PLACEHOLDER"
                        }
                    }
                ]
            },
            "systemIntent": {
                "intent": "actions.intent.NEW_SURFACE",
                "inputValueData": {
                    "@type": "type.googleapis.com/google.actions.v2.NewSurfaceValueSpec",
                    "capabilities": [
                        "actions.capability.SCREEN_OUTPUT"
                    ],
                    "context": "Sure, I have some sample images for you.",
                    "notificationTitle": "Sample Images"
                }
            }
        }
    }
}

【讨论】:

  • 是的,我也想通了。我的误解是:developers.google.com/actions/assistant/… JSON 有一个格式,然后在你有其他的链接上。在那个链接上,他们没有说 NEW_SURFACE 是一个可用的选项。 PS:您可以将功能更改为:“capabilities”:[“actions.capability.SCREEN_OUTPUT”],我将其设置为有效响应?
  • 我不确定我是否理解您在评论中提出的问题。如果这与这个问题有关,请在问题中提出。如果是新问题,请发布新问题。
猜你喜欢
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多