CCSS Issues 2.9 beta

Per discussion on the development blog I am starting up a thread for discussion on the campon issues I am experiencing. I am reproducing my post to the blog:

I have 6004 call 6005 and set up a call. I then call 6004 with 6001, get busy and dial *82. 6001 hangs up. I then hang up the call between 6004 and 6005 and after that nothing happens. Here is the call progress log:

== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
– Executing [6004@from-internal:1] ExecIf(“SIP/6001-00000008”, “0?Set(__RINGTIMER=0)”) in new stack
– Executing [6004@from-internal:2] Macro(“SIP/6001-00000008”, “exten-vm,novm,6004,0,0,0”) in new stack
– Executing [s@macro-exten-vm:1] Macro(“SIP/6001-00000008”, “user-callerid,”) in new stack
– Executing [s@macro-user-callerid:1] Set(“SIP/6001-00000008”, “AMPUSER=6001”) in new stack
– Executing [s@macro-user-callerid:2] GotoIf(“SIP/6001-00000008”, “0?report”) in new stack
– Executing [s@macro-user-callerid:3] ExecIf(“SIP/6001-00000008”, “1?Set(REALCALLERIDNUM=6001)”) in new stack
– Executing [s@macro-user-callerid:4] Set(“SIP/6001-00000008”, “AMPUSER=6001”) in new stack
– Executing [s@macro-user-callerid:5] Set(“SIP/6001-00000008”, “AMPUSERCIDNAME=Stone Residence”) in new stack
– Executing [s@macro-user-callerid:6] GotoIf(“SIP/6001-00000008”, “0?report”) in new stack
– Executing [s@macro-user-callerid:7] Set(“SIP/6001-00000008”, “AMPUSERCID=6001”) in new stack
– Executing [s@macro-user-callerid:8] Set(“SIP/6001-00000008”, “CALLERID(all)=“Stone Residence” <6001>”) in new stack
– Executing [s@macro-user-callerid:9] GotoIf(“SIP/6001-00000008”, “0?limit”) in new stack
– Executing [s@macro-user-callerid:10] ExecIf(“SIP/6001-00000008”, “0?Set(GROUP(concurrency_limit)=6001)”) in new stack
– Executing [s@macro-user-callerid:11] GosubIf(“SIP/6001-00000008”, “7?sub-ccss,s,1(macro-exten-vm,6004)”) in new stack
– Executing [s@sub-ccss:1] ExecIf(“SIP/6001-00000008”, “0?Return()”) in new stack
– Executing [s@sub-ccss:2] Set(“SIP/6001-00000008”, “CCSS_SETUP=TRUE”) in new stack
– Executing [s@sub-ccss:3] GosubIf(“SIP/6001-00000008”, “7?monitor_config,1(macro-exten-vm,6004):monitor_default,1(macro-exten-vm,6004)”) in new stack
– Executing [monitor_config@sub-ccss:1] Set(“SIP/6001-00000008”, “CALLCOMPLETION(cc_monitor_policy)=generic”) in new stack
– Executing [monitor_config@sub-ccss:2] GotoIf(“SIP/6001-00000008”, “1?set_monitor”) in new stack
– Goto (sub-ccss,monitor_config,5)
– Executing [monitor_config@sub-ccss:5] Set(“SIP/6001-00000008”, “CALLCOMPLETION(cc_max_monitors)=”) in new stack
– Executing [monitor_config@sub-ccss:6] Return(“SIP/6001-00000008”, “TRUE”) in new stack
– Executing [s@sub-ccss:4] GosubIf(“SIP/6001-00000008”, “7?agent_config,1:agent_default,1”) in new stack
– Executing [agent_config@sub-ccss:1] Set(“SIP/6001-00000008”, “CALLCOMPLETION(cc_agent_policy)=generic”) in new stack
– Executing [agent_config@sub-ccss:2] Set(“SIP/6001-00000008”, “CALLCOMPLETION(cc_offer_timer)=30”) in new stack
– Executing [agent_config@sub-ccss:3] Set(“SIP/6001-00000008”, “CALLCOMPLETION(ccbs_available_timer)=1200”) in new stack
– Executing [agent_config@sub-ccss:4] Set(“SIP/6001-00000008”, “CALLCOMPLETION(ccnr_available_timer)=1200”) in new stack
– Executing [agent_config@sub-ccss:5] Set(“SIP/6001-00000008”, “CALLCOMPLETION(cc_callback_macro)=ccss-default”) in new stack
– Executing [agent_config@sub-ccss:6] ExecIf(“SIP/6001-00000008”, “1?Set(CALLCOMPLETION(cc_recall_timer)=5)”) in new stack
– Executing [agent_config@sub-ccss:7] ExecIf(“SIP/6001-00000008”, “1?Set(CALLCOMPLETION(cc_max_agents)=1)”) in new stack
– Executing [agent_config@sub-ccss:8] ExecIf(“SIP/6001-00000008”, “0?Set(CALLCOMPLETION(cc_agent_dialstring)=Local/6001_6004@from-ccss-)”) in new stack
– Executing [agent_config@sub-ccss:9] Set(“SIP/6001-00000008”, “CALLCOMPLETION(cc_callback_macro)=ccss-default”) in new stack
– Executing [agent_config@sub-ccss:10] Return(“SIP/6001-00000008”, “”) in new stack
– Executing [s@sub-ccss:5] Set(“SIP/6001-00000008”, “DB(AMPUSER/6001/ccss/last_number)=6004”) in new stack
– Executing [s@sub-ccss:6] Return(“SIP/6001-00000008”, “”) in new stack
– Executing [s@macro-user-callerid:12] ExecIf(“SIP/6001-00000008”, “0?Set(CHANNEL(language)=)”) in new stack
– Executing [s@macro-user-callerid:13] GotoIf(“SIP/6001-00000008”, “0?continue”) in new stack
– Executing [s@macro-user-callerid:14] Set(“SIP/6001-00000008”, “__TTL=64”) in new stack
– Executing [s@macro-user-callerid:15] GotoIf(“SIP/6001-00000008”, “1?continue”) in new stack
– Goto (macro-user-callerid,s,26)
– Executing [s@macro-user-callerid:26] Set(“SIP/6001-00000008”, “CALLERID(number)=6001”) in new stack
– Executing [s@macro-user-callerid:27] Set(“SIP/6001-00000008”, “CALLERID(name)=Stone Residence”) in new stack
– Executing [s@macro-user-callerid:28] Set(“SIP/6001-00000008”, “CHANNEL(language)=en”) in new stack
– Executing [s@macro-exten-vm:2] Set(“SIP/6001-00000008”, “RingGroupMethod=none”) in new stack
– Executing [s@macro-exten-vm:3] Set(“SIP/6001-00000008”, “__EXTTOCALL=6004”) in new stack
– Executing [s@macro-exten-vm:4] Set(“SIP/6001-00000008”, “__PICKUPMARK=6004”) in new stack
– Executing [s@macro-exten-vm:5] Set(“SIP/6001-00000008”, “RT=”"") in new stack
– Executing [s@macro-exten-vm:6] Macro(“SIP/6001-00000008”, “record-enable,6004,IN”) in new stack
– Executing [s@macro-record-enable:1] MacroExit(“SIP/6001-00000008”, “”) in new stack
– Executing [s@macro-exten-vm:7] Macro(“SIP/6001-00000008”, “dial-one,”",tr,6004") in new stack
– Executing [s@macro-dial-one:1] Set(“SIP/6001-00000008”, “DEXTEN=6004”) in new stack
– Executing [s@macro-dial-one:2] Set(“SIP/6001-00000008”, “DIALSTATUS_CW=”) in new stack
– Executing [s@macro-dial-one:3] GosubIf(“SIP/6001-00000008”, “0?screen,1”) in new stack
– Executing [s@macro-dial-one:4] GosubIf(“SIP/6001-00000008”, “0?cf,1”) in new stack
– Executing [s@macro-dial-one:5] GotoIf(“SIP/6001-00000008”, “1?skip1”) in new stack
– Goto (macro-dial-one,s,8)
– Executing [s@macro-dial-one:8] GotoIf(“SIP/6001-00000008”, “0?nodial”) in new stack
– Executing [s@macro-dial-one:9] GotoIf(“SIP/6001-00000008”, “0?continue”) in new stack
– Executing [s@macro-dial-one:10] Set(“SIP/6001-00000008”, “EXTHASCW=”) in new stack
– Executing [s@macro-dial-one:11] GotoIf(“SIP/6001-00000008”, “1?next1:cwinusebusy”) in new stack
– Goto (macro-dial-one,s,12)
– Executing [s@macro-dial-one:12] GotoIf(“SIP/6001-00000008”, “0?docfu:skip3”) in new stack
– Goto (macro-dial-one,s,16)
– Executing [s@macro-dial-one:16] GotoIf(“SIP/6001-00000008”, “1?next2:continue”) in new stack
– Goto (macro-dial-one,s,17)
– Executing [s@macro-dial-one:17] GotoIf(“SIP/6001-00000008”, “0?continue”) in new stack
– Executing [s@macro-dial-one:18] ExecIf(“SIP/6001-00000008”, “0?Set(DIALSTATUS=BUSY)”) in new stack
– Executing [s@macro-dial-one:19] GotoIf(“SIP/6001-00000008”, “0?cwinusebusy”) in new stack
– Executing [s@macro-dial-one:20] Set(“SIP/6001-00000008”, “DEXTEN=”) in new stack
– Executing [s@macro-dial-one:21] Set(“SIP/6001-00000008”, “DIALSTATUS=BUSY”) in new stack
– Executing [s@macro-dial-one:22] Goto(“SIP/6001-00000008”, “nodial”) in new stack
– Goto (macro-dial-one,s,46)
– Executing [s@macro-dial-one:46] ExecIf(“SIP/6001-00000008”, “0?Set(DIALSTATUS=NOANSWER)”) in new stack
– Executing [s@macro-dial-one:47] NoOp(“SIP/6001-00000008”, “Returned from dial-one with nothing to call and DIALSTATUS: BUSY”) in new stack
– Executing [s@macro-dial-one:48] MacroExit(“SIP/6001-00000008”, “”) in new stack
– Executing [s@macro-exten-vm:8] GotoIf(“SIP/6001-00000008”, “0?exit”) in new stack
– Executing [s@macro-exten-vm:9] Set(“SIP/6001-00000008”, “SV_DIALSTATUS=BUSY”) in new stack
– Executing [s@macro-exten-vm:10] GosubIf(“SIP/6001-00000008”, “0?docfu,1”) in new stack
– Executing [s@macro-exten-vm:11] GosubIf(“SIP/6001-00000008”, “0?docfb,1”) in new stack
– Executing [s@macro-exten-vm:12] Set(“SIP/6001-00000008”, “DIALSTATUS=BUSY”) in new stack
– Executing [s@macro-exten-vm:13] ExecIf(“SIP/6001-00000008”, “0?MacroExit()”) in new stack
– Executing [s@macro-exten-vm:14] GotoIf(“SIP/6001-00000008”, “1?s-BUSY,1”) in new stack
– Goto (macro-exten-vm,s-BUSY,1)
– Executing [s-BUSY@macro-exten-vm:1] GotoIf(“SIP/6001-00000008”, “0?exit,1”) in new stack
– Executing [s-BUSY@macro-exten-vm:2] PlayTones(“SIP/6001-00000008”, “busy”) in new stack
– Executing [s-BUSY@macro-exten-vm:3] Busy(“SIP/6001-00000008”, “20”) in new stack
== Spawn extension (macro-exten-vm, s-BUSY, 3) exited non-zero on ‘SIP/6001-00000008’ in macro ‘exten-vm’
== Spawn extension (from-internal, 6004, 2) exited non-zero on ‘SIP/6001-00000008’
– Executing [h@from-internal:1] Macro(“SIP/6001-00000008”, “hangupcall”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“SIP/6001-00000008”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,3)
– Executing [s@macro-hangupcall:3] GotoIf(“SIP/6001-00000008”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,5)
– Executing [s@macro-hangupcall:5] Hangup(“SIP/6001-00000008”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 5) exited non-zero on ‘SIP/6001-00000008’ in macro ‘hangupcall’
== Spawn extension (from-internal, h, 1) exited non-zero on ‘SIP/6001-00000008’
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
– Executing [*82@from-internal:1] Answer(“SIP/6001-00000009”, “”) in new stack
– Executing [*82@from-internal:2] Set(“SIP/6001-00000009”, “CCSS_SETUP=TRUE”) in new stack
– Executing [*82@from-internal:3] Macro(“SIP/6001-00000009”, “user-callerid,”) in new stack
– Executing [s@macro-user-callerid:1] Set(“SIP/6001-00000009”, “AMPUSER=6001”) in new stack
– Executing [s@macro-user-callerid:2] GotoIf(“SIP/6001-00000009”, “0?report”) in new stack
– Executing [s@macro-user-callerid:3] ExecIf(“SIP/6001-00000009”, “1?Set(REALCALLERIDNUM=6001)”) in new stack
– Executing [s@macro-user-callerid:4] Set(“SIP/6001-00000009”, “AMPUSER=6001”) in new stack
– Executing [s@macro-user-callerid:5] Set(“SIP/6001-00000009”, “AMPUSERCIDNAME=Stone Residence”) in new stack
– Executing [s@macro-user-callerid:6] GotoIf(“SIP/6001-00000009”, “0?report”) in new stack
– Executing [s@macro-user-callerid:7] Set(“SIP/6001-00000009”, “AMPUSERCID=6001”) in new stack
– Executing [s@macro-user-callerid:8] Set(“SIP/6001-00000009”, “CALLERID(all)=“Stone Residence” <6001>”) in new stack
– Executing [s@macro-user-callerid:9] GotoIf(“SIP/6001-00000009”, “0?limit”) in new stack
– Executing [s@macro-user-callerid:10] ExecIf(“SIP/6001-00000009”, “0?Set(GROUP(concurrency_limit)=6001)”) in new stack
– Executing [s@macro-user-callerid:11] GosubIf(“SIP/6001-00000009”, “7?sub-ccss,s,1(from-internal,*82)”) in new stack
– Executing [s@sub-ccss:1] ExecIf(“SIP/6001-00000009”, “4?Return()”) in new stack
– Executing [s@macro-user-callerid:12] ExecIf(“SIP/6001-00000009”, “0?Set(CHANNEL(language)=)”) in new stack
– Executing [s@macro-user-callerid:13] GotoIf(“SIP/6001-00000009”, “0?continue”) in new stack
– Executing [s@macro-user-callerid:14] Set(“SIP/6001-00000009”, “__TTL=64”) in new stack
– Executing [s@macro-user-callerid:15] GotoIf(“SIP/6001-00000009”, “1?continue”) in new stack
– Goto (macro-user-callerid,s,26)
– Executing [s@macro-user-callerid:26] Set(“SIP/6001-00000009”, “CALLERID(number)=6001”) in new stack
– Executing [s@macro-user-callerid:27] Set(“SIP/6001-00000009”, “CALLERID(name)=Stone Residence”) in new stack
– Executing [s@macro-user-callerid:28] Set(“SIP/6001-00000009”, “CHANNEL(language)=en”) in new stack
– Executing [*82@from-internal:4] CallCompletionRequest(“SIP/6001-00000009”, “”) in new stack
== Spawn extension (from-internal, 82, 4) exited non-zero on ‘SIP/6001-00000009’
– Executing [h@from-internal:1] Macro(“SIP/6001-00000009”, “hangupcall”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“SIP/6001-00000009”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,3)
– Executing [s@macro-hangupcall:3] GotoIf(“SIP/6001-00000009”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,5)
– Executing [s@macro-hangupcall:5] Hangup(“SIP/6001-00000009”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 5) exited non-zero on ‘SIP/6001-00000009’ in macro ‘hangupcall’
== Spawn extension (from-internal, h, 1) exited non-zero on ‘SIP/6001-00000009’
– Executing [h@macro-dial-one:1] Macro(“SIP/6005-00000006”, “hangupcall,”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“SIP/6005-00000006”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,3)
– Executing [s@macro-hangupcall:3] GotoIf(“SIP/6005-00000006”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,5)
– Executing [s@macro-hangupcall:5] Hangup(“SIP/6005-00000006”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 5) exited non-zero on ‘SIP/6005-00000006’ in macro ‘hangupcall’
== Spawn extension (macro-dial-one, h, 1) exited non-zero on ‘SIP/6005-00000006’
== Spawn extension (macro-dial-one, s, 42) exited non-zero on ‘SIP/6005-00000006’ in macro ‘dial-one’
== Spawn extension (macro-exten-vm, s, 7) exited non-zero on ‘SIP/6005-00000006’ in macro ‘exten-vm’
== Spawn extension (from-internal, 6004, 2) exited non-zero on ‘SIP/6005-00000006’
– Executing [h@from-internal:1] Macro(“SIP/6005-00000006”, “hangupcall”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“SIP/6005-00000006”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,3)
– Executing [s@macro-hangupcall:3] GotoIf(“SIP/6005-00000006”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,5)
– Executing [s@macro-hangupcall:5] Hangup(“SIP/6005-00000006”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 5) exited non-zero on ‘SIP/6005-00000006’ in macro ‘hangupcall’
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/6005-00000006’
asterisk
CLI>

