[asterisk-users] Multiple dial macros at the same time

Dovid B asteriskusers at dovid.net
Tue Oct 31 03:26:25 MST 2006


When user A is bridged with the client (right before it is done) set a 
variable that the call was taken, this way when he presses 1 to accpet the 
system checks to see what the value is, if its in taken mode he gets the 
message and then gets hung up on.

----- Original Message ----- 
From: "Graham Mainwaring" <graham at mhn.org>
To: <asterisk-users at lists.digium.com>
Sent: Monday, October 30, 2006 3:38 AM
Subject: [asterisk-users] Multiple dial macros at the same time


>I am setting up an after-hours on-call system. Someone calls in and 
>requests service, and while they listen to music on hold, we dial out to 
>several people's cell phones and home phones. We don't know if they will be 
>answered by the employee, or by voicemail or a spouse/relative/child/pet. 
>So we play a message that says "press 1 to accept the call" and ask 
>employees to train their spouse/relative/child/pets not to press 1.
>
> The following extract from my dialplan shows how I have this feature set 
> up. This is with Asterisk 1.2.13.
>
>  [macro-screen]
>  exten => s,1,Set(MACRO_RESULT=CONTINUE)
>  exten => s,2,Read(ACCEPT|press-1-to-accept|1|skip|3|1)
>  exten => s,3,GotoIf($[${ACCEPT}=1]?5:4)
>  exten => s,4,MacroExit
>  exten => s,5,Set(MACRO_RESULT=)
>  exten => s,6,Playback(please-say-hello)
>
>  [menu]
>  exten => _FOLS1NXXNXXXXXX,1,Dial(SIP/${EXTEN:4}@pstn,20,oM(screen))
>  exten => s,1,Playback(welcome)
>  exten => s,2,Dial(LOCAL/FOLS19195551000&LOCAL/FOLS19195552000,,tm)
>  exten => s,3,Voicemail(u301)
>  exten => s,4,Hangup
>
> In order for this to work, I needed the ability to restore MACRO_RESULT 
> back to an unset state. For now I just hacked the Set application so that 
> after removing the variable from the context, it only re-creates it if the 
> value provided is greater than zero length. In the future I will probably 
> write an UnSet application to handle this more gracefully, unless someone 
> knows a better way to unset a variable.
>
> This all works fine, with one small problem that is driving me batty. I 
> would appreciate any insight or ideas on how to solve this. Here's the 
> scenario:
>
>  1. Caller dials the number and hears the welcome message,
>     then music on hold.
>  2. Simultaneous calls are made to Employee A at 555-1000
>     and Employee B at 555-2000 (per above).
>  3. Both of them answer the phone.
>  4. Employee A presses one and hears "you will now be connected,
>     please say hello to the caller."
>  5. Employee A is bridged to the caller, says hello, and begins
>     working with them.
>  6. A few seconds later, the Employee B also presses 1. He also
>     hears "you will now be connected."
>  7. Employee B fails to bridge, and is hung up on.
>
> The problem is, these are pretty urgent calls and employees are highly 
> motivated to make sure they get answered. Employee B doesn't know whether 
> the call dropped because someone else got it, or because of a phone system 
> problem of some sort. He is now obligated to figure out what's up with the 
> call and make sure someone got it. What I want instead is for Employee B 
> to hear an alternate message that says "someone else got the call." This 
> gives positive confirmation that it's not his problem, so he can roll over 
> and go back to sleep.
>
> I can see two ways of doing this.
>
> 1. Write a function called BridgedChannel that takes a channel ID and 
> returns its bridge peer channel ID, if any. This would allow me to set a 
> variable __PARENTCHANNEL with the channel ID of the incoming call, before 
> the Dial command executes. The macro, at priority 6, can then check 
> BridgedChannel(${__PARENTCHANNEL}). If it has a value then the call is 
> already bridged and we can tell the employee not to worry.
>
> 2. Have a MySQL database with a single table with two fields, varchar 
> channel-ID and boolean answered. When the call starts do update table set 
> answered=false where channel-ID=${__PARENTCHANNEL}. When an employee dials 
> 1, retrieve the value of answered for __PARENTCHANNEL and also set it to 
> true in a single transaction. If the returned value was false, tell them 
> to answer the call and bridge; if the returned value was true, tell them 
> to go back to sleep and hang up.
>
> Solution #1 requires me to write a whole new function, and solution #2 
> requires a MySQL database, which is pretty big dependency for such a 
> simple function.
>
> Does anyone see a simpler way of doing this, or have any ideas for other 
> avenues to pursue?
>
> Thanks in advance,
>
> -Graham
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com --
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>   http://lists.digium.com/mailman/listinfo/asterisk-users
> 




More information about the asterisk-users mailing list