After a mod_callcenter member hangs up, its channel is still present in
the system, and its uuid is unkillable.
I believe FS team calls it a "stale channel".
The uuid-standby agent won't receive any more calls, until he/she hangs
up - what would make uuid-standby a "agent hangup and call again" mode.
What I'm trying to do, is nothing fancy. Basically I'm following the
mod_callcenter documentation without much tweaking.
Here's the test case setup:
- Freeswitch with default config, mod_callcenter enabled also with
default config
Tested with the following versions:
1.4.18+git~20150312T185523Z~4eed221b69~64bit (git 4eed221 2015-03-12
18:55:23Z 64bit)
1.5.15b+git~20150117T062211Z~46cf8a4dce~64bit (git 46cf8a4 2015-01-17
06:22:11Z 64bit)
1.5.15b+git~20150421T235828Z~a4d877c189~64bit (git a4d877c 2015-04-21
23:58:28Z 64bit)
- Dialplan mod_callcenter entries:
<!-- Member dials *91 toenter queue support@default -->
<extension>
<condition field="destination_number" expression="^\*91$">
<action application="callcenter" data="support@default"/>
</condition>
</extension>
<!-- Agent dials 4099 to wait for uuid-standby calls -->
<extension>
<condition field="destination_number" expression="^(4099)$">
<action application="set" data="transfer_after_bridge=4099"/>
<!-- Remove this if you just want to get a single call
<action application="sleep" data="300"/> <!-- Small delay for
safety needs -->
<action application="set" data="res=${callcenter_config(agent
set uuid ${caller_id_number}@$default '${uuid}')}" />
<action application="set" data="res=${callcenter_config(agent
set type ${caller_id_number}@$default 'uuid-standby')}" />
<action application="set" data="res=${callcenter_config(agent
set status ${caller_id_number}@$default 'Available (On Demand)')}" />
<action application="set" data="res=${callcenter_config(agent
set state ${caller_id_number}@$default 'Waiting')}" />
<action application="set"
data="cc_warning_tone=tone_stream://%(200,0,500,600,700)"/>
<action application="answer" />
<action application="playback" data="$${hold_music}"/>
</condition>
</extension>
- Start FS and add a test agent:
callcenter_config agent add 1002@default uuid-standby
- Agent (extension 1002) dials 4099:
The agent starts hearing music on hold.
show channels
uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,application,application_data,dialplan,context,read_codec,read_rate,read_bit_rate,write_codec,write_rate,write_bit_rate,secure,hostname,presence_id,presence_data,callstate,callee_name,callee_num,callee_direction,call_uuid,sent_callee_name,sent_callee_num,initial_cid_name,initial_cid_num,initial_ip_addr,initial_dest,initial_dialplan,initial_context
a1c9b1a4-7926-4da9-9041-100df3d1bbbb,inbound,2015-04-22
18:01:46,1429736506,sofia/internal/1002@192.168.0.136,CS_EXECUTE,1002,1002,192.168.0.103,4099,playback,local_stream://moh,XML,default,PCMU,8000,64000,PCMU,8000,64000,,hajjar-notebook,1002@192.168.0.136,,ACTIVE,,,,,,,1002,1002,192.168.0.103,4099,XML,default
callcenter_config agent list
name|system|uuid|type|contact|status|state|max_no_answer|wrap_up_time|reject_delay_time|busy_delay_time|no_answer_delay_time|last_bridge_start|last_bridge_end|last_offered_call|last_status_change|no_answer_count|calls_answered|talk_time|ready_time
1002@default|single_box|a1c9b1a4-7926-4da9-9041-100df3d1bbbb|uuid-standby||Available
(On
Demand)|Waiting|1|5|0|5|5|1429734669|1429735319|1429734669|1429736506|0|0|0|0
- Member (extension 1000) dials *91:
The member gets bridged to the uuid-stand by agent. Great.
show channels
uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,application,application_data,dialplan,context,read_codec,read_rate,read_bit_rate,write_codec,write_rate,write_bit_rate,secure,hostname,presence_id,presence_data,callstate,callee_name,callee_num,callee_direction,call_uuid,sent_callee_name,sent_callee_num,initial_cid_name,initial_cid_num,initial_ip_addr,initial_dest,initial_dialplan,initial_context
a1c9b1a4-7926-4da9-9041-100df3d1bbbb,inbound,2015-04-22
18:01:46,1429736506,sofia/internal/1002@192.168.0.136,CS_EXCHANGE_MEDIA,1000,1000,192.168.0.103,4099,uuid_bridge,d298fa41-b855-4027-ba4a-ac112df641d5,XML,default,PCMU,8000,64000,PCMU,8000,64000,,hajjar-notebook,1002@192.168.0.136,,ACTIVE,1002,1002,SEND,d298fa41-b855-4027-ba4a-ac112df641d5,1000,1000,1002,1002,192.168.0.103,4099,XML,default
d298fa41-b855-4027-ba4a-ac112df641d5,inbound,2015-04-22
18:04:47,1429736687,sofia/internal/1000@192.168.0.136,CS_SOFT_EXECUTE,1000,1000,192.168.0.120,*94000,uuid_bridge,a1c9b1a4-7926-4da9-9041-100df3d1bbbb,XML,default,PCMU,8000,64000,PCMU,8000,64000,,hajjar-notebook,1000@192.168.0.136,,ACTIVE,1002,1002,SEND,d298fa41-b855-4027-ba4a-ac112df641d5,1002,1002,1000,1000,192.168.0.120,*94000,XML,default
2 total.
show calls
uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,presence_id,presence_data,callstate,callee_name,callee_num,callee_direction,call_uuid,hostname,sent_callee_name,sent_callee_num,b_uuid,b_direction,b_created,b_created_epoch,b_name,b_state,b_cid_name,b_cid_num,b_ip_addr,b_dest,b_presence_id,b_presence_data,b_callstate,b_callee_name,b_callee_num,b_callee_direction,b_sent_callee_name,b_sent_callee_num,call_created_epoch
d298fa41-b855-4027-ba4a-ac112df641d5,inbound,2015-04-22
18:04:47,1429736687,sofia/internal/1000@192.168.0.136,CS_SOFT_EXECUTE,1000,1000,192.168.0.120,*94000,1000@192.168.0.136,,ACTIVE,1002,1002,SEND,d298fa41-b855-4027-ba4a-ac112df641d5,hajjar-notebook,1002,1002,a1c9b1a4-7926-4da9-9041-100df3d1bbbb,inbound,2015-04-22
18:01:46,1429736506,sofia/internal/1002@192.168.0.136,CS_EXCHANGE_MEDIA,1000,1000,192.168.0.103,4099,1002@192.168.0.136,,ACTIVE,1002,1002,SEND,1000,1000,1429736687
1 total.
callcenter_config agent list
name|system|uuid|type|contact|status|state|max_no_answer|wrap_up_time|reject_delay_time|busy_delay_time|no_answer_delay_time|last_bridge_start|last_bridge_end|last_offered_call|last_status_change|no_answer_count|calls_answered|talk_time|ready_time
1002@default|single_box|a1c9b1a4-7926-4da9-9041-100df3d1bbbb|uuid-standby||Available
(On Demand)|In a queue
call|1|5|0|5|5|1429736687|1429735319|1429736687|1429736506|0|1|0|0
- Member hangs up
show channels
uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,application,application_data,dialplan,context,read_codec,read_rate,read_bit_rate,write_codec,write_rate,write_bit_rate,secure,hostname,presence_id,presence_data,callstate,callee_name,callee_num,callee_direction,call_uuid,sent_callee_name,sent_callee_num,initial_cid_name,initial_cid_num,initial_ip_addr,initial_dest,initial_dialplan,initial_context
a1c9b1a4-7926-4da9-9041-100df3d1bbbb,inbound,2015-04-22
18:01:46,1429736506,sofia/internal/1002@192.168.0.136,CS_EXECUTE,1002,1002,192.168.0.103,4099,playback,local_stream://moh,XML,default,PCMU,8000,64000,PCMU,8000,64000,,hajjar-notebook,1002@192.168.0.136,,ACTIVE,1000,1000,RECV,d298fa41-b855-4027-ba4a-ac112df641d5,,,1002,1002,192.168.0.103,4099,XML,default
d298fa41-b855-4027-ba4a-ac112df641d5,inbound,2015-04-22
18:04:47,1429736687,sofia/internal/1000@192.168.0.136,CS_SOFT_EXECUTE,1000,1000,192.168.0.120,*94000,uuid_bridge,a1c9b1a4-7926-4da9-9041-100df3d1bbbb,XML,default,PCMU,8000,64000,PCMU,8000,64000,,hajjar-notebook,1000@192.168.0.136,,ACTIVE,1002,1002,SEND,d298fa41-b855-4027-ba4a-ac112df641d5,1002,1002,1000,1000,192.168.0.120,*94000,XML,default
2 total.
show calls
uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,presence_id,presence_data,callstate,callee_name,callee_num,callee_direction,call_uuid,hostname,sent_callee_name,sent_callee_num,b_uuid,b_direction,b_created,b_created_epoch,b_name,b_state,b_cid_name,b_cid_num,b_ip_addr,b_dest,b_presence_id,b_presence_data,b_callstate,b_callee_name,b_callee_num,b_callee_direction,b_sent_callee_name,b_sent_callee_num,call_created_epoch
d298fa41-b855-4027-ba4a-ac112df641d5,inbound,2015-04-22
18:04:47,1429736687,sofia/internal/1000@192.168.0.136,CS_SOFT_EXECUTE,1000,1000,192.168.0.120,*94000,1000@192.168.0.136,,ACTIVE,1002,1002,SEND,d298fa41-b855-4027-ba4a-ac112df641d5,hajjar-notebook,1002,1002,a1c9b1a4-7926-4da9-9041-100df3d1bbbb,inbound,2015-04-22
18:01:46,1429736506,sofia/internal/1002@192.168.0.136,CS_EXECUTE,1002,1002,192.168.0.103,4099,1002@192.168.0.136,,ACTIVE,1000,1000,RECV,,,1429736687
1 total.
callcenter_config agent list
name|system|uuid|type|contact|status|state|max_no_answer|wrap_up_time|reject_delay_time|busy_delay_time|no_answer_delay_time|last_bridge_start|last_bridge_end|last_offered_call|last_status_change|no_answer_count|calls_answered|talk_time|ready_time
1002@default|single_box|a1c9b1a4-7926-4da9-9041-100df3d1bbbb|uuid-standby||Available
(On
Demand)|Waiting|1|5|0|5|5|1429736687|1429735319|1429736687|1429736990|0|1|0|0
Here the agent gets transfered back to uuid-standby extension and
restarts hearing moh.
It's state is "Waiting" - but he/she won't answer new calls.
But the state is "Waiting" only because it got overridden by the dialplan.
In my tests, removing the callcenter_config(agent set state..) from
dialplan (and controlling agent state via CLI), I've noticed that the
agent state never gets back to "Idle" (if On Demand) or "Waiting". It
gets stuck in "In a queue call".
Trying touuid_kill the member uuid, results in -ERR No such channel!
- When agent finally hangs up:
2015-04-22 18:21:56.804183 [NOTICE] sofia.c:952 Hangup
sofia/internal/1002(a)192.168.0.136 [CS_EXECUTE] [NORMAL_CLEARING]
2015-04-22 18:21:56.824219 [NOTICE] switch_core_session.c:1641 Session 6
(sofia/internal/1000(a)192.168.0.136) Ended
2015-04-22 18:21:56.824219 [NOTICE] switch_core_session.c:1645 Close
Channel sofia/internal/1000(a)192.168.0.136 [CS_DESTROY]
2015-04-22 18:21:57.104198 [NOTICE] switch_core_session.c:1641 Session 4
(sofia/internal/1002(a)192.168.0.136) Ended
2015-04-22 18:21:57.104198 [NOTICE] switch_core_session.c:1645 Close
Channel sofia/internal/1002(a)192.168.0.136 [CS_DESTROY]
show channels, show calls return 0
If callcenter_config(agent set state...) is commented out in dialplan,
callcenter_config agent list shows the agent as "Idle". Meaning
mod_callcenter only perceives the call has been disconnected, after the
agent hangs up...
I'm not blaming mod_callcenter - maybe it's related to
transfer_after_bridge.
I already tried using exec_after_bridge_app/arg to a script that sleeps
and transfer back to 4099. I also tried increasing the dialplan sleep.
I'd appreciate any advice on how to make uuid-standby work.
Thanks in advance,
Saumar