Google 与 rasa 互动 Canvas

Google Interactive Canvas with rasa

由于 Dialogflow 是封闭源代码并托管在 Google 服务器上,是否可以使用交互式 Canvas 与例如RASA,或其他替代品?我正在阅读交互式 canvas 的教程,并且总是必须在 firebase 或 google 云上部署,因为这就是教程所说的,并且因为服务 运行 无法从 Dialogflow 中本地访问。

我想在家里自己部署 fullfillment 和 webapp,而不是 运行 在云系统上。

你这里有一堆相关的问题,但如果我们把它们分解成更小的问题可能会更容易理解。

是否需要使用 Dialogflow 为智能助理编写 Action?

没有。 Google 上的操作定义了 Actions SDK,您可以使用它来定义它将语音到文本 (STT) 处理的结果发送到哪里,它将对用户所说的内容进行处理,以及您应该发送到哪里您想要给用户的响应。如何处理该文本取决于您,但强烈建议使用自然语言 Understanding/Processing 系统 (NLP/NLU),例如 RASA。

这是否需要 运行 在 Firebase 或 Google 云端?

没有。它确实需要运行 某处,但唯一的要求是

  • 您必须有一个 public HTTPS URL 端点(webhook),Google 将使用它来发送 STT 消息。
  • 您必须能够以 Actions SDK 定义的格式在 URL 和 JSON 处接受 POST。您需要 return JSON 满足 Actions SDK 定义的响应格式。

虽然 Firebase Cloud Functions 或其他 Google 云解决方案运行良好,但您可以 运行 在满足这些要求的任何地方使用它。例如,AWS 也适用。

我可以在我自己的网络上 运行 这个吗?

视情况而定。

如果您的网络是具有 public IP 地址的 public 网络(即使没有 public DNS 条目)- 那么是的。

如果您在专用网络上 - 那么...也许,但您需要做更多的工作。如果有可用的 public IP 地址,您可以为您的机器创建一个代理以进行入站连接。或者,您可以使用 ngrok 等工具或其他方法来创建一个安全的 public URL 端点,该端点通过隧道连接到您的本地计算机。 (ngrok 的一个优点是它们还满足 HTTPS 要求。)

执行此操作后,我可以为自己获取一个 Action 吗?

不是真的。

您当然可以 运行 在 "development mode" 中执行操作,但您需要在测试控制台中定期刷新它。同样,您可以为 alpha release 添加用户。然而,在这两种情况下,经验都清楚地表明您正在测试它。

如果您想让它工作 "just like other Actions",那么您需要提交它以供审核,这将使它成为 public。为防止其他人使用它,您需要包含 Google Sign-In 以限制谁可以访问您的操作。

互动 Canvas 部分怎么样?

Interactive Canvas 在上述所有内容上添加了 附加 要求。您仍然需要 Google 处理用户所说的内容,它将传递给您的 Action,然后您可以将其连同回复一起传递给 Interactive Canvas。

然而,一个优点是交互 Canvas 部分可以 运行 独立于操作正在做什么。因此 Android 上的 运行 本地代码或智能显示器可以做一些事情,包括直接对触摸或计时事件做出反应。

当你说"local code"时,你是什么意思?

您的操作代码必须 运行 在网络钩子上。但是交互式 Canvas 运行 的代码在设备本身上。

Interactive Canvas 的代码从哪里加载?我需要安装应用程序吗?

没有。 Interactive Canvas 是一个网页,它是从 URL.

加载的

当您的 Action 启动互动 Canvas 时,它会发送 URL 以加载到您的设备。然后您的设备从这个 URL 加载它,然后像对待大多数其他网页一样对待它(有一些限制)。建议您使用单页 Web 应用程序,但这不是必需的。

作为一个单页的webapp,它能API回调web服务器吗?或者其他网络服务器?

是的,但请记住 CORS restrictions 可能会对此有所限制。 iframe 中的 Interactive Canvas 运行s,并设置 CORS 原点为空。如果您正在加载的资源不允许这样做 - 调用可能会被拒绝。

但是,如果您有一个 API 可以在设备本地访问 Canvas 部分是 运行ning,那么您应该能够从交互式 Canvas 部分访问它Canvas 脚本。

这听起来像是您提到的限制之一。还有其他的吗?

是的,还有一个 few others。最大的问题是您无法访问本地存储或 cookie,也无法访问相机和地理定位等硬件。您也无权访问 Web Speech API SpeechRecognition 界面。

等等,如果我无法访问存储或 cookie,我该如何处理调用之间的事情?

您需要使用操作功能 save data across conversations

而且我无法访问 SpeechRecognition?智能显示操作不是有点傻吗?

我没那么说。您仍然可以使用 Actions 提供的功能进行语音识别。麦克风打开时所说的任何内容都会发送到 Google 进行 STT,然后发送到你的操作。

如果发送到 Action,如何发送到 Interactive Canvas?

作为响应的一部分,您可以将数据从 Action 发送到 Interactive Canvas。您的交互式 Canvas 脚本可以注册以处理 onUpdate() 回调。

已更新如果我不想通过交互 Canvas 运行 任何东西,而只是显示一些东西怎么办?

你有几个选择。

如果您只需要显示一些文本,您根本不需要做任何事情 - 只需从您的 Action 发回文本响应,它就会显示在屏幕上。

如果您需要稍微复杂一些的东西,例如文本和静态图片,您可以发回 card. There is also a table card 如果您只需要 table。

但是如果你想控制整个屏幕,你可以使用交互 Canvas 只发送回 HTML。您可以根据需要格式化此 HTML - 作为完全静态页面,作为在您的网站上生成的页面,或作为从客户端 JavaScript 生成的页面。您甚至可以使用 CSS 对其进行格式化 - 这是一个完全正常的 HTML 页面。

已更新为什么我不使用交互式 Canvas?

有很多很好的理由可以解释为什么您可能不想经历交互式 canvas 的麻烦,但这里有一些基本的理由:

  • 如果这是一款游戏,您只能让您的互动 Canvas 动作获得批准。 (如果你只是私下这样做,当然这不是问题。)其他类型可能很快就会被允许 - 但现在,只有游戏。
  • 您不需要使用全屏。只是提供一些数据?文本或卡片可能就足够了。
  • 您想确保这也适用于智能音箱或 "eyes free"。即使对于您确实使用屏幕的应用,您也可能希望确保您的用户可以在没有屏幕的情况下使用它。