【问题标题】:Actions on Google Fulfillment Endpoint for python针对 Python 的 Google Fulfillment Endpoint 上的操作
【发布时间】:2018-02-20 15:26:13
【问题描述】:

如何使用 python 创建函数来实现?

building fulfillments 的文档使用 Node.js 和 Firebase Cloud Function for fulfillment hosting。此处使用Actions SDK

下面的示例代码只是调用应用程序并模仿用户说的第一个语音。

'use strict';

const ActionsSdkApp = require('actions-on-google').ActionsSdkApp;
const functions = require('firebase-functions');

exports.analizeInput= (req, res) => {
    const app = new ActionsSdkApp({request: req, response: res});

    // Create functions to handle requests here

    function handleMainIntent() {
        let inputPrompt = app.buildInputPrompt(false, 'This is <app-name>');
        app.ask(inputPrompt);
    }
    function handleTextIntent() {
        app.tell("you said, " + app.getRawInput());
    }

    let actionMap = new Map();
    actionMap.set(app.StandardIntents.MAIN, handleMainIntent);
    actionMap.set(app.StandardIntents.TEXT, handleTextIntent);
    app.handleRequest(actionMap);
} 

代码在 fullments 端点中使用 Node.js 语言。也可以使用其他语言。但是,没有关于如何使用其他语言设置履行端点的可用资源。我想知道如何使用python创建一个像上面这样简单的。

from flask import Flask
from flask import jsonify
app = Flask(__name__)

@app.route('/')
def hello_world():
//I do not know where to use this JSON (this is the app.ask() in Node.js)
data = {
    "conversationToken": "",
    "expectUserResponse": true,
    "expectedInputs": [{
        "inputPrompt": {
            "richInitialPrompt": {
                "items": [{
                    "simpleResponse": {
                        "textToSpeech": "Howdy! I can tell you fun facts about almost any number, like 42. What do you have in mind?",
                        "displayText": "Howdy! I can tell you fun facts about almost any number. What do you have in mind?"
                    }
                }],
                "suggestions": []
            }
        },
        "possibleIntents": [{
            "intent": "actions.intent.TEXT"
        }]
    }]
}
return jsonify(data)

if __name__ == '__main__':
    app.run()

这是我使用 Heroku 设置和部署的简单 REST 端点。据我了解,如果使用的语言不是“示例代码”部分here 中所见的 Node.js,则使用 JSON。但是,我被困在如何处理请求、给出响应以及设置与 Google 助理相关的意图上。我也不知道将文档中建议的 JSON 放在哪里。我什至不知道如何开始。如果您能抢先一步,我将不胜感激。

谢谢

【问题讨论】:

  • 我不知道如何回答这个问题。我确实知道如何使用本地托管的 Node 为您设置一个开发环境,这样您就可以在 Google 平台上的 Action 和一个琐碎的 Action 之间监视 JSON 有效负载的 POST。如果您认为有帮助,我会发布答案。在其他人用 Python 解释这笔交易之前,您可以看看这个developers.google.com/actions/reference/rest/…
  • @WilliamDePalo 我想你可以帮助我,虽然我不能确定多少。我感谢您的帮助。我有兴趣查看平台和操作本身之间的有效负载。这可能有助于我了解他们的联系。

标签: python heroku flask actions-on-google


【解决方案1】:

我刚刚找到了一个可行的解决方案:只需遵循此文档:Conversational Actions - JSON webhook payload - Request and Response,这是 JSON 实现 API。

例子:

{
    "prompt": {
        "firstSimple": {
            "speech": "Hello, this works!",
            "text": "Hello, this works!"
        }
    }
}

我猜 Actions SDK 文档中的 JSON 用于与 SDK 交互? 无论如何,这些都是行不通的。
对话流实现 API 也不起作用。我之前使用过对话流 API。它们只是不同。
这个文档有点难找,我花了 3 个小时才找到,但总比自己复制 SDK 要好。

【讨论】:

    【解决方案2】:

    转到 console.actions.google.com 创建一个项目。现在选择 SDK 选项而不是 Dialog Flow 或我忘记名字的其他 NLU。

    假设你熟悉 Node 你可以去这里

    https://github.com/unclewill/parrot

    并获取我的“鹦鹉”样本。这是一个微不足道的动作,它只是重复——或鹦鹉学舌——你所说的话。它唯一的优点是它大约有 50 行。使用包管理器安装它 - npm。

    然后下载ngrok

    https://ngrok.com/download

    此工具将通过反向代理从 Web 到您的开发机器创建一个“隧道”。下载后,在命令行输入

    ngrok http 8080

    这实际上将为您的机器提供一个可公开寻址且安全的(即 https)地址,Google 平台上的 Actions 最终将使用该地址与您的 Python 端点以及我现在的鹦鹉示例进行通信。

    查看它分配给您机器的地址,然后编辑操作包(文件 action.json),以便将您找到的 https 地址替换为 ngrok 的。

    查看文件 update.cmd 和 test.cmd。前者用于通知 Google 你的 Action 项目的新地址。后者将其置于测试模式。编辑两者中的项目名称以匹配您在操作控制台中获得的项目名称。

    运行文件 update.cmd。在 Windows 上,您可以只运行该文件。在 'nix 上,首先使用 chmod +x 将模式更改为可执行,或者您可以复制文本并粘贴到命令行中。转到操作控制台并点击“测试”按钮以打开模拟器。返回命令行并运行文件 test.cmd。

    使用

    在 Node 中运行示例

    节点应用

    如果一切顺利,你就有了一个本地运行的 Action 和一个从 Web 到它的隧道。在模拟器中输入一些文本。该操作应该“鹦鹉学舌”地返回给您。

    现在查看运行 ngrok 的 shell/终端/命令窗口。它将列出本地主机上的端点(或者我忘记了 127.0.0.1)。在浏览器中键入该地址,您将看到来自 Action 的 JSON 有效负载。

    您的任务是在 Python 中复制它。

    (我不使用 Python,但如果没有人移植客户端库,我会感到惊讶)

    【讨论】:

      【解决方案3】:

      基本上,您正在构建一个在 JSON 请求中接收值的 API。然后,您需要对其进行解析并返回 JSON 响应。正如威廉所说,在 Node 中创建一个版本可以让您看到请求。您还可以使用 Google 控制台模拟器上的操作来查看请求。

      查看the documentation of Actions SDK 可以让您看到原始请求和响应。据我所知,没有一个很好的 Python 示例,因此您可能想要构建一个已经存在的 Node.JS 示例,然后移植它。

      【讨论】:

        【解决方案4】:

        https://dialogflow.com/docs/fulfillment

        你需要发回一个类似的 JSON

        {
            "speech": "Hello!",
            "displayText": "Hello!"
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多