Hello all,

I got the same problem in my test installation, when I call to a busy extension the CCSS doesn’t work.

There is any evolution in this subject?

My installation:
FreePBX 2.9.0rc1.4
Asterisk (Ver. 1.8.3.2)

Regards,
Miguel Ferreira

I would suggest that you try the new FreePBX Distro. If you have issues there it will be much easier to diagnose since it’s a known quantity and we have a couple CCSS related patches in the Asterisk install on that system.

Thanks for the fast replay!
OK! I will try the FreePBX Distro!
I will give some feedback.

Miguel Ferreira

Hello Philippe,
I have installed the FreePBX distro as you suggested and applied the 1.8.1.2-4 upgrade, the results are the same, when the called extension is busy I hang-up and dial *82 I get the beep and the call hangs up normal beaver, but the call compellation is not activated. If the called extension is free everything works fine.

If I activate the “Dynamically Generate Hints” option, the call compellation works fine in the two situations when the extension is busy and free. But ignores the “Call Waiting” option on the extension configuration, what I mean is the phone that I’m testing has two lines and I have configured the “Call Waiting” on the FreePBX extension configuration to “no” but with the “Dynamically Generate Hints” active the system ignores the “Call Waiting” setting.

So this brings some questions:

Thus the call compellation function needs the “Dynamically Generate Hints” active?

