На днях была необходимость настроить сабж для офиса, до этого работала только кнопка clik_to_call на сайте. Решил поделится наработкой, возможно это сэкономит кому-то время. Данная информация не открывает Америку и рассчитана скорее на новичков, хотя может и Гуру будет полезна.
Настройка Click to call для Firefox и Kontakt (Органайзер в Kubuntu) через SIP и АТС Asterisk.
Первое что должно быть - это сам Asterisk, веб-сервер и настроено PHP, так совпало, что у меня все на одной машине, конечно можно разнести это по разным машинам, если есть нужда или уже так работает.
Если АТС и веб-сервер работают, можно приступать к настройке, и так:
- Настройка manager.conf (Конфигфайл Asterisk, в Ubuntu / Debian он лежит по адресу /etc/asterisk).
Открываем кому чем удобно, я, на время работы, открыл доступ к этим файлам через samba по сети.
Правим:
[general] enabled = yes port = 5038 bindaddr = 111.22.33.444 ;localhost (127.0.0.1) или реальный IP вашего Asterisk ;у меня, кроме офисного clickTOcall, так же АТС принимает звонки с сайта, так ;что я указал свой реальный IP [office] ;имя пользователя, которое нужно будет указать в php скрипте secret=PassWord ;пароль соответственно deny=0.0.0.0/0.0.0.0 ;запрет на подключение с любого IP permit=111.22.33.444 ;разрешение на подключение только с какого-то одного, ;в моем случае это внешний адрес сервера, у вас может быть 127.0.0.1 ;или еще что-то write = call,log,verbose,originate ;даем пользователю разрешения
Сохраняем manager.conf, открываем консоль Asterisk и выполняем “manager reload”.
На этом с Asterisk все. - Далее открываем папку откуда у нас будет доступен скрипт click_to_call.php и создаем его.
У меня адрес к файлу выглядит так:
/var/www/vhost/my.companyname.com/click_to_call.php.
Открываем click_to_call.php и правим:<?php #ip address that asterisk is on. $strHost = "111.22.33.444"; $strUser = "office" ;#specify the asterisk manager username you want to login with $strSecret = "PassWord" ;#specify the password for the above user #specify the channel (extension) you want to receive the call requests with #EXAMPLE $strChannel = "SIP/100" $strChannel = $_REQUEST['exten']; $strContext = "local_office"; Контекст по которому совершаются звонки внутри офиса #specify the amount of time you want to try calling the specified channel before hangin up $strWaitTime = "30"; #specify the priority you wish to place on making this call $strPriority = "1"; #specify the maximum amount of retries $strMaxRetry = "2"; $number=strtolower($_REQUEST['number']); $pos=strpos($number,"local"); if ($number == null): echo "number is null"; exit(); endif; echo"Number is $number </br>"; echo"pos is $pos </br>"; if ($pos === false) { $errno=0; $errstr=0; $strCallerId = "Click_to_Call $number"; $oSocket = fsockopen($strHost, “УКАЗАТЬ ТУТ ПОРТ С manager.conf” 5038, $errno, $errstr); echo "pos == false</br>"; } if (!$oSocket) { echo "$errstr ($errno)<br>\n"; exit(); } else { #DEBUG, comment it if needed echo "sending data..."; echo "</br></br></br>"; echo "Action: login</br>"; echo "Username: $strUser</br>"; echo "Action: originate</br>"; echo "Channel: $strChannel</br>"; echo "CallerId: $strCallerId</br>"; echo "Exten: $number</br>"; echo "Context: $strContext</br>"; echo "</br></br></br>"; #DEBUG END 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: $number\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(2); fclose($oSocket); } echo "Extension $strChannel should be calling $number.</br>"; echo "BYE!"; exit(); ?>
Сохраняем.
- Проверяем.
Если все настроено верно, то следующие действия должны выполнить вызов абонента.
Открываем любой браузер и в адресной строке пишем адрес к вашему файлу, у меня он получился такой:
http://my.companyname.com/click_to_call.phpПерейдите по этому адресу, если скрипт рабочий, в ответ вы должны получить “number is null”.
Теперь открываем консоль Asterisk и в адресную строку вписываем следующее:
http://my.companyname.com./click_to_call.php?exten=SIP/111&number=0681232233
где SIP/111 - ваш sip номер (у меня это IP телефон), а number - соответственно номер вызываемого абонента.
Переходим по ссылке и смотрим в Asterisk, если все ок, должен пойти вызов. Если вызов пошел - поздравляю! - В процессе теста скрипта обнаружил одну штуку, номера в формате +3…. т.е. номера с плюсами могут не работать, “+” не передается в АТС, т.е. либо отправляйте номера без плюса либо отрезайте плюс. Как я это сделал, расскажу ниже.
- Кто дожил до этого пункта, поздравляю! Осталась только настроить FireFox и Kontakt.
- Настройка FireFox.
Заходим Firefox > Дополнения > Получить дополнения и в поиске пишем Telify.
Инсталлируем, перезагружаем браузер
Открываем Расширения > Настройки > Напротив Telify жмем настроить.
Общие настройки > Использовать протокол > Другой.
Все остальное по-вкуссу.
Ссылка для вызова выглядит так:http://my.companyname.com/click_to_call.php?exten=$1&number=$0
Где $1 - параметр 1, туда нужно вписать наш SIP/111, а $0 - сам номер передаваемый браузером.
Все закрываем, открываем страницу с номером телефона, нажимаем, проверяем.
- Настройка Kontakt.
Для тех кто не знает, Kontakt - это шикарный органайзер в Kubuntu, кроме прочего он может синхронизировать адресную книгу с Гуглом, а так как я использую Андроид, то для меня это сказка.
Как настроить синхронизацию рассказывать не буду, это не тяжело, расскажу как выполнять вызов с этой адресной книги через IP-телефон на столе.
И так, открываем Контакт > Настройка > Настроить Контакт > Действие с контактом > Набор телефонного номера > Внешнее приложение.
И вставляем команду, сама команда, у меня, отличается от команды в Firefox. Основное отличие в том, что эта команда убирает + с номера иначе вызова не происходит
Команда:curl "http://my.companyname.com./click_to_call.php?exten=SIP/111&number=`echo %n |tail -c 11`"
Пояснения: ну про SIP/XXX думаю объяснять нет нужды, далее number. Номер телефона Контакт передает через %n, ну а поскольку я не использую в своей адресной книге номера длиннее 11 символов, я их обрезал через tail тем самым и убрал + из номера.
Вставляем команду, сохраняем, закрываем.
- Теперь если у вас не установлен curl, нужно его поставить. sudo apt-get install -y curl
- Открываем контакты, ищем номер своего друга и нажимаем прямо на номер.
Если все получилось -ПОЗДРАВЛЯЮ!
Всем спасибо! How-to пишу редко, так что если что не так, не судите строго.
P.S. Не знал куда лучше кинуть такую тему, кинул в General.