我将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平台上可以解决吗?
答案 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
解决了我所有的问题。