Why with the “Dynamically Generate Hints” active the “Call Waiting” is not respected?

Hop that this helps to clarify the problem.

Thanks for all the support,

Miguel Ferreira

I’ll re-test on the distro and make sure there are no new issues.

The distro has the same Asterisk RPMs that I had originally but it’s been a while since I tested the CCSS and I have a new clean distro install on my test system so when I get a chance I will go and see if all is still working or if something came along and broke stuff.

Phillipe

I have been out of circulation for the last few weeks. Will be back from Tuesday.

I will load the distro on my test box and let you know what results I get, although Miguel seems to be experiencing the same problems with the distro.

Regards
T

stonet,

ok well must be from trunk then so it’s not going to work. I"ll work on getting a proper one built on the 1.8 branch and test that first (just in case it is actually broken on 1.8…) and then see about making that available.

Not sure why it is so much bigger, could be that it was built with a bunch of debugging or something turned on. Will have to check with the dev who set it up for me.

Here are the log entries:


Asterisk could not start!
Use ‘tail /var/log/asterisk/full’ to find out why.

[root@asterisk ~]# tail /var/log/asterisk/full
[Mar 7 10:17:09] VERBOSE[2814] config.c: == Parsing ‘/etc/asterisk/ccss_general_custom.conf’: [Mar 7 10:17:09] VERBOSE[2814] config.c: == Found
[Mar 7 10:17:09] VERBOSE[2814] config.c: == Parsing ‘/etc/asterisk/ccss.conf’: [Mar 7 10:17:09] VERBOSE[2814] config.c: == Found
[Mar 7 10:17:09] VERBOSE[2814] config.c: == Parsing ‘/etc/asterisk/ccss_general_additional.conf’: [Mar 7 10:17:09] VERBOSE[2814] config.c: == Found
[Mar 7 10:17:09] VERBOSE[2814] config.c: == Parsing ‘/etc/asterisk/ccss_general_custom.conf’: [Mar 7 10:17:09] VERBOSE[2814] config.c: == Found
[Mar 7 10:17:09] VERBOSE[2814] loader.c: Asterisk Dynamic Loader Starting:
[Mar 7 10:17:09] VERBOSE[2814] config.c: == Parsing ‘/etc/asterisk/modules.conf’: [Mar 7 10:17:09] VERBOSE[2814] config.c: == Found
[Mar 7 10:17:09] NOTICE[2814] loader.c: 191 modules will be loaded.
[Mar 7 10:17:09] NOTICE[2814] res_smdi.c: Unable to load config smdi.conf: SMDI disabled
[Mar 7 10:17:09] NOTICE[2814] res_smdi.c: No SMDI interfaces are available to listen on, not starting SMDI listener.
[Mar 7 10:17:09] ERROR[2814] res_stun_monitor.c: Unable to load config res_stun_monitor.conf

