首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对python的Google Fulfillment的操作

针对python的Google Fulfillment的操作
EN

Stack Overflow用户
提问于 2018-02-20 23:26:13
回答 4查看 906关注 0票数 0

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

building fulfillments的文档将Node.js与fulfillment hosting的Firebase Cloud Function一起使用。这里使用的是Actions SDK

下面的示例代码简单地调用应用程序并模拟用户说的第一个语音。

代码语言:javascript
复制
'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创建一个像上面这样的简单代码。

代码语言:javascript
复制
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 Assistant相关的意图之类的事情上。我也不知道将JSON建议放在文档中的什么位置。我甚至不知道如何开始。如果你能先行一步,我将不胜感激。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2020-11-10 03:29:42

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

示例:

代码语言:javascript
复制
{
    "prompt": {
        "firstSimple": {
            "speech": "Hello, this works!",
            "text": "Hello, this works!"
        }
    }
}

我猜Actions SDK文档中的JSON是用来与SDK交互的?不管怎么说,这些都不起作用。

dialogflow fulfillment也不起作用。我以前用过dialogflow API。他们只是不同而已。

这个文档有点难找到,我花了3个小时才找到,但仍然比我自己复制SDK要好。

票数 1
EN

Stack Overflow用户

发布于 2018-02-21 02:42:50

转到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平台上的操作最终将使用该地址与您的Python端点和我的parrot示例进行通信。

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

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

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

使用以下命令在节点中运行示例

节点应用

如果一切顺利,您就有了一个在本地运行的Action和一个从web到它的隧道。在模拟器中键入一些文本。这个动作应该会“模仿”它返回给你。

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2018-02-21 03:31:02

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48888661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档