Zoom API を Firebase アプリに統合しています。そのために、Zooms の事前に作成された Webhook を使用して、「会議の開始」や「会議の終了」などのさまざまなイベントのために、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 から送信されるリクエストの形式を変更する方法はありますか? どちらの参照も見つかりません。
考えられる解決策の 1 つは、Zoom からのリクエストを受信する別のサーバーをセットアップし、それを Google Cloud 関数の仕様にフォーマットしてから、私の Google Cloud 関数に渡すことです。ただし、Google Cloud エコシステムから抜け出すことは避けたいと考えています。
この問題は Google Cloud プラットフォームで解決できますか?