Phillipe

I downloaded the asterisk binary, unziped it and replaced the existing binary and got this (I did a chmod 755 to set the permissions the same as the existing binary):

STARTING ASTERISK
/usr/sbin/safe_asterisk: line 145: 2367 Segmentation fault (core dumped) nice -n $PRIORITY ${ASTSBINDIR}/asterisk -f ${CLIARGS} ${ASTARGS} > /dev/${TTY} 2>&1 < /dev/${TTY}
Asterisk ended with exit status 139
Asterisk exited on signal 11.
Automatically restarting Asterisk.
/usr/sbin/safe_asterisk: line 145: 2401 Segmentation fault (core dumped) nice -n $PRIORITY ${ASTSBINDIR}/asterisk -f ${CLIARGS} ${ASTARGS} > /dev/${TTY} 2>&1 < /dev/${TTY}
Asterisk ended with exit status 139
Asterisk exited on signal 11.
Automatically restarting Asterisk.
mpg123: no process killed
I restored the original and am back in business.

I do notice that the binary you supplied is about ten times as big as the original (it is named asterisk.bak here):

[root@asterisk ~]# ls -l /usr/sbin/asterisk*
-rwxr-xr-x 1 root root 2084655 Jan 20 17:21 /usr/sbin/asterisk
-rwxr-xr-x 1 root root 21220078 Mar 4 17:03 /usr/sbin/asterisk.bak

