понедельник, 28 октября 2013 г.

Asterisk звонок с сайта

Сразу хочу заметить, что здесь я буду описывать не звонок посетителя с сайта, скажем менеджеру, а наоборот.
Итак имеем: некая, самописная CRM, написаная на PHP и выводящая список клиентов с номерами телефонов. Периодически менеджеру нужно обзванивать клиентов.
Задача: сделать процесс набора номера быстрым и простым. То есть, менеджер находит нужного клиента, кликает по кнопке "Позвонить" на его телефоне (на телефоне менеджера) раздаётся звонок, он снимает трубку, после чего происходит соединение с клиентом.
Нельзя сказать, что набор номера из 11 цифр, что то сложное и занимает много времени, но если есть возможность от этого избавится, то почему бы этого не сделать. К тому же снижается не только время на набор, но и вероятность ошибки набора номера менеджером.
Asterisk  у меня уже есть, настроен и работает. Первое что нам нужно сделать это создать пользователя в Asterisk от имени которого мы будем к нему подключаться и совершать звонки.
Для этого на компьютере, где установлен Asterisk, в файл /etc/asterisk/manager.conf необходимо добавить следующую запись:


[asuser]
secret = PASSWORD
deny=0.0.0.0/0.0.0.0
permit=0.0.0.0/0.0.0.0
read = call,cdr,user,config
write = call,originate,reporting,command,system

где asuser - имя пользователя
PASSWORD - пароль для этого пользователя.
Дальше указаны параметры доступа и права которые этот пользователь будет иметь.
Скажем, можно разрешить доступ только с определённого адреса (permit=192.168.23.11/255.255.255.255) или подсети (permit=192.168.23.0/255.255.255.0)
Изменения должны вступить в силу сами, т.к. в документации написано, что файл manager.conf перечитывается при каждой попытке подключения.
Я признаться, этого не проверил, а перезапустил модуль manager командой:

sudo asterisk -rx "manager reload"

На этом и заканчивается настройка Asterisk'a. Теперь небходимо скачать php-скрипт который позволит нам соединятся с Asterisk и отдавать ему необходимые команды. В принципе подобных расширений для работы с Asterisk  под различные язаки программирования имеется достаточно, можете ознакомиться со списком на сайте voip-info.org. Я выбрал Asterisk PHP CLI, причиной тому скорей всего послужило то, что он стоял в начале списка на указанном выше сайте, немного с ним повозился, и он мне понравился. Скачать можно отсюда.
В архиве два файла telnet.php и index.php. index.php по сути не нужен.
Остаётся только подключить файл telnet.php к коду звонилки и можно работать:


require_once "telnet.php";
$ip="ip-адрес asterisk";
$usr="имя пользователя которого мы создали выше";
$pass="пароль";
        //команда, которой будем звонить
$command="channel originate SIP/".$_POST['from']." extension ".$_POST['to']."@from-internal";

function ast_exec($com,$ip, $usr, $pass) {
    $telnet = new PHPTelnet();
    $result = $telnet->Connect($ip, $usr, $pass);
    if ($result == 0) {
        $telnet->DoCommand($com, $result);
        $telnet->Disconnect();
        return $result;
    }
    return 'Error!';
}
ast_exec($command,$ip, $usr, $pass);
?>

Вот такой не хитрый скрипт. Конечно это всего лишь пример, его ещё можно и нужно обвесить проверками и чистилками, но думаю каждый сможет это сделать сам, так как ему нравится. Обвес на стороне клиента я сделал простой, по клику ajax'ом отсылаются необходимые данные и происходит вызов.
Таким способом, мы получаем доступ к CLI Asteriska и можем напридумывать ещё много интересных вещей.

P.S. Хотел написать больше, но что то не сработало.

1 комментарий :

  1. Добрый день !

    по клику ajax'ом отсылаются необходимые данные и происходит вызов.

    Какие именно данные должны отсылаться ?

    ОтветитьУдалить