3

由于 Dialogflow 是封闭的源代码并托管在 Googles 服务器上,是否可以将交互式 Canvas 与例如 RASA 或其他替代方案一起使用?我正在阅读交互式画布的教程,并且总是不得不在 firebase 或谷歌云上进行部署,因为这就是教程所说的,并且因为本地运行的服务无法从 Dialogflow 中访问。

我想为自己在家里部署完整的填充和 webapp,而不是在云系统上运行。

4

1 回答 1

2

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

我是否需要使用 Dialogflow 为助手编写操作?

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

这需要在 Firebase 或 Google Cloud 上运行吗?

不,它确实需要在某个地方运行,但它的唯一要求是

  • 您必须有一个公共 HTTPS URL 端点(一个 Webhook),Google 将使用它来发送 STT 消息。
  • 您必须能够在该 URL 上接受带有 JSON 格式的 POST,格式由 Actions SDK 定义。您应该返回符合 Actions SDK 定义的响应格式的 JSON。

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

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

这取决于。

如果您的网络是具有公共 IP 地址的公共网络(即使没有公共 DNS 条目),那么可以。

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

一旦我这样做了,我可以为自己获得一个行动吗?

并不真地。

您当然可以在“开发模式”下运行一个动作,但您需要在测试控制台中定期刷新它。同样,您可以将用户添加到它以获得alpha 版本。但是,在这两种情况下,经验都清楚地表明您正在对其进行测试。

如果您希望它“像其他操作一样”工作,那么您需要将其提交以供审核,这将使其公开。为了防止其他人使用它,您需要包含Google 登录以限制可以访问您的操作的人。

交互式画布部分呢?

交互式画布对上述所有内容添加了额外要求。您仍然需要让 Google 处理用户所说的内容,并将其传递给您的 Action,然后您可以将其与回复一起传递给 Interactive Canvas。

然而,一个优点是 Interactive Canvas 部分可以独立于 Action 正在执行的任何操作而运行。因此,可以有在 Android 或 Smart Display 上运行的本地代码可以做一些事情,包括直接对触摸或计时事件做出反应。

当您说“本地代码”时,您是什么意思?

您的 Action 代码必须在 webhook 上运行。但是交互式画布的代码在设备本身上运行。

交互式画布的代码从哪里加载?我需要安装应用程序吗?

不可以。交互式画布是一个网页,它是从 URL 加载的。

当您的操作启动交互式画布时,它会将要加载的 URL 发送到您的设备。然后,您的设备会从此 URL 加载它,然后像大多数其他网页一样对待它(有一些限制)。建议您使用单页 webapp,但这不是必需的。

作为一个单页的webapp,它是否可以将API 调用回Web 服务器?还是其他网络服务器?

是的,但请记住,CORS 限制可能会限制这一点。交互式画布在 iframe 内运行,并将 CORS 原点设置为空。如果您正在加载的资源不允许这样做 - 调用可能会被拒绝。

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

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

是的,还有一些其他的。最大的问题是您无权访问本地存储或 cookie,也无权访问相机和地理定位等硬件。您也无权访问 Web Speech API SpeechRecognition 接口。

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

您将需要使用操作功能来跨对话保存数据

而且我无权访问 SpeechRecognition?对于智能显示操作来说,这不是很傻吗?

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

如果它被发送到动作,它如何被发送到交互式画布?

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

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

你有几个选择。

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

如果您需要稍微复杂一点的东西,例如文字和静态图片,您可以发回一张卡片。如果您只需要一张桌子,还有一张桌子卡。

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

更新那我为什么不使用交互式画布呢?

您可能不想经历交互式画布的麻烦有很多很好的理由,但这里有一些基本的理由:

  • 只有当这是一款游戏时,您才能让您的 Interactive Canvas Action 获得批准。(当然,如果你只是私下做这件事,这不是问题。)其他类型可能很快就会被允许 - 但现在,只是游戏。
  • 您不需要使用全屏。只是提供一些数据?文字或卡片可能就足够了。
  • 您要确保这也适用于智能扬声器或“无眼”。即使您确实使用屏幕,您也可能希望确保您的用户可以在没有屏幕的情况下使用它。
于 2019-11-19T15:54:17.567 回答