Afraid my linux knowledge is pretty limited so pursuing this this any further might be difficult. Any suggestions?

T

here’s the binary I have been using.

It may have been built off of trunks so it’s possible it won’t work, I can’t recall.

You can grab it, unzip it, and then just copy it over your /usr/sbin/asterisk (or where ever you system puts the asterisk binary). Just make a backup of yours so if things crash you can just put it back.

You will have to stop asterisk before copying the file there. This has all of the CCSS changes I have done AND the changes to get CONNECTEDLINE() working with parking call retrieval.

The file is: http://mirror.freepbx.org/asterisk.gz

and should just download, let me know if not.

Thanks Phillipe, I am game to try it, perhaps you would give me a brief how to on installing it.

T

Phillipe,

I just can’t get any further than I have on this, it seems that something is missing which makes the call hangup without setting the Campon when the hints are set to false. Afraid my knowledge is insufficient to be able to track this through the dialplans.

T

what ever the issue with hints, it’s not going to be related to the above trace. It is going to be related to the initial call because the above trace only says that in the failed case, there was no valid call to camp on.

That means that the original call was not setting call camping properly.

Since the generic agents and monitors depend on hints to be working properly to function, I’m sure it could be related to that. But why your hints are not working when you are not set to dynamic mode I’m not sure. I suspect the issue is related to some other issue and this is just a by-product.

