Есть несколько способов, которыми я мог думать, чтобы решить эту проблему, вы подарил ...
- Если у вас есть одна подписка с несколькими eventFilters на нескольких расширений, как вы заявили, фильтрование входящий
webhook.event
URI и сопоставление строки для типа, вероятно, быстрее всего, а затем маршрут к определенному обработчику типа события уведомления.
- В вашей учетной записи можно создать до 20 Push Notification (Подписки), и каждый из них может содержать до 1000 событийных фильтров. Вы можете создать отдельный webhook для любого из шести (6) уникальных типов событий уведомлений, которые вы хотите отслеживать. Выполнение этого также позволит вам установить Update Subscriptions для расширений на лету.
- Вы можете использовать утиную настройку схемы [NotificationType.body (https://developers.ringcentral.com/api-docs/latest/index.html#!#EventTypes.html), если у вас зарегистрирована только одна подписка, которая содержит несколько типов событий уведомлений, проверяя, есть ли у
webhook.body
требуемые свойства.
Номер 3 в PHP (непроверенный код)
$instantMessageEventTypeKeys = array('id', 'to', 'from', 'type', 'creationTime', 'lastModifiedTime', 'readStatus', 'priority', 'attachments', 'direction', 'availability', 'subject', 'messageStatus', 'conversationid');
function genericNotificationHandler($eventJson) {
$eventObj = json_decode($eventJson, true);
foreach($instantMessageEventTypeKeys) {
// If the event.body keys match, route to
if(arrayKeys(eventObj=>['body']) === $instantMessageEventType)) {
//Call some instantMessageSpecificEventHandler($eventObj);
}
}
}
номер 3 в JavaScript (непроверенный код)
// Instant Message Notification Event Type properties
const instantMessageEventTypeKeys = ['id', 'to', 'from', 'type', 'creationTime', 'lastModifiedTime', 'readStatus', 'priority', 'attachments', 'direction', 'availability', 'subject', 'messageStatus', 'conversationid']
const proxyHandlers = {
get (target, key) {
if ('notificationEventType' === key[0]) {
let targetKeys = target.body.ownKeys.sort().join(',');
if(targetKeys === instantMessageEventTypeKeys.sort().join(',')) return 'Instant Message'
}
}
}
const genericNotificationHandler = (notificationData) => {
// You could create traps in handlers below to simplify further
let pEvent = new Proxy(notificationData, proxyHandlers);
if('Instant Message' === pEvent.notificationEventType) {
// instantMessageSpecificEventHandler(notificationData)
}
}