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

Google Cloud HTTP function by webhook: Request body is missing data

我将 Zoom API 与我的 Firebase 应用程序集成,为此我依赖 Zooms 预制网络钩子 运行 我的 Firebase 上的 HTTP 函数用于各种事件,例如 "meeting started" 和 "meeting ended"。缩放 API 参考:https://marketplace.zoom.us/docs/guides/webhooks

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

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

这是Zoom发送的payload:

{
  "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 云控制台中:

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 云功能的要求包裹在 "data: {}" 标记中。如果您可以在此处控制有效负载,我已经找到了解决此问题的方法:

我的问题是我无法更改 Zoom API 发送的请求。有什么方法我仍然可以在我的 Google 云功能中接受请求吗?或者有什么方法可以更改 Zoom 发送的请求的格式?我找不到任何一个参考资料。

一个可能的解决方案是设置另一个服务器来接收 Zoom 的请求,将其格式化为 Google 云功能规范,然后将其传递到我的 Google 云功能。但是,我想避免走出 Google 云生态系统。

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

所以我想通了。在 Firebase / Google Cloud 函数中,您可以使用

创建 HTTP-functions

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

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

不同之处似乎在于 onCall 是为在 Firebase/ Google 云功能环境中使用而设计的。但是,如果您需要外部函数,则需要使用 onRequest,因为这不需要特定格式的有效负载。

使用 onRequest 解决了我所有的问题。