If you want to test with the new patch though, I could get us an asterisk executable that you could swap out for yours that would allow you to test with that. I’ll look at getting it up for download on the mirror site a bit later once I get some coffee in me:)

yes

as far as dynamic hints, it is not needed if you don’t do any hot-desking, it is otherwise not related.

Phillipe

It seems to me that when dynamically generate hints are not enabled the *82 feature code is not setting the camp-on feature the call is just hanging up.

With Dynamically Generated Hints True:

-- Executing [*82@from-internal:1] Answer("SIP/6001-0000006a", "") in new stack
-- Executing [*82@from-internal:2] Set("SIP/6001-0000006a", "CCSS_SETUP=TRUE") in new stack
-- Executing [*82@from-internal:3] Macro("SIP/6001-0000006a", "user-callerid,") in new stack
-- Executing [s@macro-user-callerid:1] Set("SIP/6001-0000006a", "AMPUSER=6001") in new stack
-- Executing [s@macro-user-callerid:2] GotoIf("SIP/6001-0000006a", "0?report") in new stack
-- Executing [s@macro-user-callerid:3] ExecIf("SIP/6001-0000006a", "1?Set(REALCALLERIDNUM=6001)") in new stack
-- Executing [s@macro-user-callerid:4] Set("SIP/6001-0000006a", "AMPUSER=6001") in new stack
-- Executing [s@macro-user-callerid:5] Set("SIP/6001-0000006a", "AMPUSERCIDNAME=Stone Residence") in new stack
-- Executing [s@macro-user-callerid:6] GotoIf("SIP/6001-0000006a", "0?report") in new stack
-- Executing [s@macro-user-callerid:7] Set("SIP/6001-0000006a", "AMPUSERCID=6001") in new stack
-- Executing [s@macro-user-callerid:8] Set("SIP/6001-0000006a", "CALLERID(all)="Stone Residence" <6001>") in new stack
-- Executing [s@macro-user-callerid:9] NoOp("SIP/6001-0000006a", "[TRACE](3) Current Concurrency Count for 6001: 0, User Limit: 0") in new stack
-- Executing [s@macro-user-callerid:10] GotoIf("SIP/6001-0000006a", "0?limit") in new stack
-- Executing [s@macro-user-callerid:11] ExecIf("SIP/6001-0000006a", "0?Set(GROUP(concurrency_limit)=6001)") in new stack
-- Executing [s@macro-user-callerid:12] GosubIf("SIP/6001-0000006a", "7?sub-ccss,s,1(from-internal,*82)") in new stack
-- Executing [s@sub-ccss:1] ExecIf("SIP/6001-0000006a", "4?Return()") in new stack
-- Executing [s@macro-user-callerid:13] ExecIf("SIP/6001-0000006a", "0?Set(CHANNEL(language)=)") in new stack
-- Executing [s@macro-user-callerid:14] GotoIf("SIP/6001-0000006a", "0?continue") in new stack
-- Executing [s@macro-user-callerid:15] Set("SIP/6001-0000006a", "__TTL=64") in new stack
-- Executing [s@macro-user-callerid:16] GotoIf("SIP/6001-0000006a", "1?continue") in new stack
-- Goto (macro-user-callerid,s,27)
-- Executing [s@macro-user-callerid:27] Set("SIP/6001-0000006a", "CALLERID(number)=6001") in new stack
-- Executing [s@macro-user-callerid:28] Set("SIP/6001-0000006a", "CALLERID(name)=Stone Residence") in new stack
-- Executing [s@macro-user-callerid:29] Set("SIP/6001-0000006a", "CHANNEL(language)=en") in new stack
-- Executing [s@macro-user-callerid:30] NoOp("SIP/6001-0000006a", "[TRACE](3) Using CallerID "Stone Residence" <6001>") in new stack
-- Executing [*82@from-internal:4] CallCompletionRequest("SIP/6001-0000006a", "") in new stack
-- Executing [*82@from-internal:5] NoOp("SIP/6001-0000006a", "[TRACE](3) CC_REQUEST_RESULT: SUCCESS CC_REQUEST_REASON:  LastNumber: 6005") in new stack
-- Executing [*82@from-internal:6] Playback("SIP/6001-0000006a", "beep") in new stack
-- <SIP/6001-0000006a> Playing 'beep.ulaw' (language 'en')
-- Executing [*82@from-internal:7] Macro("SIP/6001-0000006a", "hangupcall,") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/6001-0000006a", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,4)
-- Executing [s@macro-hangupcall:4] GotoIf("SIP/6001-0000006a", "1?theend") in new stack
-- Goto (macro-hangupcall,s,6)
-- Executing [s@macro-hangupcall:6] Hangup("SIP/6001-0000006a", "") in new stack

