canvas - 带有rasa的Google Interactive Canvas

标签 canvas dialogflow actions-on-google interactive rasa

由于Dialogflow是封闭源代码并托管在Googles Server上,因此可以将交互式Canvas与例如RASA或其他替代方案?我正在阅读交互式画布的教程,并且始终必须在firebase或google cloud上进行部署,因为那是该教程所说的,并且因为在Dialogflow中可以访问本地运行的服务。

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

最佳答案

您在这里有很多相关问题,但是如果我们将它们分解成较小的问题,可能会更容易理解。

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

否。Google上的Actions定义了Actions SDK,您可以使用它定义将语音对文本(STT)处理结果发送到何处的操作,该操作将根据用户所说的内容以及应该在何处发送所需的响应给用户。如何处理文本取决于您,但是强烈建议您使用自然语言理解/处理系统(NLP / NLU),例如RASA。

是否需要在Firebase或Google Cloud上运行?

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


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


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

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

这取决于。

如果您的网络是具有公共IP地址(甚至没有公共DNS条目)的公共网络,则可以。

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

一旦完成此操作,我是否可以自己采取行动?

并不是的。

您当然可以在“开发模式”下运行操作,但是您需要在测试控制台中定期刷新它。同样,您可以为alpha release添加用户。但是,在两种情况下,经验都表明您正在测试它。

如果您希望它“像其他操作一样”起作用,则需要将其提交审核以使其公开。为防止其他人使用它,您需要添加Google Sign-In来限制谁可以访问您的操作。

交互式画布部分呢?

交互式画布在上述所有内容上都添加了其他要求。您仍然需要让Google处理用户所说的内容,然后将其传递给您的操作,然后您可以将其与答复一起传递给Interactive Canvas。

但是,优点之一是,无论“动作”在做什么,“交互式画布”部件也可以独立运行。因此,可能会有在Android或Smart Display上运行的本地代码可以执行某些操作,包括直接对触摸或计时事件做出反应。

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

您的操作的代码必须在Webhook上运行。但是,交互式画布的代码可以在设备本身上运行。

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

否。InteractiveCanvas是一个网页,并且是从URL加载的。

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

作为单页Web应用程序,它可以使API调用返回到Web服务器吗?还是其他Web服务器?

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

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

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

是的,也有一个few others。最大的问题是您无权访问本地存储或Cookie,也无权访问摄像头和地理位置等硬件。您也没有访问Web Speech API SpeechRecognition界面的权限。

等一下,如果我无权访问存储或cookie,该如何处理两次调用之间的事务?

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

我没有语音识别功能?对于智能显示操作来说,这不是很傻吗?

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

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

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

更新:如果我不想通过Interactive Canvas运行任何操作,而只显示某些内容怎么办?

您有几种选择。

如果您只需要显示一些文本,则根本不需要执行任何操作-只需从Action发送一个文本响应,它就会显示在屏幕上。

如果您需要稍微复杂一些的内容(例如文本和静态图像),则可以发送回card。如果只需要一个表,则还有一个table card

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

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

有很多很好的理由使您可能不想遇到交互式画布的麻烦,但是这里有一些基本的原因:


如果现在这是一个游戏,您只能获得您的Interactive Canvas Action的批准。 (当然,如果您只是私下进行此操作,则不必担心。)其他类型可能很快就会被允许使用-但现在只是游戏。
您无需使用全屏显示。只是呈现一些数据?文字或卡片可能就足够了。
您要确保它也可以在智能扬声器或“免眼”上使用。即使对于确实使用屏幕的用户,也可能要确保用户可以在不使用屏幕的情况下使用它。

关于canvas - 带有rasa的Google Interactive Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924214/

相关文章:

javascript - 函数过早返回过滤器并降低了效果

actions-on-google - 如何将系统意图(例如 actions.intent.MEDIA_STATUS_FINISHED)添加到 Google Assistant Action Builder

html - 创建无限平行模式

javascript - 使用 CreateJS 按下鼠标并移动会将 chrome Canvas 降低到 30FPS

javascript - SVG 与 CANVAS(Snap.svg 与 FabricJS)

push-notification - 为什么我尝试在 Google 上的 Actions 上推送通知时收到 404 'App [my-project-id] was not found. The app preview may have expired.'?

javascript - 如何设置带 Angular 文本阴影?

dialogflow - 从Dialogflow中的实现发出HTTP POST请求

dialogflow-es - 姓名和电子邮件实体的空响应