Создание объекта действий на Google из запроса Express - PullRequest
1 голос
/ 24 апреля 2020

Документация здесь показывает этот пример кода для создания объекта Actions SDK для Express:

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);

Это, очевидно, неправильный синтаксис, и он не возвращает никакого ответа на действие Google.

Причина, по которой я хочу сделать что-то подобное, заключается в инициализации объекта actionssdk с помощью Dynami. c clientId. Я могу извлечь projectId из заголовка авторизации, присутствующего в req.headers объекте. С projectId я могу динамически получить clientId и инициализировать actionssdk, передав clientId

. Каков будет правильный синтаксис для этого?

1 Ответ

1 голос
/ 24 апреля 2020

Переменная app может вызываться с express объектами запроса и ответа, например, так:

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);
...