Skip to main content

Pickup group not working

Posted by Wender on Tue, 03/29/2011

Hi all,

im trying to work with the pickup groups on the new TL versions.
i have made my pickup groups, and a feature code:

pickupgroups.include:
[pickup0-Bob_PriveTest]
exten => s,1,PickupChan(SIP/10-Bob_PriveTest,SIP/21-Bob_PriveTest,SIP/22-Bob_PriveTest,SIP/23-Bob_PriveTest)

scripts.include:
[macro-tl-pickupgroup-pickup]
exten => s,1,Goto(pickup${MACRO_EXTEN:${ARG1}}${TL_DASH}${tenant})

extensions.conf:
[from-outside-redir]
#include pickupgroups.include

[feature-extensions-Bob_PriveTest]
exten => _*7.,1,Macro(tl-pickupgroup-pickup,2) ; cp

I call to extension 21, and on extension 22 i dial *70, creating the following log and error:

-- Called 21-Bob_PriveTest
-- SIP/21-Bob_PriveTest-000009a3 is ringing
-- Executing [*70@from-inside-Bob_PriveTest:1] Macro("SIP/22-Bob_PriveTest-000009a4", "tl-set-variables2|from-inside-redir-Bob_PriveTest|Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:1] Set("SIP/22-Bob_PriveTest-000009a4", "__tenant=Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:2] Set("SIP/22-Bob_PriveTest-000009a4", "CDR(userfield)=Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:3] Set("SIP/22-Bob_PriveTest-000009a4", "__FROM_INSIDE=1") in new stack
-- Executing [s@macro-tl-set-variables2:4] Set("SIP/22-Bob_PriveTest-000009a4", "__MOH=") in new stack
-- Executing [s@macro-tl-set-variables2:5] GotoIf("SIP/22-Bob_PriveTest-000009a4", "0 ?setmoh") in new stack
-- Executing [s@macro-tl-set-variables2:6] Set("SIP/22-Bob_PriveTest-000009a4", "__MOH=default-Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:7] SetMusicOnHold("SIP/22-Bob_PriveTest-000009a4", "default-Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:8] Goto("SIP/22-Bob_PriveTest-000009a4", "from-inside-redir-Bob_PriveTest|*70|1") in new stack
-- Goto (from-inside-redir-Bob_PriveTest,*70,1)
== Channel 'SIP/22-Bob_PriveTest-000009a4' jumping out of macro 'tl-set-variables2'
-- Executing [*70@from-inside-redir-Bob_PriveTest:1] Macro("SIP/22-Bob_PriveTest-000009a4", "tl-pickupgroup-pickup|2") in new stack
-- Executing [s@macro-tl-pickupgroup-pickup:1] Goto("SIP/22-Bob_PriveTest-000009a4", "pickup0-Bob_PriveTest") in new stack
[Mar 29 10:47:59] NOTICE[10202]: pbx.c:1910 pbx_extension_helper: No such label 'pickup0-Bob_PriveTest' in extension 's' in context 'macro-tl-pickupgroup-pickup'
[Mar 29 10:47:59] WARNING[10202]: pbx.c:6454 ast_parseable_goto: Priority 'pickup0-Bob_PriveTest' must be a number > 0, or valid label

== Spawn extension (macro-tl-pickupgroup-pickup, s, 1) exited non-zero on 'SIP/22-Bob_PriveTest-000009a4' in macro 'tl-pickupgroup-pickup'
== Spawn extension (from-inside-redir-Bob_PriveTest, *70, 1) exited non-zero on 'SIP/22-Bob_PriveTest-000009a4'
-- Executing [h@from-inside-redir-Bob_PriveTest:1] Hangup("SIP/22-Bob_PriveTest-000009a4", "") in new stack
== Spawn extension (from-inside-redir-Bob_PriveTest, h, 1) exited non-zero on 'SIP/22-Bob_PriveTest-000009a4'

anyone can tell me what went wrong?


Submitted by eeman on Tue, 03/29/2011 Permalink

[macro-tl-pickupgroup-pickup]
exten => s,1,Goto(pickup${MACRO_EXTEN:${ARG1}}${TL_DASH}${tenant})

needs to be

[macro-tl-pickupgroup-pickup]
exten => s,1,Goto(pickup${MACRO_EXTEN:${ARG1}}${TL_DASH}${tenant},s,1)

Submitted by Wender on Tue, 03/29/2011 Permalink

edited the context, now i get the following:

-- SIP/21-Bob_PriveTest-00000009 is ringing
-- Executing [*70@from-inside-Bob_PriveTest:1] Macro("SIP/22-Bob_PriveTest-0000000a", "tl-set-variables2|from-inside-redir-Bob_PriveTest|Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:1] Set("SIP/22-Bob_PriveTest-0000000a", "__tenant=Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:2] Set("SIP/22-Bob_PriveTest-0000000a", "CDR(userfield)=Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:3] Set("SIP/22-Bob_PriveTest-0000000a", "__FROM_INSIDE=1") in new stack
-- Executing [s@macro-tl-set-variables2:4] Set("SIP/22-Bob_PriveTest-0000000a", "__MOH=") in new stack
-- Executing [s@macro-tl-set-variables2:5] GotoIf("SIP/22-Bob_PriveTest-0000000a", "0 ?setmoh") in new stack
-- Executing [s@macro-tl-set-variables2:6] Set("SIP/22-Bob_PriveTest-0000000a", "__MOH=default-Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:7] SetMusicOnHold("SIP/22-Bob_PriveTest-0000000a", "default-Bob_PriveTest") in new stack
-- Executing [s@macro-tl-set-variables2:8] Goto("SIP/22-Bob_PriveTest-0000000a", "from-inside-redir-Bob_PriveTest|*70|1") in new stack
-- Goto (from-inside-redir-Bob_PriveTest,*70,1)
== Channel 'SIP/22-Bob_PriveTest-0000000a' jumping out of macro 'tl-set-variables2'
-- Executing [*70@from-inside-redir-Bob_PriveTest:1] Macro("SIP/22-Bob_PriveTest-0000000a", "tl-pickupgroup-pickup|2") in new stack
-- Executing [s@macro-tl-pickupgroup-pickup:1] Goto("SIP/22-Bob_PriveTest-0000000a", "pickup0-Bob_PriveTest|s|1") in new stack
-- Goto (pickup0-Bob_PriveTest,s,1)
== Channel 'SIP/22-Bob_PriveTest-0000000a' jumping out of macro 'tl-pickupgroup-pickup'
[Mar 30 07:49:07] WARNING[22860]: pbx.c:1849 pbx_extension_helper: No application 'PickupChan' for extension (pickup0-Bob_PriveTest, s, 1)
== Spawn extension (pickup0-Bob_PriveTest, s, 1) exited non-zero on 'SIP/22-Bob_PriveTest-0000000a'

Submitted by eeman on Fri, 04/08/2011 Permalink

correct, it was introduced in 1.6.2 so you'll want to start the process in evaluating what it will take to upgrade to 1.8 more than likely.

Submitted by moshe on Tue, 04/12/2011 Permalink

Im using tl-multidevice-exten and i setup pickupgroup4 but got the following error is it posible that pickup group isnt working with multi device extensions if it isn't how about device based hunt lists (i have not tested it

following is the cli of the call

-- Executing [s@macro-tl-userexten-base:163] Dial("SIP/MTE1-000000b1", "SIP/101-8885551212&SIP/104-88855511212,35,rtTw") in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
== Using SIP VRTP TOS bits 136
== Using SIP VRTP CoS mark 6
-- Called 101-88855511212
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
== Using SIP VRTP TOS bits 136
== Using SIP VRTP CoS mark 6
== Extension Changed 101[local-extensions-88855511212] new state Ringing for Notify User 103-88855511212
-- Called 104-88855511212
== Extension Changed 104[local-extensions-88855511212] new state Ringing for Notify User 103-88855511212
-- Nobody picked up in 20000 ms
-- Executing [s@macro-tl-userexten-base:164] Goto("SIP/MTE1-000000aa", "s-orig-NOANSWER,1") in new stack
-- Goto (macro-tl-userexten-base,s-orig-NOANSWER,1)
-- Executing [s-orig-NOANSWER@macro-tl-userexten-base:1] Goto("SIP/MTE1-000000aa", "s-NA,1") in new stack
-- Goto (macro-tl-userexten-base,s-NA,1)
-- Executing [s-NA@macro-tl-userexten-base:1] GotoIf("SIP/MTE1-000000aa", "0?s-exit,1") in new stack
== Extension Changed 102[local-extensions-7189430613] new state Idle for Notify User 101-7189430613
-- Executing [s-NA@macro-tl-userexten-base:2] GotoIf("SIP/MTE1-000000aa", "1?s-NA-VOICEMAIL,1") in new stack
-- Goto (macro-tl-userexten-base,s-NA-VOICEMAIL,1)
== Extension Changed 102[local-extensions-7189430613] new state Idle for Notify User 104-7189430613
-- Executing [s-NA-VOICEMAIL@macro-tl-userexten-base:1] Answer("SIP/MTE1-000000aa", "") in new stack
-- Executing [s-NA-VOICEMAIL@macro-tl-userexten-base:2] Wait("SIP/MTE1-000000aa", "2") in new stack
-- SIP/101-88855511212-000000b3 is ringing
-- SIP/104-88855511212-000000b4 is ringing

a few lines down i have a busy system so i had to cut some lines out


-- Executing [*94@from-inside-88855511212:1] Macro("SIP/102-88855511212-000000b8", "tl-set-variables2,from-inside-redir-88855511212,88855511212") in new stack
== Extension Changed 102[local-extensions-88855511212] new state InUse for Notify User 103-88855511212
-- Executing [s@macro-tl-set-variables2:1] Set("SIP/102-88855511212-000000b8", "__tenant=88855511212") in new stack
-- Executing [s@macro-tl-set-variables2:2] Set("SIP/102-88855511212-000000b8", "CDR(userfield)=88855511212") in new stack
-- Executing [s@macro-tl-set-variables2:3] Set("SIP/102-88855511212-000000b8", "__FROM_INSIDE=1") in new stack
-- Executing [s@macro-tl-set-variables2:4] Set("SIP/102-88855511212-000000b8", "__MOH=default-88855511212") in new stack
-- Executing [s@macro-tl-set-variables2:5] GotoIf("SIP/102-88855511212-000000b8", "1 ?setmoh") in new stack
-- Goto (macro-tl-set-variables2,s,7)
-- Executing [s@macro-tl-set-variables2:7] Set("SIP/102-88855511212-000000b8", "CHANNEL(musicclass)=default-88855511212") in new stack
-- Executing [s@macro-tl-set-variables2:8] Goto("SIP/102-88855511212-000000b8", "from-inside-redir-88855511212,*94,1") in new stack
-- Goto (from-inside-redir-88855511212,*94,1)
== Channel 'SIP/102-88855511212-000000b8' jumping out of macro 'tl-set-variables2'
-- Executing [*94@from-inside-redir-88855511212:1] Macro("SIP/102-88855511212-000000b8", "vo-pickupgroup-pickup,2") in new stack
-- Executing [s@macro-vo-pickupgroup-pickup:1] Goto("SIP/102-88855511212-000000b8", "pickup4-88855511212,s,1") in new stack
-- Goto (pickup4-88855511212,s,1)
== Channel 'SIP/102-88855511212-000000b8' jumping out of macro 'vo-pickupgroup-pickup'
-- Executing [s@pickup4-88855511212:1] PickupChan("SIP/102-88855511212-000000b8", "SIP/101-88855511212,SIP/102-88855511212,SIP/103-88855511212,SIP/104-88855511212") in new stack
[Apr 12 20:03:27] NOTICE[4576]: app_directed_pickup.c:291 pickupchan_exec: No target channel found for SIP/101-88855511212,SIP/102-88855511212,SIP/103-88855511212,SIP/104-88855511212.

Submitted by moshe on Tue, 04/12/2011 Permalink

BTW i have changed the mecro to

[macro-vo-pickupgroup-pickup]
exten => s,1,Goto(pickup${MACRO_EXTEN:${ARG1}}${TL_DASH}${tenant},s,1)

otherwise i had the previous error,
FYI Im running 6.1.1.7 asterisk SVN-branch-1.6.2-r313047

Submitted by mvarela on Fri, 07/15/2011 Permalink

Having the same problem.

i think the problem is that

PickupChan("SIP/101,SIP/102,SIP/103,SIP/104")

should be

PickupChan("SIP/101&SIP/102&SIP/103&SIP/104")

If we change , for & it works, but when you change something in the web interface and you apply the changes, our configuration is overwritten.

We also had to change

[macro-vo-pickupgroup-pickup]
exten => s,1,Goto(pickup${MACRO_EXTEN:${ARG1}}${TL_DASH}${tenant},s,1)

Regards

Submitted by eeman on Fri, 07/15/2011 Permalink

no the output of 'core show application pickupchan' shows the following

[Syntax]
PickupChan(channel[,channel2[,...][,options]])

so our syntax is correct.. perhaps your version of asterisk is bugged.

Submitted by eeman on Sat, 07/16/2011 Permalink

that not in compliance with asterisk 1.8 or the 'core show application pickupchan' output. Did you bother to test in 1.8 before you made this change? 1.6.1 is dead, 1.6.2 is dead, 1.4 is dead. They no longer exist and are unsupported.Why on earth would you deliberately break the ONLY supported version of asterisk without first checking on this? I know for a fact that comma separated works as I'm the one who did the testing and development of it. Perhaps whoever reported this either did NOT test it with 1.8 or did not bother to make sure they tested it on several versions in the event of a bug in asterisk. When I designed this feature we agreed it was for 1.8 only... its not meant for any other branch.

Its time to stop looking backwards at unsupported branches. If someone wants to use it they need to upgrade to 1.8. You certainly should not be breaking the UI for everyone actually using the only supported branch in existence. That's a bit like expecting Toyota to magically make your 2005 Prius magically become a plug-in hybrid. Sure theyre the same make of car but the extra batteries and the plug-in outlet arent going to suddenly appear just because the new models have that feature.

Submitted by thirdlane on Sat, 07/16/2011 Permalink

good point Erik, i think we may have to make this dependent on Asterisk version

Submitted by eeman on Sat, 07/16/2011 Permalink

meanwhile I am creating a Jira issue with digium to either stop accepting the ampersand or to change their documentation because there can't be a conflict. Even the 1.6 code says use a comma which we know isn't working.

Submitted by eeman on Sat, 07/16/2011 Permalink

ok, in asterisk 1.8.5 they're using the same channel separator that they use in Pickup() (its the same merged file now... app_directed_pickup.c)

while (!ast_strlen_zero(args.channel) && (pickup = strsep(&args.channel, "&")))

stand by for me to unleash on digium for screwing up their documentation again and making a change mid branch.

Submitted by eeman on Sat, 07/16/2011 Permalink

Hold up on your modification to check asterisk versions...

Im trying to patch their app_directed_pickup.c but they're already using the comma as an argument separator and then sending the string to a second parser to separate channels. Its probably better to hold off and see what the hell digium is going to do now that I've bugged it. The function they use to separate arguments is a common shared function. If you follow the philosophy of taking the path of least resistance then theres a strong change that digium will decide its far easier to change the syntax output of the documentation than it is to change the rest of the code.

Submitted by eeman on Sat, 07/16/2011 Permalink

OK check this out.. apply this patch and run 'core show application pickupchan' .. you tell me which way you think digium is going to vote?

diff -ur asterisk-1.8.5.0-old/apps/app_directed_pickup.c asterisk-1.8.5.0/apps/app_directed_pickup.c
--- asterisk-1.8.5.0-old/apps/app_directed_pickup.c 2011-06-09 12:31:53.000000000 -0400
+++ asterisk-1.8.5.0/apps/app_directed_pickup.c 2011-07-16 19:55:54.000000000 -0400
@@ -76,7 +76,7 @@

Pickup a ringing channel.

-
+

Submitted by georgen on Wed, 04/04/2012 Permalink

Hi

Im new to asterisk (and TL for that matter), though i have about 15 years multi-vendor experience in voice. I have been spending the past few weeks evaluating TL (6.1.1.11 dist) in the hopes of getting it to production. I have read several threads relating to difficulties with the pickup group feature. I apologise in advance if this debate has moved on. Firstly i think this function is fundamental. I have comissioned over 2000 systems and can firmly state that this function holds alot of weight. Please dont tell me that you can use directed call pickup - thats nonsense, group pickup is whats required and it needs to work perfectly.

My question is related to the script 'tl-pickupgroup-pickup'. From what i have seen, it seems that the pickupchan() application will not work with consistency if the extension calling this application is also defined as a member of the pickup group. in other words pickupchan() wont work (all the time) if one of its arguments is the same channel that it was being called on.

Whats TL's position on this script? from what i can tell (correct me if im wrong) it is the only way bywhich to setup multiple pickup groups under the same tenancy.

Submitted by eeman on Wed, 04/04/2012 Permalink

its the only way to have _any_ pickup groups in multi-tenant. the sip.conf entry of pickupchan is limited in such a way that it is destructive to MTE and creates lots of errors once you've created the 63rd unique tenant.

from my testing I didnt run into a problem where SIP/101-tenant were to execute

exten => s,1,PickupChan(SIP/101-tenant&SIP/102-tenant&SIP/103-tenant&SIP/104-tenant)

have you checked all versions of asterisk to rule out version-specific bugs? what version of asterisk are you using?

Submitted by georgen on Wed, 04/04/2012 Permalink

Hi Erik

Asterisk version is 1.8.7.1 PBX Manager is 6.1.1.11, perhaps i should be doing my testing on the latest TL distribution.

Its interesting that you are using the '&' instead of a coma between channels. PBX Manager 6.1.1.11 builds the pickup group with PickupChan() having coma seperated arguments. Maybe thats making the difference. I will try editing the code and advise if it has made any difference.

Relating to the sip.conf group pickup parameters. if you were to manually edit these parameters (ie. pickupgroup= and callgroup= ) PBX Manager would just overwrite your modifications next time you reloaded (which is what id expect it to do).

Submitted by eeman on Wed, 04/04/2012 Permalink

the comma was a coding problem in asterisk. It didnt actually work so I submitted a patch change to fix it. 6.1.1.12 definitely writes the dialplan to include the comas.

you do not want to use pickupgroup and callgroup.. its hard coded to be 0 - 63. Even if you left it at 1 per tenant based on tenant index number, the 63rd tenant ID would be the last time you could use it. If you consider most people waste the first 5 or 6 tenant id's testing the creation and deletion of tenants, its not a good solution for MTE.

Submitted by georgen on Thu, 04/05/2012 Permalink

ok did some testing (still using the same versions as indicated previously). Setup three extensions 201,202 and 203.

Call placed from 202 to 203. '*80' was dialed from extension 201 which invokes tl-pickupgroup-pickup script.

When the described test is conducted with the following in pickupgroups.include as built by PBX Manager:

[pickup0-thirdlane]
exten => s,1,PickupChan(SIP/201-thirdlane,SIP/202-thirdlane,SIP/203-thirdlane)

then call pickup fails and the following appears in the trace:

NOTICE[7398]: app_directed_pickup.c:364 pickupchan_exec: Cannot pickup your own channel SIP/201-thirdlane.

If pickupgroups.include is modified as follows:

[pickup0-thirdlane]
exten => s,1,PickupChan(SIP/201-thirdlane&SIP/202-thirdlane&SIP/203-thirdlane)

then pickup will work everytime (for any call scenario involving 201,201 and 203).

Submitted by eeman on Thu, 04/05/2012 Permalink

So welcome to 7/16/2011. If you finish reading this whole thread you might catch up to present day :). This is not an ongoing problem. Do some updates. :-)

Submitted by georgen on Mon, 04/09/2012 Permalink

Im glad to hear that its not an ongoing issue, however i upgraded to asterisk 1.8.11.0 and i still get the same outcome as described in my previous post (Fri, 04/06/2012 - 08:12 ). TL MTE version is 6.1.1.11

i.e NOTICE[28127]: app_directed_pickup.c:363 pickupchan_exec: Cannot pickup your own channel SIP/201-thirdlane.

pickupgroups.include
[pickup0-thirdlane]
exten => s,1,PickupChan(SIP/201-thirdlane,SIP/202-thirdlane,SIP/203-thirdlane)

any ideas?

Submitted by eeman on Tue, 04/10/2012 Permalink

your doing something terribly terribly wrong.. is your license up to date? You should probably just hire me to fix this for you.. the amount of time its not been working would justify the expense by now, I would suspect.