Il y a quelques façons que je pouvais penser à résoudre le problème que vous avez présenté ...
- Si vous disposez d'un abonnement unique avec plusieurs eventFilters sur plusieurs extensions, comme vous l'avez dit, le filtrage L'adresse URI entrante
webhook.event
et la correspondance de la chaîne pour le type est probablement la plus rapide, puis l'acheminement vers un gestionnaire de type d'événement de notification spécifique.
- Vous pouvez créer jusqu'à 20 notifications push (abonnements) dans votre compte, et chacune d'entre elles peut contenir jusqu'à 1000 eventfilters. Vous pouvez créer un webhook distinct pour l'un des six (6) types d'événements de notification uniques que vous souhaitez surveiller. Cela vous permettra également de Update Subscriptions pour les extensions à la volée.
- Vous pouvez utiliser le canard-typing du [NotificationType.body schéma (https://developers.ringcentral.com/api-docs/latest/index.html#!#EventTypes.html) si vous avez un seul abonnement enregistré qui contient plusieurs types d'événements de notification en vérifiant si
webhook.body
a les propriétés requises.
Numéro 3 en PHP (code non testé)
$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);
}
}
}
Numéro 3 en JavaScript (code non testé)
// 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)
}
}