LINUX.ORG.RU

How to: Настрока Click to Call через SIP(Asterisk) для Firefox и Kontakt

 , ,


0

1

На днях была необходимость настроить сабж для офиса, до этого работала только кнопка 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.


номера в формате +3…. т.е. номера с плюсами могут не работать, “+” не передается в АТС, т.е. либо отправляйте номера без плюса либо отрезайте плюс

Либо кто-то не умеет настраивать астериск, либо кто-то не умеет работать с AMI.

pztrn ★★★★
()
Ответ на: комментарий от pztrn

Ну Вы судя по всему умный, подсказали бы! Вот правду говорят, у нас могут только обосрать, чтобы ты не делал, хотел поделиться инфой... Да, я не гуру в этом вопросе, но Вы то, судя по всему, не одну собаку съели, чего не написали как правильно сделать?

VladV
() автор топика
Ответ на: комментарий от VladV

В процессе теста скрипта обнаружил одну штуку, номера в формате +3…. т.е. номера с плюсами могут не работать, “+” не передается в АТС, т.е. либо отправляйте номера без плюса либо отрезайте плюс.

Вот это надо было как-то поподробнее изучить и расписать. Иначе у меня возникает ощущение, что вы пытаетесь рулить номерами скриптом, а не астериском.

pztrn ★★★★
()
Ответ на: комментарий от pztrn

Я повторюсь, вы знающий видимо, вот и исправили бы, показали бы младшему брату как нужно, но вы,видимо, не хотите делится знаниями, а мне, несмотря на то, что я ими делюсь, еще что-то говорите

VladV
() автор топика
Ответ на: комментарий от pztrn

Кто вам сказал, что он не рабочий? И кто вас просит его дебажить? Я предлагаю вам, объяснить как правильно либо вообще молчать. А то как у Печкина, посылка у меня есть, вот только я вам её не отдам! Спасибо!

VladV
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.