== Spawn extension (macro-hangupcall, s, 6) exited non-zero on ‘SIP/6001-0000006a’ in macro ‘hangupcall’
== Spawn extension (from-internal, 82, 7) exited non-zero on ‘SIP/6001-0000006a’
– Executing [h@from-internal:1] Macro(“SIP/6001-0000006a”, “hangupcall”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“SIP/6001-0000006a”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,4)
– Executing [s@macro-hangupcall:4] GotoIf(“SIP/6001-0000006a”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,6)
– Executing [s@macro-hangupcall:6] Hangup(“SIP/6001-0000006a”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 6) exited non-zero on ‘SIP/6001-0000006a’ in macro ‘hangupcall’
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/6001-0000006a’
asterisk
CLI>

With Dynamically Generated Hints False:

-- Executing [*82@from-internal:1] Answer("SIP/6001-0000006d", "") in new stack
-- Executing [*82@from-internal:2] Set("SIP/6001-0000006d", "CCSS_SETUP=TRUE") in new stack
-- Executing [*82@from-internal:3] Macro("SIP/6001-0000006d", "user-callerid,") in new stack
-- Executing [s@macro-user-callerid:1] Set("SIP/6001-0000006d", "AMPUSER=6001") in new stack
-- Executing [s@macro-user-callerid:2] GotoIf("SIP/6001-0000006d", "0?report") in new stack
-- Executing [s@macro-user-callerid:3] ExecIf("SIP/6001-0000006d", "1?Set(REALCALLERIDNUM=6001)") in new stack
-- Executing [s@macro-user-callerid:4] Set("SIP/6001-0000006d", "AMPUSER=6001") in new stack
-- Executing [s@macro-user-callerid:5] Set("SIP/6001-0000006d", "AMPUSERCIDNAME=Stone Residence") in new stack
-- Executing [s@macro-user-callerid:6] GotoIf("SIP/6001-0000006d", "0?report") in new stack
-- Executing [s@macro-user-callerid:7] Set("SIP/6001-0000006d", "AMPUSERCID=6001") in new stack
-- Executing [s@macro-user-callerid:8] Set("SIP/6001-0000006d", "CALLERID(all)="Stone Residence" <6001>") in new stack
-- Executing [s@macro-user-callerid:9] NoOp("SIP/6001-0000006d", "[TRACE](3) Current Concurrency Count for 6001: 0, User Limit: 0") in new stack
-- Executing [s@macro-user-callerid:10] GotoIf("SIP/6001-0000006d", "0?limit") in new stack
-- Executing [s@macro-user-callerid:11] ExecIf("SIP/6001-0000006d", "0?Set(GROUP(concurrency_limit)=6001)") in new stack
-- Executing [s@macro-user-callerid:12] GosubIf("SIP/6001-0000006d", "7?sub-ccss,s,1(from-internal,*82)") in new stack
-- Executing [s@sub-ccss:1] ExecIf("SIP/6001-0000006d", "4?Return()") in new stack
-- Executing [s@macro-user-callerid:13] ExecIf("SIP/6001-0000006d", "0?Set(CHANNEL(language)=)") in new stack
-- Executing [s@macro-user-callerid:14] GotoIf("SIP/6001-0000006d", "0?continue") in new stack
-- Executing [s@macro-user-callerid:15] Set("SIP/6001-0000006d", "__TTL=64") in new stack
-- Executing [s@macro-user-callerid:16] GotoIf("SIP/6001-0000006d", "1?continue") in new stack
-- Goto (macro-user-callerid,s,27)
-- Executing [s@macro-user-callerid:27] Set("SIP/6001-0000006d", "CALLERID(number)=6001") in new stack
-- Executing [s@macro-user-callerid:28] Set("SIP/6001-0000006d", "CALLERID(name)=Stone Residence") in new stack
-- Executing [s@macro-user-callerid:29] Set("SIP/6001-0000006d", "CHANNEL(language)=en") in new stack
-- Executing [s@macro-user-callerid:30] NoOp("SIP/6001-0000006d", "[TRACE](3) Using CallerID "Stone Residence" <6001>") in new stack
-- Executing [*82@from-internal:4] CallCompletionRequest("SIP/6001-0000006d", "") in new stack

