2017-02-07 2 views
2

Как, напримерВ RingCentral webhook есть способ различать различные фильтры событий?

Если я хочу, чтобы слушать как

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

Я должен сделать переключатель на каждый запрос пост от RingCentral, если я хочу, чтобы фильтровать и анализировать оба события?

Say ..

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

Но посты webhook имеют различные расширения для него. Есть ли идентификатор запуска какого-либо события?

ответ

2

Есть несколько способов, которыми я мог думать, чтобы решить эту проблему, вы подарил ...

  1. Если у вас есть одна подписка с несколькими eventFilters на нескольких расширений, как вы заявили, фильтрование входящий webhook.event URI и сопоставление строки для типа, вероятно, быстрее всего, а затем маршрут к определенному обработчику типа события уведомления.
  2. В вашей учетной записи можно создать до 20 Push Notification (Подписки), и каждый из них может содержать до 1000 событийных фильтров. Вы можете создать отдельный webhook для любого из шести (6) уникальных типов событий уведомлений, которые вы хотите отслеживать. Выполнение этого также позволит вам установить Update Subscriptions для расширений на лету.
  3. Вы можете использовать утиную настройку схемы [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) 
    } 
} 
Смежные вопросы