Webhook的Google Cloud HTTP功能:请求正文缺少数据

时间:2019-05-07 14:26:13

标签: node.js firebase google-cloud-functions zoom

我将Zoom API与Firebase应用程序集成在一起,为此,我依靠Zooms预制的webhooks在Firebase上运行HTTP函数,以处理“会议开始”和“会议结束”等各种事件。 Zoom API参考:https://marketplace.zoom.us/docs/guides/webhooks

这是Zoom API正在调用的Google Cloud函数:

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发送的请求正文未按照Google Cloud函数的要求包装在“ data:{}”标记中。如果您可以在此处控制有效负载,我已经找到了解决此问题的方法:Dart json.encode is not encoding as needed by Firebase Function

我的问题是我无法更改Zoom API发送的请求。有什么办法可以让我仍然可以在Google Cloud函数中接受请求?还是有什么方法可以更改Zoom发送的请求的格式?我找不到任何参考。

一个可能的解决方案是设置另一台服务器,该服务器通过Zoom接收请求,将其格式化为Google Cloud函数规范,然后将其传递给我的Google Cloud函数。但是,我想避免跳出Google Cloud生态系统。

这个问题在Google Cloud平台上可以解决吗?

1 个答案:

答案 0 :(得分:0)

所以我知道了。在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解决了我所有的问题。