Asterisk Click2Call API
- Готовый скрипт для вызовов между extension и внешним номером, а также для запуска любого диалплана и передачи ему параметров. Использовалась библиотека https://github.com/chan-sccp/PAMI это форк самой популярной библиотеки от marcelog/PAMI. Используется потому, что в ней исправлена ошибка при использовании CommandAction. в оригинальной библиотеке она будет выдавать read timeout. Скрипт выдает статус оригинации в json формате и unqueid. техническое задание в конце кода.
ini_set('display_errors', 0);
require __DIR__ . '/vendor/autoload.php';
use PAMI\Client\Impl\ClientImpl;
use PAMI\Listener\IEventListener;
use PAMI\Message\Event\EventMessage;
use PAMI\Message\Action\OriginateAction;
use \PAMI\Message\Event\NewchannelEvent;
class A implements IEventListener
{
public $result;
public function handle(EventMessage $event)
{
if ($event instanceof \PAMI\Message\Event\NewchannelEvent) {
$this->result = $event->getUniqueID();
return $this->result;
}
}
}
$agent = $_GET['agent'];
$extension = $_GET['extension'];
$destination = $_GET['destination'];
while ($agent && $extension) {
echo "No agent and extension possible!";
exit;
}
include "config.php";
$a = new ClientImpl($options);
$a->open();
$ClassA = new A();
$a->registerEventListener($ClassA);
while ($agent && $destination) {
echo "Agent && Destination";
$result = makecallagent($a,$agent,$destination);
$arr = array('success' => false, 'errormsg' => $result);
if ($result === true)
$arr = array('success' => $result,'errormsg' => NULL, 'uniqueid' => $ClassA->result);
echo json_encode($arr);
$a->close();
exit;
}
while ($extension && $destination) {
$result = makecall($a,$extension,$destination);
$arr = array('success' => false, 'errormsg' => $result);
if ($result === true)
$arr = array('success' => $result,'errormsg' => NULL, 'uniqueid' => $ClassA->result);
echo json_encode($arr);
$a->close();
exit;
}
echo "No extension\agent and destination correctly passed";
exit;
function makecall($a,$source,$number) {
$originateMsg = new OriginateAction("PJSIP/$source");
$originateMsg->setContext('from-internal');
$originateMsg->setPriority('1');
$originateMsg->setExtension("$number");
$res = $a->send($originateMsg);
if ($res->isSuccess()) return true; //return tru if originating success
return $res->getKeys()['message']; //otherwise return error message
}
function makecallagent($a,$source,$number) {
$originateMsg = new OriginateAction("Local/28@queuemetrics");
$originateMsg->setContext('queuemetrics');
$originateMsg->setPriority('1');
$originateMsg->setVariable('AGENTCODE',$source);
$originateMsg->setVariable('QDIALER_QUEUE','outqueue');
$originateMsg->setVariable('EXTTODIAL',$number);
$originateMsg->setExtension("28");
$res = $a->send($originateMsg);
if ($res->isSuccess()) return true; //return tru if originating success
return $res->getKeys()['message']; //otherwise return error message
}
| Posted in Asterisk, Без рубрики, Готовые решения | No Comments »