【问题标题】:eHow to transition away from inline editor on actions on google如何从内联编辑器过渡到谷歌上的操作
【发布时间】:2020-12-01 01:10:06
【问题描述】:

previous Stack Overflow question 中,我避免在 Actions on Google 上使用外部网络挂钩 所以我需要回到内联编辑器。我解决了这个问题,但现在我再次感到勇敢。

我已经超越了内联编辑器,并希望能够在我的笔记本电脑上开发我的代码,在 Firebase 中对其进行测试,并发布到我的 webhook 的站点,大概是内联代码编辑器发布到的地方。事实上,我已经编写了 require 函数并从 Firebase 部署了它们。因此,完整的功能已经准备就绪,我只需将其正确连接到 Actions on Google。

我现在在 Actions on Google 内联编辑器中所拥有的更多的是一个存根。我想将该存根合并到我在 Firebase 中拥有的更成熟的逻辑中。这是内联编辑器中的内容:

const { conversation } = require('@assistant/conversation');
const functions = require('firebase-functions');

const app = conversation(); 

app.handle('intent_a_handler', conv => {
    // Implement your code here
    conv.add("Here I am in intent A");
});

app.handle('intent_b_handler', conv => {
    // Implement your code here
    conv.add("Here I am in intent B");
});

exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);

当我在互联网上搜索时,我从 Dialogflow 的角度看到了讨论,但就像我说的,我在“Actions on Google”中。我想从内联编辑器过渡,以我已经拥有的为基础。有人可以解释我是如何设置的吗?我很高兴在 Google 生态系统的范围内这样做。

【问题讨论】:

    标签: firebase google-cloud-functions actions-on-google


    【解决方案1】:

    要在您自己的系统上本地测试您自己的 webhook,我建议您合并一个 web 应用程序框架,例如 express。使用 express,您可以在本地计算机上托管代码并使其响应来自 Actions on Google 的请求。在您的情况下,您将替换这将与 Firebase 函数包相关的所有代码。以下是 Actions on Google 的简单 Webhook 示例:

    const express = require('express');
    const bodyParser = require('body-parser')
    const { conversation } = require('@assistant/conversation');
    
    const exprs = express();
    exprs.use(bodyParser.json()) // allows Express to work with JSON requests
    
    const app = conversation();
    
    app.handle('example intent', () => {
      // Do something
    })
    
    // More app.handle() setups
    
    exprs.post('/', app);
    exprs.listen(3000);
    

    通过此设置,您应该能够在本地运行自己的应用程序。您唯一需要做的就是安装所需的依赖项并为您的操作添加您自己的意图处理程序。此时,您已经在自己的计算机上运行了一个 webhook,但这还不足以将其用作 Actions on Google 中的 webhook,因为它在本地运行并且无法通过 Internet 公开使用。

    因此,我们将使用一个名为ngrok 的工具。使用 ngrok,您可以创建一个公共 https 地址,将所有消息运行到您的本地计算机。这样你就可以使用 ngrok 地址作为你的 webhook URL。现在,您可以随意更改代码,并且 Actions on Google 会在您开发时自动使用最新的更改。无需上传并等待 Firebase 执行此操作。

    明确一点:Ngrok 应该只用于开发。完成操作开发后,您应该将所有代码上传到云服务或将其托管在您自己的服务器上(如果有)。 (免费计划)ngrok URL 通常每 6 小时过期一次。所以它不适合开发以外的任何东西。

    【讨论】:

    • 谢谢乔迪。作为后续,我想将它托管在 Google 服务器上。有没有标准的地方可以做到这一点?似乎这将成为 Actions onGoogle 解决方案的一部分,并且是端到端的。不过,我会遵循您的建议,如上所述。
    • 我没有在 Google Cloud 中运行 webhook 的经验,但这里是在 gcloud 中托管节点应用程序的一般指南。这应该可以帮助您获得所需的东西。 cloud.google.com/nodejs/getting-started#top_of_page
    • 你好乔迪。我开始考虑它,我意识到您的答案根本与 Firebase 功能没有交叉。这对我来说似乎很奇怪,因为当我在 Alexa 生态系统中实现相同的系统时,后端使用了云中的功能。我将把我的问题标记为未回答,同时我会仔细考虑这一切。这里似乎仍然缺少一些东西,尽管作为权宜之计,我可能会按照您的建议实施它。
    • 啊,好吧,我想我误解了您需要保持功能。我的设置确实不适用于云功能,因为 express 创建了一个您应该托管的 api。我必须查看有关如何使用 firebase 处理它的详细信息
    • 谢谢乔迪。我开始感觉到,如今这类事情比 Google 上的 Actions 更关注 Dialogflow。不过,我非常感谢您的回答。
    猜你喜欢
    • 2019-12-13
    • 2017-11-30
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多