Relationship between Ring Groups / Call Groups / Pickup Groups

How are these three items related? Does one create ring groups and then assign the ring group to the call group of an individual device or does one simply assign devices to arbitrary call and pickup group numbers? How does this relate to internal (device to device) calls?

Call groups and pickup groups work in tandum and have nothing to do with ring groups.

Ring groups are a means to create an extension that will ring multiple extensions.

Hover you mouse over call groups and pickup groups in the GUI for help on how they work.

OS = CentOS-6.3 (freepbx)
Arch = x86_64
Asterisk = 11.3.0
FreePBX = 2.11.0.0

I have five extensions installed, two IAXmodems, one twinkle soft-phone, one Snom320 and one Snom870. I have one test POTS line going through a Digium TDM board. I have one inbound route set up for any DID/CID. This inbound route waits for four rings to detect a fax

I Have two ring groups defined. One is for faxes the other is for everything else. There are two devices/extensions assigned to the everything else (default) ring group, one is a snom320 the other a snom870. Both devices can place outgoing calls. Both devices are encrypted enabled. I also have a single Twinkle soft-phone with no encryption. It too can place outgoing calls.

Name/username Host Dyn Forcerport ACL Port Status Description 41710/41710 192.168.6.110 D A 2060 OK (21 ms) 41711/41711 192.168.6.111 D A 3072 OK (21 ms)

If only the snoms are registered then when a non-fax call comes in I see this:

