Задача

Создать кнопку «Перезвоните мне» на сайте, с максимальной интеграцией во FreePBX.

Решение

Для примера возьмем статью https://asterisk-pbx.ru/wiki/artikle/asterisk_web_callback. Принцип работы этой реализации заключается в том, что php скрипт генерирует (Originate) вызов. Первым делом отправляет вызов по каналу Channel. После того, как соединение установлено (вызов принят оператором), осуществляется внешний вызов на номер Exten. На практике это происходит так: Пользователь нажимает на кнопку «Перезвоните мне», осуществляется звонок Оператору. Оператор поднял трубку — осуществляется звонок Пользователю. Такая реализация отлично работает за исключением того, что нет возможности при помощи FreePBX управлять вызовами.



Мой вариант — осуществлять вызов по принципу модуля «Обратный звонок». Таким образом мы сделаем «точку» входа во FreePBX в виде Приветствия, после чего, будем полностью управлять вызовом средствами web-интерфейса.



Первым делом нужно настроить пользователя AMI (Asterisk Manager Interface). Можно настроить по этой ссылке: https://wiki.merionet.ru/ip-telephoniya/13/nastrojka-ami-v-freepbx-13/.

Задаем пользователю права:

read = system,call,log,verbose,command,agent,user,config,originate
write = system,call,log,verbose,command,agent,user,config,originate

Приступаем к созданию php скрипта на Web-сервере для совершения вызова:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
$strNumber = $_POST['txtphonenumber'];
 
$strName = $_POST['txtname'];
 
$strHost = "127.0.0.1";
 
$strUser = "callback";
 
$strSecret = "qwerty";
 
$strChannel = "Local/$strNumber@from-internal";
 
$strContext = "app-announcement-47";
 
$strExten = "s";
 
$strPriority = "1";
 
$strWaitTime = "60";
 
$strMaxRetry = "1";
 
$strCallerId = "$strName <$strNumber>";
 
$length = strlen($strNumber);
 
if ($length == 10 && is_numeric($strNumber))
{
$oSocket = fsockopen($strHost, 5038, $errnum, $errdesc) or die("Connection to host failed");
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Events: off\r\n");
fputs($oSocket, "Username: $strUser\r\n");
fputs($oSocket, "Secret: $strSecret\r\n\r\n");
fputs($oSocket, "Action: originate\r\n");
fputs($oSocket, "Channel: $strChannel\r\n");
fputs($oSocket, "WaitTime: $strWaitTime\r\n");
fputs($oSocket, "CallerId: $strCallerId\r\n");
fputs($oSocket, "Exten: $strExten\r\n");
fputs($oSocket, "Context: $strContext\r\n");
fputs($oSocket, "Priority: $strPriority\r\n\r\n");
fputs($oSocket, "Action: Logoff\r\n\r\n");
sleep (1);
fclose($oSocket);
 
?>
<p>
<table width="300" border="1" bordercolor="#630000" cellpadding="3" cellspacing="0">
    <tr><td>
    <font size="2" face="verdana,georgia" color="#630000">Производится вызов. Подождите пока Ваш телефон зазвонит!<br>Если телефон не позвонил в течении минуты, попробуйте ещё раз.<br><a href="<? echo $_SERVER['PHP_SELF'] ?>">Ещё раз</a></font>
    </td></tr>
</table>
</p>
<?
}
else
{
?>
<p>
<table width="300" border="1" bordercolor="#630000" cellpadding="3" cellspacing="0">
    <tr><td>
    <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post">
                <font size="2" face="verdana,arial,georgia" color="#630000">Введите имя.</font>
        <input type="text" size="20" maxlength="10" name="txtname">
        </br>
                <font size="2" face="verdana,arial,georgia" color="#630000">Введите Ваш номер ( 0XXXXXXXXX ).</font>
                <input type="text" size="20" maxlength="10" name="txtphonenumber">
                </br>
                <input type="submit" value="Позвонить!">
    </form>
    </td></tr>
</table>
</p>
<?
}
?>

