Asterisk Call Transfer to Playback then resume back call - asterisk

Here is my scenario i want to achieve, I have do outbound call to a number, after conversation i need to transfer the call to play a message for callee. After the message end, the call will route back to caller continue conversation.
How am i going to achieve this. using method MeetMe? or others?

Dialplan should be something like this:
[default]
exten => _10XX,1,Dial(SIP/${EXTEN})
After the conversation if the user transfer the call to "Music" extensions: (from sip client i guess):
[Music]
exten => _X.,n,Playback(your_play_file)
exten => _X.,n,Dial(SIP/${EXTEN})
better if you can manipulate using AGI to get/set the user was talking to the caller.
alternate:
you can use Call Parking for this.

Related

Recording Normal Calls and Conference calls in Asterisk

Set up Asterisk 13.1 on Ubuntu 16.04,Calls are Working fine as well as conference calls.However I have two Question regarding the recording of calls in asterisk.
This is the extensions.conf.
[default]
exten => 1000,1,MixMonitor(${CALLERID(num)}-${STRFTIME(|EST5EDT|%m%d%Y-%H%M%S)}.gsm)
same => n,Dial(SIP/1000)
exten => 1001,1,MixMonitor(${CALLERID(num)}-${STRFTIME(|EST5EDT|%m%d%Y-%H%M%S)}.gsm)
same => n,Dial(SIP/1001)
exten => 100,1,Answer()
exten => 100,n,Authenticate(234)
same => n,MixMonitor(${CALLERID(num)}-${STRFTIME(|EST5EDT|%m%d%Y-%H%M%S)}.gsm)
same => n,ConfBridge(1234)
And this is confbridge.conf
conf => 1234
[1234]
record_conference = yes
1)Is it necessary to define MixMonitor for every call(As I have done above for user 1000 and 1001) ,or is there a possibility where you can define it once and all calls in your asterisk server get recorded.
2)When the Conference call is recorded ,suppose if there are two users in the conf room,there are two audio files generated instead of one,What changes do I make so theres is only one recorded audio file of the full conference?
In asterisk it is nessesary do any action you want DO.
In your case you can use mixmonitor command in every dialplan, use pattern to do that command for large list, use external macro or gosub function and call it for calls you want be recorded.
For conference you can start enother call with mixmon(third call) using Originate or you can use internal recording.
For ANY record you can have Monitor(two files for each side of call) or mixmonitor(same, but 1st party in left channel, 2nd party in right channel, so file is single).
So if you have 2 files, you just have non-mixed variant. Consult conference room options for mixed version.

channel name in asterisk

