由于Dialogflow已关闭源并托管在Googles Server上,因此可以将交互式Canvas与例如RASA或其他替代方案?我正在阅读交互式画布的教程,并且始终必须在firebase或google cloud上进行部署,因为那是该教程所说的,并且因为在Dialogflow中可以访问本地运行的服务。
我想自己在家中部署fullfillment和webapp,而不要在云系统上运行。
答案 0 :(得分:1)
您在这里有很多相关问题,但是如果我们将它们分解成较小的问题,可能会更容易理解。
我是否需要使用Dialogflow为助手编写动作?
不。 Google上的操作定义了Actions SDK,您可以使用它来定义将语音对文本(STT)处理结果发送到何处,并根据用户所说的内容进行处理,以及将响应发送到何处给用户。如何处理文本取决于您自己,但是强烈建议您使用RASA之类的自然语言理解/处理系统(NLP / NLU)。
这是否需要在Firebase或Google Cloud上运行?
不。它确实需要在某处运行,但唯一的要求是
虽然Firebase Cloud Functions或其他Google Cloud解决方案运行良好,但您可以在满足这些要求的任何地方运行它。例如,AWS也可以工作。
我可以在自己的网络上运行它吗?
要视情况而定。
如果您的网络是具有公共IP地址(甚至没有公共DNS条目)的公共网络,则可以。
如果您在专用网络上-那么...也许,但是您需要做更多的工作。如果有可用的公共IP地址,则可以为您的计算机创建代理,以进行入站连接。另外,您可以使用ngrok之类的工具或其他方法来创建安全的公共URL终结点,该终结点通过隧道传输到您的本地计算机。 (ngrok的一个优点是它们还满足HTTPS要求。)
执行此操作后,我是否可以自己做一个动作?
不是真的。
您当然可以在“开发模式”下运行操作,但是您需要在测试控制台中定期刷新它。同样,您可以为alpha release添加用户。但是,在两种情况下,经验都表明您正在测试它。
如果您希望它“像其他操作一样”起作用,则需要将其提交审核以使其公开。为了防止其他人使用它,您需要添加Google Sign-In来限制谁可以访问您的操作。
Interactive Canvas部分如何?
交互式画布在上述所有内容上添加了附加要求。您仍然需要让Google处理用户所说的内容,然后将其传递给您的操作,然后您可以将其与答复一起传递给Interactive Canvas。
但是,一个优点是,Interactive Canvas部件也可以 独立运行,而不管Action在做什么。因此,可以在Android或Smart Display上运行可以执行某些操作的本地代码,包括直接对触摸或计时事件做出反应。
您说“本地代码”是什么意思?
您的操作代码必须在Webhook上运行。但是Interactive Canvas的代码可以在设备本身上运行。
从何处加载Interactive Canvas的代码?我需要安装一个应用程序吗?
不。交互式画布是一个网页,并且是从URL加载的。
当您的操作启动交互式画布时,它会将要加载的URL发送到您的设备。然后,您的设备从该URL加载它,然后将其像大多数其他网页一样对待(有一些限制)。建议您使用单页Web应用程序,但这不是必需的。
作为单页Web应用程序,它可以使API调用返回到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运行任何操作,而只显示一些内容怎么办?
您有几种选择。
如果您只需要显示一些文本,则根本不需要执行任何操作-只需从“操作”中发回一个文本回复,它就会显示在屏幕上。
如果您需要更复杂的内容(例如文本和静态图片),则可以发送回card。如果只需要一张桌子,还有一个table card。
但是,如果您想控制整个屏幕,则可以使用Interactive Canvas仅发送回HTML。您可以根据需要设置此HTML的格式-作为完全静态的页面,在网站上生成的页面或从客户端JavaScript生成的页面。您甚至可以使用CSS对其进行格式化-这是一个完全正常的HTML页面。
已更新:那我为什么不使用交互式画布?
有很多很好的理由使您可能不想遇到交互式画布的麻烦,但是这里有一些基本的理由: