Функция Google Cloud HTTP от webhook: в теле запроса отсутствуют данные - PullRequest
0 голосов
/ 07 мая 2019

Я интегрирую Zoom API с моим приложением Firebase, и для этого я полагаюсь на предварительно сделанные веб-заезды Zooms для запуска функции HTTP на моем Firebase для различных событий, таких как «встреча началась» и «встреча завершилась».Справочник по API Zoom: https://marketplace.zoom.us/docs/guides/webhooks

Это функция Google Cloud, которую вызывает API Zoom:

exports.zoomTestA = functions.https.onCall((req, res) => {
    console.log(req);
    let data = req.body;
    var xmlData = data.toString();
    console.log(xmlData);
});

Вот полезная нагрузка, отправленная Zoom:

{
  "event": "meeting.ended",
  "payload": {
    "account_id": "LTf-KjgUTR2df-knT8BVEw",
    "object": {
      "duration": 0,
      "start_time": "2019-05-07T14:02:51Z",
      "timezone": "",
      "topic": "Alexander Zoom Meeting",
      "id": "864370042",
      "type": 1,
      "uuid": "2h/SWVrrQMu7fcbpLUly3g==",
      "host_id": "Ty6ykNolSU2k1N4oc0NRcQ"
    }
  }

Это приводит к появлению этой ошибки в моей консоли Google Cloud:

Request body is missing data. { event: 'meeting.ended',
  payload: 
   { account_id: 'LTf-KjgUTR2df-knT8BVEw',
     object: 
      { duration: 0,
        start_time: '2019-04-30T14:23:44Z',
        timezone: '',
        topic: 'Alexander\'s Zoom Meeting',
        id: '837578313',
        type: 1,
        uuid: 'WotbHO3RRpSviETStKEGYA==',
        host_id: 'Ty6ykNolSU2k1N4oc0NRcQ' } } }

Тело запроса, которое отправляет Zoom, не заключено в тег «data: {}», как того требуют функции Google Cloud.Я нашел решение этой проблемы, если вы можете контролировать полезную нагрузку здесь: Dart json.encode не кодирует, как требуется Firebase Function .

Моя проблема в том, что я не могу изменить запрос, который отправляет API Zoom.Можно ли как-нибудь принять запрос в функции Google Cloud?Или есть ли способ изменить формат запроса, отправленного Zoom?Я не могу найти ссылки ни для одного из них.

Одним из возможных решений было бы настроить другой сервер, который получает запрос с помощью Zoom, отформатировать его в соответствии со спецификациями функций Google Cloud, а затем передать его в мое облако Google.функция.Однако я хотел бы избежать выхода из экосистемы Google Cloud.

Решается ли эта проблема на платформе Google Cloud?

1 Ответ

0 голосов
/ 26 июня 2019

Так что я понял это.В функциях Firebase / Google Cloud вы можете создавать HTTP-функции с

functions.https.onCall((req, res) => { var data = req.body;

и

functions.https.onRequest((req, res) => { var data = req.body;

Разница в том, чтоonCall предназначен для использования в среде функций Firebase / Google Cloud.Однако, если вам нужны внешние функции, вам нужно использовать onRequest, так как это не требует специального форматирования полезной нагрузки.

Использование onRequest вместо этого решило все мои проблемы.

...