I'm using Asterisk 11. I have a problem to get channel name when I attempt to call-out.
Usually, I can get the channel name when the called party picks up his/her phone. But now, I would like to get the channel name right after I dial out. I can see it on the screen like this:
Called SIP/7146991234#64.195.139.88
- SIP/64.195.139.88-00000001 is ringing
-- SIP/64.195.139.88-00000001 is making progress passing it to SIP/8001-00000000
I know that the channel name is : "SIP/64.195.139.88-00000001",
but I don't know how to get it from coding or any other ways.
Please help me.
Thank you very much!
You can get the name of the outbound channel in Asterisk 11 using a Pre-Dial Handler on the called channel.
[default]
exten => pre_dial_handler,1,NoOp()
same => n,Verbose(1, Channel is ${CHANNEL})
same => n,Return()
exten => dial_example,1,NoOp()
same => n,Dial(SIP/alice,,b(default^pre_dial_handler^1)
This will execute the subroutine pre_dial_handler on channel SIP/alice-XXXXXXXX, as opposed to whatever channel is actually performing the dial operation. The subroutine is executed on the outbound channel immediately after creation but before any operation is taken on it, such as making a call attempt.
You can't get channel name of outbound channel in dialplan
Reason: it not created yet at that moment.
But you can get it by external application by checking variables BRDIGEDPEERNAME or listnen event.
Also you can get both channels in cmd_dial internal macro(M param)

WaitExten during the call

Scenario:
Asterisk receives incoming call to a DID number
Asterisk forwards incoming call to a mobile number using PSTN termination.
Call is answered on a mobile
Question:
Is there a possibility to transfer call to a different extension during the call ?
yes,but require guru level.
it can be done by writing special application or using conference or using AMI.
probably easy way is conference
Yes. This is very straight forward.
Presuming your DID is 1-234-567-8900 and your moble is 1-987-654-3210:
exten => _12345678900,1,NoOp(Call for DID to Mobile)
same => n, Dial(DAHDI/g1/19876543210,30,t)
same => n, HangUp()
The dial option "t" allows "...the called user to transfer the call by hitting the blind xfer keys (features.conf)"
Further reading: http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial

How to execute a dialplan by asterisk's AMI API?

Couldn't find a specific answer for this. I'm a newbie to asterisk and AMI. I need to auto generate calls using asterisk and pass parameters to an AGI program. Using a call file seems to generate the call first which is not wanted. So, how do I use asterisk AMI API (PHP) to execute a dialplan with AGI in it, by passing all parameters to it? So, the AGI will take over and make the call.
I think in your case, using call files would actually be simpler. Here's why:
The AMI requires you to write networked code, which (if you're a beginner) will be a lot more tricky the building simple text files (Call Files).
Call Files allow you to pass variables to Asterisk that you can use in your dialplan code.
Call Files are extremely simple.
Below is a full example of a simple way to do it using call files. I've tried my best to explain it in the associated comments.
Firstly, let's assume you have some dialplan code that uses variables, and calls an AGI script (which is what I assume you're doing based on your question). That means you'll have code in your extensions.conf file that looks something like:
[test_stuff]
exten => s,1,NoOp(starting test!)
exten => s,n,NoOp(my variable's value is: ${somevar})
exten => s,n,NoOp(my other variable's value is: ${some_other_var})
exten => s,n,AGI(/path/to/my/script.sh,${somevar})
exten => s,n,NoOp(i just ran an AGI script and passed it a command line argument!)
exten => s,n,Hangup()
Below is a call file that will:
Need to be created in some temporary directory (maybe /tmp/).
Once it has been saved, you can run it by moving it to /var/spool/asterisk/outgoing/ (eg: mv /tmp/blah.call /var/spool/asterisk/outgoing/).
The call file will the immediately dial outbound to the phone number 818-222-3333.
Once the person at 818-222-3333 picks up the call, Asterisk will immediately start executing your [test_stuff] dialplan code, and will have the variables set in your call file available to it.
Call file:
Channel: SIP/trunkname/18182223333
Context: test_stuff
Extension: s
Priority: 1
Set: somevar=hithere
Set: some_other_var=woot
Hope that helps!
Your problem can be solved with the help of local channel for example
In call file use Local/1812222222#test_stuff as channels while using following dialplan
[test_stuff]
exten => _X.,1,NoOp(starting test!)
exten => _X.,n,Set(phone=${EXTEN})
exten => _X.,n,AGI(/path/to/my/billing,${phone},${other_variables_account_etc..})
exten => _X.,n,Dial(SIP/trunkName/${phone})
You can use this method with both interfaces AMI or .call file

Playing a music file before call connects using Asterisk

I have an asterisk server. I use the server to connect an incoming call to another extension based on a few key presses. There is a certain time lag (after the key/extension press and before the call connects). How can I play a small music file (of my choice) in this period? There are some constraints that come to my mind:
The music should play only as long as the call does not connect. So, the method used should be a non-locking one.
Any help on this is most welcome.
Thanks,
Sriram
Use the m flag to the Dial application, to play music on hold while the call is connecting.
exten => 9000,1,Noop
exten => 9000,n,Answer
exten => 9000,n,Dial(SIP/device,0,m)
I think Background is your friend (http://www.voip-info.org/wiki/view/Asterisk+cmd+BackGround)

Resources