From 08c53aa586897f6635a2f2ba6128672dcef92e28 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Thu, 17 Jun 2021 15:52:46 -0400 Subject: [PATCH] send queue leave webhook when dequeued --- lib/tasks/dequeue.js | 3 ++- lib/tasks/enqueue.js | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/tasks/dequeue.js b/lib/tasks/dequeue.js index 03afd795..b8655118 100644 --- a/lib/tasks/dequeue.js +++ b/lib/tasks/dequeue.js @@ -110,7 +110,8 @@ class TaskDequeue extends Task { event: 'dequeue', dequeueSipAddress: cs.srf.locals.localSipAddress, epUuid: ep.uuid, - notifyUrl: getUrl(cs) + notifyUrl: getUrl(cs), + dequeuer: cs.callInfo.toJSON() }); this.logger.info(`TaskDequeue:_dequeueUrl successfully sent POST to ${url}`); bridgeTimer = setTimeout(() => reject(new Error('bridge timeout')), 20000); diff --git a/lib/tasks/enqueue.js b/lib/tasks/enqueue.js index 7979610d..120ce73f 100644 --- a/lib/tasks/enqueue.js +++ b/lib/tasks/enqueue.js @@ -263,12 +263,26 @@ class TaskEnqueue extends Task { * @param {string} opts.epUuid uuid of the endpoint we need to bridge to * @param {string} opts.dequeueSipAddress ip:port of the feature server hosting the other call */ - notifyQueueEvent(cs, opts) { + async notifyQueueEvent(cs, opts) { if (opts.event === 'dequeue') { if (this.bridgeNow) return; this.logger.info({opts}, `TaskEnqueue:notifyDequeueEvent: leaving ${this.queueName} because someone wants me`); assert(opts.dequeueSipAddress && opts.epUuid && opts.notifyUrl); this.emitter.emit('dequeue', opts); + + try { + const {lengthOfList} = cs.srf.locals.dbHelpers; + const members = await lengthOfList(this.queueName); + + cs.performQueueWebhook({ + event: 'leave', + queue: this.data.name, + length: Math.max(members - 1, 0), + leaveReason: 'dequeued', + leaveTime: Date.now(), + dequeuer: opts.dequeuer + }); + } catch (err) {} } else if (opts.event === 'hangup') { this.emitter.emit('hangup');