Hi Jonathan,
Please give it a try to this patch - it is not really tested, but when
the call is sent the Queue announcement, it should have a ";cc_pos=xxx"
parameter giving the position is the queue (0 being the first to be
dispatched to agents).
Let me know if it works.
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 28.10.2016 15:59, Jonathan Hunter wrote:
Hi Bogdan,
Great news, really do appreciate that.
Many thanks
Jon
------------------------------------------------------------------------
*From:* Bogdan-Andrei Iancu <bog...@opensips.org>
*Sent:* 28 October 2016 12:48
*To:* Jonathan Hunter; OpenSIPS users mailling list
*Subject:* Re: [OpenSIPS-Users] opensips 2.1 call_center queue position
Hi Jonathan,
No, it is no yet available. Give me couple of days and I will make a
patch for it.
Best regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
Home — OpenSIPS Solutions <http://www.opensips-solutions.com/>
www.opensips-solutions.com
OpenSIPS is a mature Open Source implementation of a SIP server.
OpenSIPS is more than a SIP proxy/router as it includes
application-level functionalities.
On 25.10.2016 19:22, Jonathan Hunter wrote:
Hi Bogdan,
Sorry cant recall If I replied to this.
Is cc_pos available now to extract from the module?
Thats the only thing I need then I can implement call center which I
think will be much more scale-able than the other approach I am using
with FreeSWITCH, I would use that just for announcements.
Any response/help appreciated.
Jon
------------------------------------------------------------------------
*From:* Bogdan-Andrei Iancu <bog...@opensips.org>
*Sent:* 13 October 2016 10:59
*To:* Jonathan Hunter; OpenSIPS users mailling list
*Subject:* Re: [OpenSIPS-Users] opensips 2.1 call_center queue position
Hi Jonathan,
No, currently this is not possible. I was trying to envision a
solution for your need.
But, checking the code, it is really difficult to add the headers to
the INVITEs originated by OpenSIPS (via the B2BUA), as we need some
flexibility (different headers to different INVITEs belonging to the
same B2B scenario , and even more, we need to traverse couple of
internal APIs - to propagate the hdrs from Call center module all the
way to TM).
So, a simpler approach may be to add such extra info as URI params to
the RURI. Like if you have the RURI "sip:queue@192.168.1.10:5060" for
the queue/waiting playback, the RURI in the INVITE to the media
server will look like :
sip:queue@192.168.1.10:5060;cc_eta=40;cc_pos=10 - cc_eta being the
estimated time to wait in seconds and cc_pos the position in the queue.
What do you think of this ?
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 12.10.2016 17:21, Jonathan Hunter wrote:
Hi Bogdan,
Yes being able to grab the queue position would be perfect.
Is that possible?
Thanks
Jon
------------------------------------------------------------------------
Subject: Re: [OpenSIPS-Users] opensips 2.1 call_center queue position
To: hunter...@hotmail.com; users@lists.opensips.org
From: bog...@opensips.org
Date: Wed, 12 Oct 2016 15:42:43 +0300
Hi Jonathan,
When a call is mapped to a flow / queue (before playing the welcome
message), we know the ETA (estimated time to wait) and when is
placed in the queue (before playing the queuing) we internally know
the position in the queue.
Would it help to have the position in the queue placed into a
custome SIP header, when sending the INVITE to the message_queue URL
? or to the welcome message ?
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 12.10.2016 12:06, Jonathan Hunter wrote:
Hello Bogdan,
Thanks for the response.
In terms of my question, with a number of queuing platforms,
they have the capability to tell the caller, what position they
are in , and when they are likely to be answered.
I just wondered if this logic was already within the module, or
if I would need to use an external code/script to facilitate
this function?
As I presume call_center tracks the number of calls currently in
a queue ? I would then want to be able to extract that
information, and if a caller was for example in 3rd place in a
queue, I could inject the relevant audio from freeswitch to tell
them their current position?
Does that make sense? :) Just wanted to know if its something
this module can do?
Thanks
Jon
------------------------------------------------------------------------
Subject: Re: [OpenSIPS-Users] opensips 2.1 call_center queue
position
To: users@lists.opensips.org <mailto:users@lists.opensips.org>;
hunter...@hotmail.com <mailto:hunter...@hotmail.com>
From: bog...@opensips.org <mailto:bog...@opensips.org>
Date: Wed, 12 Oct 2016 11:23:45 +0300
Hello Jon,
The message_queue is a SIP URI pointing to an audio announcement
to play to roll of the waiting/in-queue playback. This needs to
be an announcements that never ends (from the perspective of the
media server); only the the OpenSIPS Queue may terminate the
playback, when it decides to take out the call from waiting and
to deliver it to an agent.
As for your question, I'm not sure I understand what you mean by
"inject a message with queue position for the caller in
question" - could you detail please ?
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 11.10.2016 13:36, Jonathan Hunter wrote:
Hi guys,
I have implemented an opensips/freeswitch environment, and I
wish to add call queues to it, and I like the look of
call_center, so just checking this out in comparison to
mod_callcenter in FS world.
My main question is if using the call_center module if you
can inject a message with queue position for the caller in
question, as I cant see that in documentation, I only see
message_queue which I assume could be used to report the
callers position, but just wondered if anyone has done this
and if they could give me some tips as to if possible?
Many thanks
Jon
_______________________________________________
Users mailing list
Users@lists.opensips.org <mailto:Users@lists.opensips.org>
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
diff --git a/modules/call_center/cc_data.c b/modules/call_center/cc_data.c
index 45112e8..fba0618 100755
--- a/modules/call_center/cc_data.c
+++ b/modules/call_center/cc_data.c
@@ -915,7 +915,7 @@ void print_queue(struct cc_data *data)
}
-void cc_queue_push_call(struct cc_data *data, struct cc_call *call, int top)
+int cc_queue_push_call(struct cc_data *data, struct cc_call *call, int top)
{
struct cc_call *call_it;
int n = 0;
@@ -971,6 +971,8 @@ void cc_queue_push_call(struct cc_data *data, struct cc_call *call, int top)
if (call->queue_start==0)
call->queue_start = get_ticks();
+
+ return n;
}
diff --git a/modules/call_center/cc_data.h b/modules/call_center/cc_data.h
index e2cf62c..14ebf37 100755
--- a/modules/call_center/cc_data.h
+++ b/modules/call_center/cc_data.h
@@ -227,7 +227,7 @@ void clean_cc_old_data(struct cc_data *data);
void clean_cc_unref_data(struct cc_data *data);
-void cc_queue_push_call(struct cc_data *data, struct cc_call *call, int top);
+int cc_queue_push_call(struct cc_data *data, struct cc_call *call, int top);
struct cc_call *cc_queue_pop_call_for_agent(struct cc_data *data,
struct cc_agent *agent);
diff --git a/modules/call_center/cc_queue.c b/modules/call_center/cc_queue.c
index 757bcf3..11e4d83 100644
--- a/modules/call_center/cc_queue.c
+++ b/modules/call_center/cc_queue.c
@@ -24,6 +24,7 @@
* 2014-03-17 initial version (bogdan)
*/
+#include "../../ut.h"
#include "cc_queue.h"
extern stat_var *stg_terminated_calls;
@@ -40,6 +41,7 @@ int cc_call_state_machine(struct cc_data *data, struct cc_call *call,
struct cc_agent *agent;
str *out = NULL;
int state =0;
+ int pos = -1;
switch (call->state) {
case CC_CALL_NONE:
@@ -81,7 +83,7 @@ int cc_call_state_machine(struct cc_data *data, struct cc_call *call,
break;
}
/* add it to queue */
- cc_queue_push_call( data, call, 0);
+ pos = cc_queue_push_call( data, call, 0);
}
break;
case CC_CALL_TOAGENT:
@@ -94,10 +96,20 @@ int cc_call_state_machine(struct cc_data *data, struct cc_call *call,
}
if (out) {
- leg->s = (char*)pkg_malloc( out->len );
+ int l;
+ char *s;
+ if (pos>=0)
+ s=int2str((unsigned long)pos, &l);
+ leg->s = (char*)pkg_malloc( out->len + (pos<0)?0:(8+l) );
if (leg->s) {
leg->len = out->len;
memcpy(leg->s,out->s,out->len);
+ if (pos>=0) {
+ memcpy(leg->s+leg->len, ";cc_pos=",8);
+ leg->len += 8;
+ memcpy(leg->s+leg->len, s, l);
+ leg->len += l;
+ }
call->prev_state = call->state;
call->state = state;
return 0;
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users