== Spawn extension (from-internal, 82, 4) exited non-zero on ‘SIP/6001-0000006d’
– Executing [h@from-internal:1] Macro(“SIP/6001-0000006d”, “hangupcall”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“SIP/6001-0000006d”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,4)
– Executing [s@macro-hangupcall:4] GotoIf(“SIP/6001-0000006d”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,6)
– Executing [s@macro-hangupcall:6] Hangup(“SIP/6001-0000006d”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 6) exited non-zero on ‘SIP/6001-0000006d’ in macro ‘hangupcall’
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/6001-0000006d’
asterisk
CLI>

T

Phillipe

User and devices is set extensions. Is this correct?

What do you recommend I set Dynamically Generate Hints to.

Just to make sure we both expect the same things to happen my understanding of Camp On behavior is as follows:

If I call an extension and it is busy or doesn’t answer I can hang up and dial *82, then when the extension becomes free asterisk calls me back, says calling extension and then rings the original busy extension.

Perhaps you would confirm that for me.

T

For starters I’m glad something got working, it’s a good start.

Concerning “Dynamically Generate Hints” I’m not sure quite what you were referring to wrt to CCSS.

Are you running in Users and Devices mode? If so, depending on your setup, then that could be related. That effects many other things as well.

In either case, CCSS works whether the phone was busy or unavailable, but triggering it is different. When I test I do so with both modes, more commonly it’s probably:

  1. Call the extensions, after one ring hangup (noanswer mode)
  2. Pickup the called extension make a call (echo test or anything)
  3. Hangup the called extension
  4. At that point, the callback is triggered to the original calling extension…

In any event, if your hints were messed up on your extensions then it makes sense that lots of things may not have been working. If you are not running in Users and Devices mode (more importantly with hot-desking) then I’m not sure what was up with the Dynamic Hints.

Phillipe

I followed through everything you said above, all is in place and I could find no complaints in the asterisk log file after an amportal restart so I carried on experimenting and discovered the following:

If Dynamically Generate Hints in Advanced Options is set to False when calling a busy extension without call waiting I hear a busy tone and dial *82 but do not hear a feature confirmation tone. When the called extension becomes free no camp-on callback occurs.

When I set Dynamically Generate Hints to True although Call Waiting is disabled on the busy extension I hear ringing when calling it and hear a call waiting tone on the busy extension. If I then hangup the extension from which I am calling and dial *82 I hear the feature code acceptance tone and the call hangs up. When the busy extension goes free the extension on which I dialed *82 rings, on answering I hear the message “calling extension” and the extension that was busy rings which is the camp-on behavior I would expect, however, the problem is that I would not have known the busy phone was busy in the first place and therefore would not have initiated a camp-on.

I hope I have expressed myself OK and you can understand what is happening.

T

Check a couple things please:

First check to make sure CCSS is really there, so at the Asterisk CLI:

cc report status

and make sure Asterisk recognized the command, if not then somehow ti didn’t get compiled with it. Similarly, check to make sure the function is there:

core show function CALLCOMPLETION

Assuming all that is in order, check to make sure sure you have the following line in your sip_additional.conf file for any SIP phone you are trying to call:

cc_monitor_policy=generic

this is a required workaround for one of the bugs which is still outstanding.

Now assuming all of that is there, check you Asterisk log right after Asterisk starts up. I’ve got some new ccss.conf settings that are only for the patch but so far I have not provided any option to hold them back. They are these options:

cc_available_devstate = NOT_INUSE
cc_offered_devstate = NOT_INUSE
cc_caller_requested_devstate = NOT_INUSE
cc_active_devstate = INUSE
cc_callee_ready_devstate = INUSE
cc_caller_busy_devstate = ONHOLD
cc_recalling_devstate = RINGING

I would expect Asterisk to complain about not knowing what these are, but usually Asterisk is very forgiving and I would expect to ignore these. Check to make sure there is not a message indicating some fatal failure because of them.

Ok … let me know on all of the above.