将动作SDK与AWS Lambda集成

时间:2018-11-05 08:16:39

标签: aws-lambda actions-on-google

我正在尝试使用动作SDK开发Google助手应用。我在网上发现了许多示例,所有示例都使用Google的firebase云功能进行部署。 通过此链接(https://actions-on-google.github.io/actions-on-google-nodejs/,我还发现可以将动作sdk函数部署到aws lambda中。 但不幸的是,我没有找到任何示例来说明如何将aSDK编写和部署到SDK中。

有人可以帮助我编写类似于此处显示的应用程序(https://github.com/actions-on-google/actionssdk-say-number-nodejs)并将其部署到aws lambda吗?

我尝试了以下操作。但这没有用。

  1. 创建了一个文件夹,并使用“ npm init”对其进行了初始化。
  2. 添加了index.js文件。
  3. 然后运行命令“ npm install actions-on-google”。它出现在package.json文件中。
  4. 在我创建的文件夹中创建了整个源的zip文件夹。
  5. 创建了aws lambda函数并上传了zip文件夹,并将lambda函数的“处理程序”设置为“ index.fulfillment”。
  6. 创建一个api网关并将其链接到lambda函数并进行部署。
  7. 然后获取网址并编辑“ actions.json”文件并运行gactions命令。
  8. 然后,当我开始使用模拟器在操作控制台中测试应用程序时,出现错误“ UnparseableJsonResponse API版本2:无法解析带有'INVALID_ARGUMENT'错误的JSON响应字符串:“ error_message:找不到字段”

这是index.js文件中的代码

'use strict';

const {actionssdk, SimpleResponse} = require('actions-on-google');

const app = actionssdk({debug: true});

app.intent('actions.intent.MAIN', (conv) => {
  conv.ask("welcome");
});


app.intent('actions.intent.TEXT', async (conv, input) => {
  conv.ask('You said ' + input);
});


exports.fulfillment = app

这是来自AWS的云监视日志

2018-11-10T08:35:46.715Z    9dbb17f8-e4c3-11e8-bce3-730a5244a300
{
    "errorMessage": "Cannot convert undefined or null to object",
    "errorType": "TypeError",
    "stackTrace": [
        "Function.keys (<anonymous>)",
        "Lambda.<anonymous> (/var/task/node_modules/actions-on-google/dist/framework/lambda.js:36:36)",
        "Generator.next (<anonymous>)",
        "/var/task/node_modules/actions-on-google/dist/framework/lambda.js:22:71",
        "new Promise (<anonymous>)",
        "__awaiter (/var/task/node_modules/actions-on-google/dist/framework/lambda.js:18:12)",
        "/var/task/node_modules/actions-on-google/dist/framework/lambda.js:30:46",
        "omni (/var/task/node_modules/actions-on-google/dist/assistant.js:44:53)"
    ]
}

1 个答案:

答案 0 :(得分:1)

将代码托管在AWS上的代码更改非常简单。无需导入firebase-functions库并使用它,您只需要使用dialogflow应用本身来建立lambda端点即可。因此,代码可能类似于:

const { dialogflow } = require('actions-on-google')

const app = dialogflow()

// Setup intent handlers with app.intent() here

exports.factsAboutGoogle = app