== Spawn extension (app-blackhole, busy, 2) exited non-zero on 'DAHDI/1-1' -- Hanging up on 'DAHDI/1-1' -- Hungup 'DAHDI/1-1' -- Starting simple switch on 'DAHDI/1-1' -- Executing [s@from-pstn:1] ExecIf("DAHDI/1-1", "1?Set(__FROM_DID=s)") in new stack -- Executing [s@from-pstn:2] Set("DAHDI/1-1", "CHANNEL(language)=en") in new stack -- Executing [s@from-pstn:3] Gosub("DAHDI/1-1", "sub-record-cancel,s,1()") in new stack -- Executing [s@sub-record-cancel:1] Set("DAHDI/1-1", "__REC_POLICY_MODE=") in new stack -- Executing [s@sub-record-cancel:2] ExecIf("DAHDI/1-1", "1?Return()") in new stack -- Executing [s@from-pstn:4] Set("DAHDI/1-1", "__REC_POLICY_MODE=never") in new stack -- Executing [s@from-pstn:5] Gosub("DAHDI/1-1", "app-blacklist-check,s,1()") in new stack -- Executing [s@app-blacklist-check:1] GotoIf("DAHDI/1-1", "0?blacklisted") in new stack -- Executing [s@app-blacklist-check:2] Set("DAHDI/1-1", "CALLED_BLACKLIST=1") in new stack -- Executing [s@app-blacklist-check:3] Return("DAHDI/1-1", "") in new stack -- Executing [s@from-pstn:6] Set("DAHDI/1-1", "CDR(did)=s") in new stack -- Executing [s@from-pstn:7] ExecIf("DAHDI/1-1", "1 ?Set(CALLERID(name)=)") in new stack -- Executing [s@from-pstn:8] Set("DAHDI/1-1", "CHANNEL(musicclass)=none") in new stack -- Executing [s@from-pstn:9] Set("DAHDI/1-1", "__MOHCLASS=none") in new stack -- Executing [s@from-pstn:10] Set("DAHDI/1-1", "__CALLINGPRES_SV=allowed_not_screened") in new stack -- Executing [s@from-pstn:11] Set("DAHDI/1-1", "CALLERPRES()=allowed_not_screened") in new stack -- Executing [s@from-pstn:12] Set("DAHDI/1-1", "FAX_DEST=ext-group^457^1") in new stack -- Executing [s@from-pstn:13] Answer("DAHDI/1-1", "") in new stack -- Executing [s@from-pstn:14] Wait("DAHDI/1-1", "4") in new stack -- Executing [s@from-pstn:15] Goto("DAHDI/1-1", "ext-group,417,1") in new stack -- Goto (ext-group,417,1) -- Executing [417@ext-group:1] Macro("DAHDI/1-1", "user-callerid,") in new stack -- Executing [s@macro-user-callerid:1] Set("DAHDI/1-1", "TOUCH_MONITOR=1368640539.60") in new stack -- Executing [s@macro-user-callerid:2] Set("DAHDI/1-1", "AMPUSER=") in new stack -- Executing [s@macro-user-callerid:3] GotoIf("DAHDI/1-1", "0?report") in new stack -- Executing [s@macro-user-callerid:4] ExecIf("DAHDI/1-1", "1?Set(REALCALLERIDNUM=)") in new stack -- Executing [s@macro-user-callerid:5] Set("DAHDI/1-1", "AMPUSER=") in new stack -- Executing [s@macro-user-callerid:6] Set("DAHDI/1-1", "AMPUSERCIDNAME=") in new stack -- Executing [s@macro-user-callerid:7] GotoIf("DAHDI/1-1", "1?report") in new stack -- Goto (macro-user-callerid,s,15) -- Executing [s@macro-user-callerid:15] GotoIf("DAHDI/1-1", "0?continue") in new stack -- Executing [s@macro-user-callerid:16] Set("DAHDI/1-1", "__TTL=64") in new stack -- Executing [s@macro-user-callerid:17] GotoIf("DAHDI/1-1", "1?continue") in new stack -- Goto (macro-user-callerid,s,28) -- Executing [s@macro-user-callerid:28] Set("DAHDI/1-1", "CALLERID(number)=") in new stack -- Executing [s@macro-user-callerid:29] Set("DAHDI/1-1", "CALLERID(name)=") in new stack -- Executing [s@macro-user-callerid:30] Set("DAHDI/1-1", "CDR(cnum)=") in new stack -- Executing [s@macro-user-callerid:31] Set("DAHDI/1-1", "CDR(cnam)=") in new stack -- Executing [s@macro-user-callerid:32] Set("DAHDI/1-1", "CHANNEL(language)=en") in new stack -- Executing [417@ext-group:2] Macro("DAHDI/1-1", "blkvm-setifempty,") in new stack -- Executing [s@macro-blkvm-setifempty:1] GotoIf("DAHDI/1-1", "1?init") in new stack -- Goto (macro-blkvm-setifempty,s,4) -- Executing [s@macro-blkvm-setifempty:4] Set("DAHDI/1-1", "__BLKVM_CHANNEL=DAHDI/1-1") in new stack -- Executing [s@macro-blkvm-setifempty:5] Set("DAHDI/1-1", "SHARED(BLKVM,DAHDI/1-1)=TRUE") in new stack -- Executing [s@macro-blkvm-setifempty:6] Set("DAHDI/1-1", "GOSUB_RETVAL=TRUE") in new stack -- Executing [s@macro-blkvm-setifempty:7] MacroExit("DAHDI/1-1", "") in new stack -- Executing [417@ext-group:3] GotoIf("DAHDI/1-1", "1?skipov") in new stack -- Goto (ext-group,417,6) -- Executing [417@ext-group:6] Set("DAHDI/1-1", "RRNODEST=") in new stack -- Executing [417@ext-group:7] Set("DAHDI/1-1", "__NODEST=417") in new stack -- Executing [417@ext-group:8] GosubIf("DAHDI/1-1", "0?sub-rgsetcid,s,1()") in new stack -- Executing [417@ext-group:9] Set("DAHDI/1-1", "__PICKUPMARK=417") in new stack -- Executing [417@ext-group:10] Gosub("DAHDI/1-1", "sub-record-check,s,1(rg,417,dontcare)") in new stack -- Executing [s@sub-record-check:1] Set("DAHDI/1-1", "REC_POLICY_MODE_SAVE=never") in new stack -- Executing [s@sub-record-check:2] GotoIf("DAHDI/1-1", "1?check") in new stack -- Goto (sub-record-check,s,7) -- Executing [s@sub-record-check:7] Set("DAHDI/1-1", "__MON_FMT=wav") in new stack -- Executing [s@sub-record-check:8] GotoIf("DAHDI/1-1", "1?next") in new stack -- Goto (sub-record-check,s,11) -- Executing [s@sub-record-check:11] ExecIf("DAHDI/1-1", "0?Return()") in new stack -- Executing [s@sub-record-check:12] ExecIf("DAHDI/1-1", "0?Set(__REC_POLICY_MODE=dontcare)") in new stack -- Executing [s@sub-record-check:13] GotoIf("DAHDI/1-1", "0?rg,1") in new stack -- Executing [s@sub-record-check:14] Set("DAHDI/1-1", "__REC_STATUS=INITIALIZED") in new stack -- Executing [s@sub-record-check:15] Set("DAHDI/1-1", "NOW=1368640547") in new stack -- Executing [s@sub-record-check:16] Set("DAHDI/1-1", "__DAY=15") in new stack -- Executing [s@sub-record-check:17] Set("DAHDI/1-1", "__MONTH=05") in new stack -- Executing [s@sub-record-check:18] Set("DAHDI/1-1", "__YEAR=2013") in new stack -- Executing [s@sub-record-check:19] Set("DAHDI/1-1", "__TIMESTR=20130515-135547") in new stack -- Executing [s@sub-record-check:20] Set("DAHDI/1-1", "__FROMEXTEN=unknown") in new stack -- Executing [s@sub-record-check:21] Set("DAHDI/1-1", "__CALLFILENAME=rg-417-unknown-20130515-135547-1368640539.60") in new stack -- Executing [s@sub-record-check:22] Goto("DAHDI/1-1", "rg,1") in new stack -- Goto (sub-record-check,rg,1) -- Executing [rg@sub-record-check:1] GosubIf("DAHDI/1-1", "0?record,1(rg,never,unknown)") in new stack -- Executing [rg@sub-record-check:2] Return("DAHDI/1-1", "") in new stack -- Executing [417@ext-group:11] Set("DAHDI/1-1", "RingGroupMethod=ringall") in new stack -- Executing [417@ext-group:12] Macro("DAHDI/1-1", "dial,20,Ttr,41710-41711-41712-41713") in new stack -- Executing [s@macro-dial:1] GotoIf("DAHDI/1-1", "0?dial") in new stack -- Executing [s@macro-dial:2] SetMusicOnHold("DAHDI/1-1", "none") in new stack -- Executing [s@macro-dial:3] AGI("DAHDI/1-1", "dialparties.agi") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi dialparties.agi: Starting New Dialparties.agi dialparties.agi: Caller ID name is 'unknown' number is 'unknown' > dialparties.agi: USE_CONFIRMATION: 'FALSE' > dialparties.agi: RINGGROUP_INDEX: '' dialparties.agi: Methodology of ring is 'ringall' -- dialparties.agi: Added extension 41710 to extension map -- dialparties.agi: Added extension 41711 to extension map -- dialparties.agi: Added extension 41712 to extension map -- dialparties.agi: Added extension 41713 to extension map -- dialparties.agi: Extension 41710 cf is disabled -- dialparties.agi: Extension 41711 cf is disabled -- dialparties.agi: Extension 41712 cf is disabled -- dialparties.agi: Extension 41713 cf is disabled -- dialparties.agi: Extension 41710 do not disturb is disabled -- dialparties.agi: Extension 41711 do not disturb is disabled -- dialparties.agi: Extension 41712 do not disturb is disabled -- dialparties.agi: Extension 41713 do not disturb is disabled > dialparties.agi: extnum 41710 has: cw: 1; hascfb: 0 [] hascfu: 0 [] -- dialparties.agi: DbDel CALLTRACE/41710 - Caller ID is not defined > dialparties.agi: extnum 41711 has: cw: 1; hascfb: 0 [] hascfu: 0 [] -- dialparties.agi: DbDel CALLTRACE/41711 - Caller ID is not defined > dialparties.agi: extnum 41712 has: cw: 1; hascfb: 0 [] hascfu: 0 [] -- dialparties.agi: DbDel CALLTRACE/41712 - Caller ID is not defined > dialparties.agi: extnum 41713 has: cw: 1; hascfb: 0 [] hascfu: 0 [] -- dialparties.agi: DbDel CALLTRACE/41713 - Caller ID is not defined -- dialparties.agi: Filtered ARG3: 41710-41711-41712-41713 > dialparties.agi: NODEST: 417 adding M(auto-blkvm) to dialopts: TtrM(auto-blkvm) > dialparties.agi: NODEST: 417 blkvm enabled macro already in dialopts: TtrM(auto-blkvm) -- AGI Script dialparties.agi completed, returning 0 -- Executing [s@macro-dial:7] Dial("DAHDI/1-1", "SIP/41710&SIP/41711&SIP/41712&SIP/90012&SIP/41713,20,TtrM(auto-blkvm)") in new stack == Using SIP RTP TOS bits 184 == Using SIP RTP CoS mark 5 == Using SIP RTP TOS bits 184 == Using SIP RTP CoS mark 5 [2013-05-15 13:55:47] WARNING[21902][C-00000026]: app_dial.c:2437 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent) [2013-05-15 13:55:47] WARNING[21902][C-00000026]: app_dial.c:2437 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent) [2013-05-15 13:55:47] WARNING[21902][C-00000026]: app_dial.c:2437 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent) [2013-05-15 13:55:47] WARNING[21902][C-00000026]: app_dial.c:2437 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent) [2013-05-15 13:55:47] WARNING[21902][C-00000026]: app_dial.c:2437 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent) [2013-05-15 13:55:47] WARNING[21902][C-00000026]: app_dial.c:2437 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent) [2013-05-15 13:55:47] DEBUG[21902][C-00000026]: sip/sdp_crypto.c:310 sdp_crypto_offer: Crypto line: a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAKzRb8yUqcSvYmGE9MK9Zf0zn4d6YJuwkTljzqf -- Called SIP/41710 [2013-05-15 13:55:47] DEBUG[21902][C-00000026]: sip/sdp_crypto.c:310 sdp_crypto_offer: Crypto line: a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:6DzCfL/XO9abCSozRApGhVmDHM7EHUh4NPjsOiYC -- Called SIP/41711 -- SIP/41711-0000002b connected line has changed. Saving it until answer for DAHDI/1-1 -- SIP/41710-0000002a connected line has changed. Saving it until answer for DAHDI/1-1 [2013-05-15 13:55:47] WARNING[1642][C-00000026]: chan_sip.c:22795 handle_response_invite: Received response: "Forbidden" from '"Unknown" ;tag=as3dccb84e' [2013-05-15 13:55:47] WARNING[1642][C-00000026]: chan_sip.c:22795 handle_response_invite: Received response: "Forbidden" from '"Unknown" ;tag=as3dccb84e' [2013-05-15 13:55:47] WARNING[1642][C-00000026]: chan_sip.c:22795 handle_response_invite: Received response: "Forbidden" from '"Unknown" ;tag=as20fca757' [2013-05-15 13:55:47] WARNING[1642][C-00000026]: chan_sip.c:22795 handle_response_invite: Received response: "Forbidden" from '"Unknown" ;tag=as20fca757' == Everyone is busy/congested at this time (5:0/0/5) -- Executing [s@macro-dial:8] Set("DAHDI/1-1", "DIALSTATUS=CHANUNAVAIL") in new stack -- Executing [s@macro-dial:9] GosubIf("DAHDI/1-1", "0?CHANUNAVAIL,1") in new stack -- Executing [417@ext-group:13] Gosub("DAHDI/1-1", "sub-record-cancel,s,1()") in new stack -- Executing [s@sub-record-cancel:1] Set("DAHDI/1-1", "__REC_POLICY_MODE=never") in new stack -- Executing [s@sub-record-cancel:2] ExecIf("DAHDI/1-1", "1?Return()") in new stack -- Executing [417@ext-group:14] Set("DAHDI/1-1", "RingGroupMethod=") in new stack -- Executing [417@ext-group:15] GotoIf("DAHDI/1-1", "0?nodest") in new stack -- Executing [417@ext-group:16] Set("DAHDI/1-1", "__PICKUPMARK=") in new stack -- Executing [417@ext-group:17] Set("DAHDI/1-1", "__NODEST=") in new stack -- Executing [417@ext-group:18] Macro("DAHDI/1-1", "blkvm-clr,") in new stack -- Executing [s@macro-blkvm-clr:1] Set("DAHDI/1-1", "SHARED(BLKVM,DAHDI/1-1)=") in new stack -- Executing [s@macro-blkvm-clr:2] Set("DAHDI/1-1", "GOSUB_RETVAL=") in new stack -- Executing [s@macro-blkvm-clr:3] MacroExit("DAHDI/1-1", "") in new stack -- Executing [417@ext-group:19] Goto("DAHDI/1-1", "app-blackhole,busy,1") in new stack -- Goto (app-blackhole,busy,1) -- Executing [busy@app-blackhole:1] NoOp("DAHDI/1-1", "Blackhole Dest: Busy") in new stack -- Executing [busy@app-blackhole:2] Busy("DAHDI/1-1", "20") in new stack == Spawn extension (app-blackhole, busy, 2) exited non-zero on 'DAHDI/1-1' -- Hanging up on 'DAHDI/1-1' -- Hungup 'DAHDI/1-1'

Neither of the snom phones ring and the call goes dead on the line, no busy signal, no hangup, nothing.

If however the soft-phone is registered then it rings even though its device number is not part of the ring-group, albeit the user used to register the phone is part of it.

I surmise that part of my difficulty is that I am having trouble with the word extension which in some places seems to refer to the device and in others to the user logged into that device. The two snom phones have user configurations which match to the ring group and which are used to register the phones. I am puzzled as to why the soft-phone rings and the desk tops phones do not.

Is this an artefact of encryption? How do I get this to work?


Looks like your phones are rejecting the call for some reason.

Looks like your phones are rejecting the call for some reason.

I discover that there is a setting on the SIP tab of the User Configuration called Server Type Support: which must be set to ‘Asterisk’ for the phones to reply when dialled. So, the only thing left to get working is SRTP encryption via Twinkle or replace Twinkle with something that does encryption.

Any suggestions for a free, open-source, cross-platform (OSX-10,MS-Win,Linux), soft-phone that comes pre-packaged for installation?