有几种方法可以解决您提出的问题...
- 如果您在多个扩展上有多个 eventFilters 的单个订阅,如您所述,过滤传入的
webhook.event
URI 并匹配类型的字符串可能是最快的,然后路由到特定的通知事件类型处理程序。
- 您最多可以在您的帐户中创建 20 个推送通知(订阅),每个可以容纳超过 1000 个事件过滤器。您可以为您希望监控的六 (6) 个独特通知事件类型中的任何一个创建单独的 webhook。这样做还可以让您即时更新订阅以进行扩展。
- 如果您只注册了一个订阅,其中包含通过检查是否
webhook.body
具有所需的属性来获得多个通知事件类型。
PHP 中的第 3 名(未经测试的代码)
$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);
}
}
}
JavaScript 中的第 3 名(未经测试的代码)
// 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)
}
}