根据 Express 请求创建 actions-on-google object

Create actions-on-google object from Express request

文档 here 显示了为 Express 创建 Actions SDK object 的代码示例:

const express = require('express');
const bodyParser = require('body-parser');

const expressApp = express().use(bodyParser.json());
expressApp.post('/fulfillment', app);
expressApp.listen(3000);

但我需要做这样的事情:

const express = require('express');
const bodyParser = require('body-parser');

function func (req, res) {
    let headers = req.headers;
    let body = req.body;

    console.log(headers);
    console.log(body);

    const app = actionssdk({
        // init: () => body
        // init: () => req
    });

    app.intent('actions.intent.MAIN', (conv) => {
        conv.ask("Welcome to the app");
    })
    return app;
}

const expressApp = express().use(bodyParser.json());
expressApp.post('/fulfillment', func);
expressApp.listen(3000);

这显然不是正确的语法,它不会 return 对 Google 操作的任何响应。

我想做这样的事情的原因是用动态 clientId 初始化 actionssdk object。我可以从 req.headers object 中的授权 header 中提取 projectId。从 projectId 我可以动态获取 clientId 并通过传递 clientId

来初始化 actionssdk

正确的语法是什么?

app 变量可以像这样用明确的请求和响应对象调用,因为它是一个函数:

const express = require('express');
const bodyParser = require('body-parser');

const expressApp = express().use(bodyParser.json());
expressApp.post('/fulfillment', async (req, res) => {
  const clientId = // Some logic to get client ID
  const app = actionssdk({ clientId })
  // Define intent handlers here
  return app(req, res)
});
expressApp.listen(3000);