Я интегрирую 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.
Моя проблема в том, что я не могу изменить запрос, отправляемый API Zoom. Могу ли я принять запрос в моей функции Google Cloud? Или есть способ изменить формат запроса, отправляемого Zoom? Я не могу найти ссылки ни на один из них.
Одним из возможных решений было бы настроить другой сервер, который получает запрос от Zoom, отформатировать его в соответствии со спецификациями функций Google Cloud, а затем передать его моей функции Google Cloud. Однако я бы не хотел выходить за рамки экосистемы Google Cloud.
Можно ли решить эту проблему на платформе Google Cloud?