2017-02-07 3 views
2

Comme par exempleDans le webhook de RingCentral, existe-t-il un moyen de différencier les différents filtres d'événements?

Si je veux écouter les deux

'eventFilters' => array(
       "/restapi/v1.0/account/~/extension/~/presence?detailedTelephonyState=true&aggregate=true", 
       "/restapi/v1.0/account/~/extension/~/message-store/instant?type=SMS" 

Suis-je censé faire un commutateur sur chaque demande de poste de RingCentral si je veux filtrer et analyser les deux événements?

Say ..

switch($eventid){ 
    case '/restapi/v1.0/account/<accountid>/extension/<extension>/presence?detailedTelephonyState=true&aggregate=true' 
    //process data 
    break; 
} 

Mais les postes de webhook ont ​​des extensions à elle. Y a-t-il un identifiant de quel événement est déclenché?

Répondre

2

Il y a quelques façons que je pouvais penser à résoudre le problème que vous avez présenté ...

  1. 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.
  2. 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.
  3. 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) 
    } 
}