где
$strHost = "127.0.0.1"; — адрес Asterisk. Если Asterisk находится за NAT, нужно делать проброс 5038 порта
$strUser = "callback"; — имя пользователя AMI
$strSecret = "qwerty"; — пароль пользователя AMI
$strContext = "app-announcement-47"; — название Приветствия, созданного в FreePBX («точка» входа в FreePBX)
Список названий приветствий, созданных в FreePBX можно найти в файле /etc/asterisk/extensions_additional.conf сервера Asterisk.
Принцип работы: пользователь нажимает на кнопку «Перезвоните мне», после чего, ему поступает звонок. Пользователь берет трубку, и попадает в Приветствие FreePBX. Далее направляйте его куда угодно :).

Похожие статьи:

Bitrix24 cоздание лида через API
Задача - создание лида через API запрос к облачному Bitrix24. Для решения этой задачи, будем использовать webhook. Для создания webhook переходи на портале Bitrix24 по пункту "Дополнения"→"Вебхуки" Нажимаем на кнопку "создать вебхук", из выпадающего списка выбираем "Входящий вебхук". На следующем окне нужно ввести имя вебхука ...
Мониторинг уровня сигнала SIM-карт в Openvox через Zabbix
При переходе по ссылке http://IP_OPENVOX/service?action=get_gsminfo, или http://IP_OPENVOX/X/service?action=get_gsminfo (где X - номер модуля, больше 1), можно увидеть в json-формате статус портов (span-нов). Если Web-сервер на Openvox, для авторизации использует метод Authorization: Basic, то мониторить статус портов (span-нов), можно средствами zabbix. Но на некоторых (более новых) Openvox-шлюзах ...
Отправка сообщений в Telegram
Здесь описаны возможные способы отправки сообщений в Telegram Windows CMD Для удобства отправки с командной строки, написал консольную программу на языке Pascal. Среда разработки PascalABC.NET uses System.IO, System.Net; var i:integer; html : string; chat_id: string; {:='111111111';} token: string; {:= '0000000:AAAAAAAAAAAAAAAAAAAAAA';} parse_mode: string; {:= 'html';} message: string:=''; {:='Сообщение';} url : string; begin token := ParamStr(1); chat_id := ParamStr(2); parse_mode := ...
Интеграция звонков очереди Asterisk+FreePBX с Bitrix24
Задача Сделать интеграцию звонков с Bitrix24 всех агентов состоящих в очереди Asterisk. Максимальная интеграция с FreePBX. Решение За основу берем статью Оценка работы оператора FreePBX+Asterisk. Здесь мы при входящем звонке запускаем скрипт, который мониторит все события по созданному каналу. По этом же принципу мы и будем делать ...
Доступ к Slave boards Openvox
Для того, чтобы выполнить запрос из консоли Asterisk (asterisk -rx ""), который установлен на шлюз, или через Web-интерфейс (Дополнительно→Asterisk CLI) то будет доступен только Master модуль. Чтобы работать со Slave модулями, нужно поднимать дополнительное соединение. Как же работает Web-интерфейс с Slave модулями? Так и работает! ...
Оценка работы оператора FreePBX+Asterisk
Задача: 1) Есть группа операторов Call-центра, нужно сделать возможность после разговора, оценивать звонок. 2) Максимальная интеграция с FreePBX. Решение: В Интернете много вариантов, все они ориентированы на чистый Asterisk. Примеры: https://wiki.merionet.ru/ip-telephoniya/55/ocenka-raboty-operatora-posle-zvonka-na-asterisk/ https://habr.com/ru/post/147122/ http://asterisk-service.com/blog/asterisk-1/post/2-0-53 Моя же реализация заключается в том, что все настройки можно делать в Web-интерфейсе FreePBX. Реализация тестировалась и работает на: - версии Asterisk 1.8.10.1 - ...
«Умная» пересылка входящих СМС сообщений в OpenVox
Берем за пример статью Пересылка СМС с OpenVox в Telegram, здесь мы получаем сообщения с Opnevox, отсекаем только те сообщения, которые приходят на определённый порт, и отправляем сообщение в Telegram. В этой статье опишу как "умно" сортировать входящие СМС сообщения, и направлять их на определённые сервисы ...
Пересылка СМС с OpenVox в Telegram
Как пример опишу реализацию задачи "Очередь на кассе". Если очередь на кассе - отправь сообщение на номер 050XXXXXXX с текстом "2302". Когда приходит сообщение переправлять в Telegram канал. Сим-карта с номером 050XXXXXXX подключена в Openvox, который в свою очередь настроен на получение СМС. Решение Для пересылки полученных сообщений ...