-
-
Save anpel/a6cdffea7dc9d85bfe1885f1fb40f980 to your computer and use it in GitHub Desktop.
/** | |
* Once this scipt is executed it will connect to the local port you have assigned to | |
* Asterisk (default: 5038) and send an authentication request. If successfull, it will | |
* send a second request to originate your call. | |
* | |
* The internal SIP line $internalPhoneline will be dialed, and when picked up the | |
* $target phone will be dialed using your outbound calls context ($context). | |
* | |
* Of course, you can modify the commands sent to the asterisk manager interface to suit your needs. | |
* you can find more about the available options at: | |
* | |
* http://www.voip-info.org/wiki/view/Asterisk+manager+API | |
* http://www.voip-info.org/wiki/view/Asterisk+Manager+API+Action+Originate | |
* | |
* Hope this helps! | |
* | |
* Licence: | |
* | |
* This program is free software: you can redistribute it and/or modify | |
* it under the terms of the GNU General Public License as published by | |
* the Free Software Foundation, either version 3 of the License, or | |
* (at your option) any later version. | |
* | |
* This program is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
* GNU General Public License for more details. | |
* | |
* You should have received a copy of the GNU General Public License | |
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |
*/ | |
<?php | |
// Replace with your port if not using the default. | |
// If unsure check /etc/asterisk/manager.conf under [general]; | |
$port = 5038; | |
// Replace with your username. You can find it in /etc/asterisk/manager.conf. | |
// If unsure look for a user with "originate" permissions, or create one as | |
// shown at http://www.voip-info.org/wiki/view/Asterisk+config+manager.conf. | |
$username = "user"; | |
// Replace with your password (refered to as "secret" in /etc/asterisk/manager.conf) | |
$password = "pass"; | |
// Internal phone line to call from | |
$internalPhoneline = "203"; | |
// Context for outbound calls. See /etc/asterisk/extensions.conf if unsure. | |
$context = "context"; | |
$socket = stream_socket_client("tcp://127.0.0.1:$port"); | |
if($socket) | |
{ | |
echo "Connected to socket, sending authentication request.\n"; | |
// Prepare authentication request | |
$authenticationRequest = "Action: Login\r\n"; | |
$authenticationRequest .= "Username: $username\r\n"; | |
$authenticationRequest .= "Secret: $password\r\n"; | |
$authenticationRequest .= "Events: off\r\n\r\n"; | |
// Send authentication request | |
$authenticate = stream_socket_sendto($socket, $authenticationRequest); | |
if($authenticate > 0) | |
{ | |
// Wait for server response | |
usleep(200000); | |
// Read server response | |
$authenticateResponse = fread($socket, 4096); | |
// Check if authentication was successful | |
if(strpos($authenticateResponse, 'Success') !== false) | |
{ | |
echo "Authenticated to Asterisk Manager Inteface. Initiating call.\n"; | |
// Prepare originate request | |
$originateRequest = "Action: Originate\r\n"; | |
$originateRequest .= "Channel: SIP/$internalPhoneline\r\n"; | |
$originateRequest .= "Callerid: Click 2 Call\r\n"; | |
$originateRequest .= "Exten: $target\r\n"; | |
$originateRequest .= "Context: $context\r\n"; | |
$originateRequest .= "Priority: 1\r\n"; | |
$originateRequest .= "Async: yes\r\n\r\n"; | |
// Send originate request | |
$originate = stream_socket_sendto($socket, $originateRequest); | |
if($originate > 0) | |
{ | |
// Wait for server response | |
usleep(200000); | |
// Read server response | |
$originateResponse = fread($socket, 4096); | |
// Check if originate was successful | |
if(strpos($originateResponse, 'Success') !== false) | |
{ | |
echo "Call initiated, dialing."; | |
} else { | |
echo "Could not initiate call.\n"; | |
} | |
} else { | |
echo "Could not write call initiation request to socket.\n"; | |
} | |
} else { | |
echo "Could not authenticate to Asterisk Manager Interface.\n"; | |
} | |
} else { | |
echo "Could not write authentication request to socket.\n"; | |
} | |
} else { | |
echo "Unable to connect to socket."; | |
} |
@Telegramsrv try to put this behin originate requests definition: $originateRequest .= "Variable: CALLERID(number)=$extension\r\n";
where $extension is your country extension (USA is extension 0001 e.g.)
If this failed, try to change $originateRequest .= "Callerid: Click 2 Call\r\n";
for $originateRequest .= "Callerid: $target\r\n";
where $target is the number.
Good Luck!
How can i make a call on a toll free IVR number and and send input to that ivr.
hello
i have to test this script this work as well on asterisk 1.8 but once im trying with asterisk 16 its not work, please help me.
Thank you for your script. It's working in Asterisk 16.9.0. God bless you.
Thank you for your script. It's working in Asterisk 16.9.0. God bless you.
Have not tested it in a while, good to know it still works.
Thank you and have a great day.
Thanks for the code, This snippet is working fine to make a cal on one side. I am not able to hear any sound while receiving the call. Also after going through Asterisk server documentation I found that I need to get the response on receiving a call. Based on the call 'answered' and the related response, I need to originate the same call function to connect dialer. This can only help to make the call two directional,
Please advice
Hi Anpel!
Im creating an Incoming call pop up window for the CRM that I created. I successfully manage to view the AMI to my server using telnet. Now my problem is how can I listen to the pbx incoming events. I want to hook every time there are incoming call then I will push a notification to my users so they can see the information of the caller.
Thanks,
Sigmund
@sigmund-avila It's been a while since I last worked with Asterisk so I can't be too helpful.
Seems like someone was trying to do the same here: https://community.asterisk.org/t/solved-trigger-page-on-incoming-call/38767.
I see some code samples and the issue is marked as solved, so I would start with that.
Good luck!
Andreas
Well, I solved myself, i need to put $context = "default";
in the code.
Well, I solved myself, i need to put
$context = "default";
in the code.
Hello, please for calls coming from outside to Asterisk. What should we put in context ?
Well, I solved myself, i need to put
$context = "default";
in the code.Hello, please for calls coming from outside to Asterisk. What should we put in context ?
Really don't know, we only use for only internal calls.
Hi
Test $context = "from-internal";
or $context = "from-trunk";
it's worked for me
;-)
Could not initiate call. why???
