针对python的Google Fulfillment Endpoint的操作

时间:2018-02-20 15:26:13

标签: python heroku flask actions-on-google

如何使用python创建履行功能?

building fulfillments的文档使用带有Firebase云功能的Node.js 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端点。据我所知,如果使用的语言不是Node.js,则使用JSON,如“示例代码”部分here中所示。但是,我仍然坚持要做的事情,例如处理请求,提供回复以及设置与Google智能助理相关的意图。我也没有任何想法将文档中建议的JSON放在哪里。我甚至不知道如何从头开始。如果你能先行一步,我会非常感激。

谢谢

3 个答案:

答案 0 :(得分:0)

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

假设您熟悉Node,可以到这里

https://github.com/unclewill/parrot

得到我的&#34;鹦鹉&#34;样品。这是一个微不足道的行动,简单地重复 - 或鹦鹉 - 你说的话。它唯一的优点是大约50行。使用包管理器安装它 - npm。

然后下载ngrok

https://ngrok.com/download

这个工具将创建一个&#34;隧道&#34;通过从Web到开发机器的反向代理。下载后,在命令行输入

ngrok http 8080

这实际上可以使您的计算机成为可公开寻址且安全的(即https)地址,Google平台上的操作最终将用于与您的Python端点进行通信以及我的鹦鹉样本。

查看分配给您计算机的地址,然后编辑操作包(文件action.json),以便您在那里找到的https地址替换为ngrok&#39。

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

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

使用

在Node中运行示例

节点应用

如果一切顺利,您将在本地运行一个Action,并从Web上运行一个隧道。在模拟器中键入一些文本。这个动作应该是&#34; parrot&#34;它回到你身边。

现在看一下运行ngrok的shell / terminal / command窗口。它将在localhost上列出一个端点(或者我忘记了127.0.0.1)。在浏览器中键入该地址,您将看到来自Action的JSON有效负载。

你的任务是用Python复制它。

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

答案 1 :(得分:0)

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

签出the documentation of Actions SDK可以让您看到原始请求和响应。我所知道的Python不是一个很好的样本,所以你可能想要为Node.JS构建一个已经存在的样本然后移植它。

答案 2 :(得分:0)

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

示例:

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

我猜想Actions SDK文档中的JSON是否用于与SDK交互? 无论如何,这些都不起作用。
dialogflow履行API也不起作用。我以前使用过dialogflow API。它们只是不同。
很难找到这份文档,我花了3个小时才找到,但比自己复制SDK还要好。