создание проекта dialogflow v2 с бессерверным

Возникли проблемы при попытке запустить новый проект AWS / Serverless / Dialogflow. Я уверен, что это что-то простое, чего я просто не вижу.

Шаги

  • Создан первоначальный проект с использованием: serverless create --template aws-nodejs-typescript

  • переместил handler.js в src / и обновил serverless.yml

  • npm установлен actions-on-google
  • последовал примеру actions-on-google и обновил src / handler .js

    import { dialogflow, Image } from 'actions-on-google';
    
    const app = dialogflow({debug: true});
    
    app.intent("test.intent", (conv) => {
      conv.ask("Hi, how is it going?");
      conv.ask("Here is a picture of a cat!");
      conv.ask(new Image({
        url: "https://developers.google.com/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg",
        alt: "A fluffy cat!"
      }));
    });
    
    exports.fulfillment = app;
    
  • также обновлен tsconfig.json, чтобы он соответствовал другому проекту Typescript

    {
      "compilerOptions": {
        "sourceMap": true,
        "target": "es6",
        "allowJs": true,
        "module": "commonjs"
      },
      "exclude": [
        "node_modules"
      ],
      "include": [
        "./src/**/*"
      ]
    }
    

Для наглядности вот мой serverless.yml. (Я вручную создал API-шлюз, потому что без сервера создается лямбда-прокси, и я не изучал другую конфигурацию.)

service:
  name: test-lambda

# Add the serverless-webpack plugin
plugins:
  - serverless-webpack

provider:
  name: aws
  runtime: nodejs6.10

functions:
  fulfillment:
    handler: src/handler.fulfillment
    # events:
    #   - http:
    #       method: get
    #       path: hello

Ошибка

Проект компилируется и развертывается успешно, но когда вызывается лямбда, я продолжаю получать

(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot convert undefined or null to object

P.S. в примере источник решил использовать кошку!


person zec    schedule 14.06.2018    source источник
comment
Я не думаю, что вы можете просто настроить обработчик на экспресс-приложение без небольшого дополнительная сантехника. Вы уже прочитал это?   -  person Mike Patrick    schedule 15.06.2018
comment
@Mike Patrick Спасибо, но эта информация предназначена для Dialogflow V1, который требует передачи запроса / ответа в библиотеку. В конце концов, я буду переносить свой проект V1 на V2, просто нужно понять этот бит.   -  person zec    schedule 15.06.2018


Ответы (1)


Наконец, у нас было время, чтобы вернуться к этой проблеме, и я наткнулся на проблема с git.

По сути, экземпляр dialogflow должен быть инкапсулирован лямбдой.

exports.fulfillment = function(event, context, callback) {
  app.handler(event, {})
    .then((res) => {
      if (res.status != 200) {
        callback(null, {
          "fulfillmentText": `I got status code: ${res.status}`
        });
      } else {
        callback(null, res.body);
      }
    }).catch((e) => {
      callback(null, {
        "fulfillmentText": `There was an error\n${e}`
      });
    });
};
person zec    schedule 22.08.2018