首页 > 解决方案 > 对 Google Dialogflow 中的非文本电报消息采取行动。后备意图应该转发所有内容

问题描述

我正在用 Telegram 和 Google Dialogflow 构建一个聊天机器人。当我通过 Dialogflow“集成”选项卡将 Dialogflow 集成到 Telegram 时,Dialogflow 注册为 Webbhook 服务以拦截所有收到的 Telegram 消息。不幸的是,我无法对贴纸、图像和 Telegram 付款结账消息等非短信消息采取行动。

我希望 Dialogflow 将所有收到的消息转发到我的自定义实现 webhook 中的后备意图。在我的 webhook 中,我将能够解析收到的正文并相应地处理不受支持的电报消息。

我知道 Dialogflow 中有一个 FACEBOOK_MEDIA 事件。当通过 Facebook 信使将图像发送到 Dialogflow 时会触发此事件。是否有类似 TELEGRAM_MEDIA 甚至 TELEGRAM_UNSUPPORTED 事件可用?

我真的希望能够在 Dialogflow 中处理的不仅仅是短信。

我是否需要在 Telegram 和 Dialogflow 之间添加另一层才能对所有 Telegram 消息采取行动?

到目前为止我分析的内容:

我将所有 Google Dialogflow 交互日志转发到 Google Cloud stackdriver。Dialogflow 似乎完全忽略了非文本消息。当我向我的电报机器人发送非文本消息时,我根本看不到任何日志条目。另一方面,当我发送文本时,日志及其 JSON 有效负载会立即出现在堆栈驱动程序中。

我在 Dialogflow 中创建了一个后备意图,并在 Fulfillment 部分启用了“为此意图启用 webhook 调用”。不幸的是,我的履行功能不会触发任何非文本事件。Dialogflow 首先阻止它。

标签: dialogflow-estelegram-webhook

解决方案


为了将来参考,我将尝试为我自己的问题提供一个可能的但不是开箱即用的解决方案。如果有人有更好的解决方案,那就太好了。

在我看来,在撰写本文时,只有通过在 Telegram 和 Dialogflow 之间实现中间层才能获得完整的交互体验。Telegram 可能会联系这个中间层,它处理接收到的消息并使用Dialogflow SDK/API 来实现 Google NLP 的优势。对于(尚未)支持的 Telegram 消息,此中间层必须实现自己的逻辑。


推荐阅读