Ade Vickers wrote: > > > >> -----Original Message----- >> From: [EMAIL PROTECTED] >> [mailto:[EMAIL PROTECTED] On Behalf Of >> Steve Totaro >> Sent: 13 December 2007 14:35 >> To: Asterisk Users Mailing List - Non-Commercial Discussion >> Subject: Re: [asterisk-users] How do I do this? >> >> >> ----- Original Message ----- >> From: "Ade Vickers" <[EMAIL PROTECTED]> >> To: "'Asterisk Users Mailing List - Non-Commercial Discussion'" >> <[email protected]> >> Sent: Thursday, December 13, 2007 7:49 AM >> Subject: [asterisk-users] How do I do this? >> >> >> >>> I have 2 asterisk servers - serverA and serverC - connected via IAX2. >>> >>> On serverA, I have a "telemarketer hold" extension which, >>> >> if I transfer a >> >>> caller into it, loops around playing music & "please wait" >>> >> messages, until >> >>> they give up & hang up the phone. >>> >>> Also on serverA, I have a custom devstate, which lights a >>> >> lamp on a phone >> >>> connected to serverA, which tells me if someone is >>> >> currently held in that >> >>> loop. When they hang up, the devstate is re-set & the lamp goes out. >>> >>> On serverC, I have a similar devstate, and a couple of >>> >> extensions - one to >> >>> turn the lamp on & one to turn it off. >>> >>> What happens is this: >>> >>> 1) A call arrives @ Asterisk, and calls a phone on serverA, >>> >> and a phone on >> >>> serverC. >>> 2) I answer on serverC, determine it's a telemarketer, and >>> >> transfer to the >> >>> "telemarketer hold" extension on serverA >>> 3) The call enters the loop, and the devstate is set on >>> >> serverA. As it >> >>> enters the loop, it calls the "turn on" extension on >>> >> serverC, which sets >> >>> the >>> serverC devstate, and hangs up with an "all extensions are >>> >> busy" response. >> >>> 4) The call, then, stays parked on serverA until the caller >>> >> hangs up. >> >>> 5) The "h" extension on serverA detects the hangup, and re-sets the >>> serverA >>> devstate. >>> 6) Simultaneously, it calls the "turn off" extension on >>> >> serverC, which >> >>> re-sets the devstate & returns a "all extensions are busy" response. >>> 7) serverA then hangs up the call 'officially' by calling Hangup() >>> >>> Unfortunately: Step 6 doesn't do anything on serverC... you >>> >> can see it >> >>> being >>> executed on serverA, but the call never arrives at serverC. >>> >>> I'm guessing this is because the caller has already hung up; so, in >>> effect, >>> there's no call to transfer... >>> >>> My question, then, is how to get Asterisk to generate a >>> >> "new" call, to >> >>> tell >>> serverC to switch off it's lamp? >>> >>> >> Use the h exten? Would you mind sharing more details about >> your setup such >> as the dialplan or/or apps you are using? I guess you really hate >> telemarketers ;-) >> > > Hi Steve, > > It's not just telemarketers; I find it's a useful "dumping ground" for any > caller I don't particularly want to speak to ;) > > OK: There are 2 servers involved: > > serverA > - Located in the UK, has a connection to a POTS line via an AX100P card. > - Handles any 5xxx extension locally, plus a couple of others > - Talks to serverC via IAX2 channel > - Running Asterisk v1.4.5 + custom devstate patch > > serverC > - Located in Spain, has only an internet connection > - Handles any 62xx extension locally, plus the special "teledeath_on" and > "teledeath_off" extensions > - Talks to serverA via IAX2 channel > - Running Asterisk v1.4.11 + custom devstate patch > > > > So; in serverA, the following bits of the dialplan are relevant: > > [default] > exten => 5555,hint,custom:telepark > > ; > ---------------------------------------------------------------------------- > - > ; When an internal phone dials, this section defines what happens to the > calls > ; > ---------------------------------------------------------------------------- > - > [internal] > ;other destinations cut from here > > ;Death to telemarketers > exten => 5555,1,Goto,teledeath|s|1 > > [teledeath] > exten => s,1,Answer() > exten => s,2,Set(DEVSTATE(Custom:telepark)=INUSE) > exten => s,3,Dial(IAX2/serverC/teledeath_on) > exten => s,4,WaitMusicOnHold(15) > exten => s,5,Wait(1) > exten => s,6,Playback(pls-hold-while-try) > exten => s,7,Wait(0.25) > exten => s,8,Goto,4 > > exten => h,1,Set(DEVSTATE(Custom:telepark)=NOT_INUSE) > exten => h,n,Dial(IAX2/serverC/teledeath_off) > exten => h,n,Hangup() > > ; If anything goes wrong, quit the loop > exten => i,1,Set(DEVSTATE(Custom:telepark)=NOT_INUSE) > exten => i,n,Dial(IAX2/serverC/teledeath_off) > exten => i,n,Hangup() > > Thus; when I transfer the call to 5555; it jumps into teledeath|s, which > sets the devstate locally; dials the special extension > "IAX2/serverC/teledeath_on" to set the serverC busy lamp; then loops around > music/announcements. > > When the caller hangs up, teledeath|h is executed; turning off the local > lamp & calling "IAX2/serverC/teledeath_off" - which SHOULD turn off the > serverC lamp, but doesn't - because the call never arrives on serverC... > > Here is serverC's extensions.conf file (again, non-pertinent bits removed): > > [default] > exten => 5555,hint,custom:telepark > > [internal] > include => outbound > include => default > > ;Internal phones (local (62xx) & remote (everything else) > exten => _[57]XXX,1,Goto,external_extensions|6000${EXTEN}|1 > > ;Death to telemarketers status marker > exten => teledeath_on,1,Set(DEVSTATE(Custom:telepark)=INUSE) > exten => teledeath_on,n,Set(HANGUPCAUSE=17) > exten => teledeath_on,n,Hangup() > > exten => teledeath_off,1,Set(DEVSTATE(Custom:telepark)=NOT_INUSE) > ;exten => teledeath_off,n,Set(HANGUPCAUSE=17) > ;exten => teledeath_off,n,Hangup() > > [external_extensions] > exten => _6000XXXX,1,Dial(IAX2/serverA/${EXTEN:4},30) > > So, here's what happens on serverA: > > -- Executing [EMAIL PROTECTED]:1] Goto("IAX2/serverC-2", "teledeath|s|1") > in new stack > -- Goto (teledeath,s,1) > -- Executing [EMAIL PROTECTED]:1] Answer("IAX2/serverC-2", "") in new > stack > -- Executing [EMAIL PROTECTED]:2] Set("IAX2/serverC-2", > "DEVSTATE(Custom:telepark)=INUSE") in new stack > Extension Changed 5555 new state InUse for Notify User 5100 > -- Executing [EMAIL PROTECTED]:3] Dial("IAX2/serverC-2", > "IAX2/serverC/teledeath_on") in new stack > -- Called serverC/teledeath_on > -- Call accepted by 88.xxx.xxx.xxx (format ulaw) > -- Format for call is ulaw > -- Hungup 'IAX2/serverC-5' > -- No one is available to answer at this time (1:0/0/0) > -- Executing [EMAIL PROTECTED]:4] WaitMusicOnHold("IAX2/serverC-2", "15") > in > new stack > -- Started music on hold, class 'default', on channel 'IAX2/serverC-2' > -- Channel 'IAX2/serverC-2' unable to transfer > -- Hungup 'IAX2/serverC-8' > == Spawn extension (sjs, s, 3) exited non-zero on 'Zap/1-1' > -- Executing [EMAIL PROTECTED]:1] Hangup("Zap/1-1", "") in new stack > == Spawn extension (sjs, h, 1) exited non-zero on 'Zap/1-1' > -- Hungup 'Zap/1-1' > -- Stopped music on hold on IAX2/serverC-2 > == Spawn extension (teledeath, s, 4) exited non-zero on 'IAX2/serverC-2' > -- Executing [EMAIL PROTECTED]:1] Set("IAX2/serverC-2", > "DEVSTATE(Custom:telepark)=NOT_INUSE") in new stack > Extension Changed 5555 new state Idle for Notify User 5100 > -- Executing [EMAIL PROTECTED]:2] Dial("IAX2/serverC-2", > "IAX2/serverC/teledeath_off") in new stack > -- Called serverC/teledeath_off > -- Hungup 'IAX2/serverC-4' > == Spawn extension (teledeath, h, 2) exited non-zero on 'IAX2/serverC-2' > -- Hungup 'IAX2/serverC-2' > > and, on serverC: > > == Spawn extension (internal, 5555, 0) exited non-zero on 'IAX2/serverC-5' > -- Executing [EMAIL PROTECTED]:1] Goto("IAX2/serverC-5", > "external_extensions|60005555|1") in new stack > -- Goto (external_extensions,60005555,1) > -- Executing [EMAIL PROTECTED]:1] Dial("IAX2/serverC-5", > "IAX2/serverA/5555|30") in new stack > -- Called serverA/5555 > -- Call accepted by 87.xxx.xxx.xxx (format ulaw) > -- Format for call is ulaw > -- IAX2/serverA-1 answered IAX2/serverC-5 > -- Accepting AUTHENTICATED call from 87.xxx.xxx.xxx: > > requested format = ulaw, > > requested prefs = (ulaw|alaw|gsm), > > actual format = ulaw, > > host prefs = (ulaw|alaw|gsm), > > priority = mine > -- Executing [EMAIL PROTECTED]:1] Set("IAX2/serverC-2", > "DEVSTATE(Custom:telepark)=INUSE") in new stack > -- Executing [EMAIL PROTECTED]:2] Set("IAX2/serverC-2", > "HANGUPCAUSE=17") in new stack > -- Executing [EMAIL PROTECTED]:3] Hangup("IAX2/serverC-2", "") in > new stack > == Spawn extension (internal, teledeath_on, 3) exited non-zero on > 'IAX2/serverC-2' > -- Hungup 'IAX2/serverC-2' > -- Channel 'IAX2/serverC-5' unable to transfer > -- Channel 'IAX2/serverA-1' unable to transfer > -- Hungup 'IAX2/serverA-1' > == Spawn extension (external_extensions, 60005555, 1) exited non-zero on > 'IAX2/serverC-5' > -- Hungup 'IAX2/serverC-5' > > > > So..... any ideas? > > > Cheers, > Ade. > > I suppose you could create a new context on server C, include it in your internal context, and create an h exten on that box to handle it locally. I am unsure why what you have does not work but I assume the "unable to transfer" is a hint.
Thanks, Steve Totaro _______________________________________________ --Bandwidth and Colocation Provided by http://www.api-digital.com-- asterisk-users mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-users
