Друг, как было бы полезно знать, откуда тебе приходит звонок? На базе этих данных можно маршрутизировать клиента (например, оператор №1 для Москвы, оператор №2 для Новосибирска, оператор №3 для Владивостока, англоязычный оператор №4 для заграничных звонков), или, например, делать различные голосовые приветствия для разной категории городов, например: «Здравствуйте! Вы позвонили в компанию «COMPANY_NAME». В Екатеринбурге сегодня +2, а мы соединяем Вас с оператором». Круто, не правда ли?
Кстати, сделать такое приветствие не сложно. Почитайте наш материал про синтез речи на Asterisk по этой ссылке :)
Содержать и постоянно актуализировать базу данных с телефонными префиксами задача весьма нетривиальная. Что делать в таком случае? Конечно использовать внешний API. А еще лучше, если он будет бесплатным. И да, у нас такой есть :)
Для определения географической принадлежности номера мы будем использовать сервис numverify. У него есть отличный и простой API, а самое главное, сервис бесплатен при ограничении не более 250 запросов к API в месяц (12 – 13 запросов в рабочий день). Переходим по этой ссылке и регистрируемся на бесплатном тарифе:
Нажимаем Sign Up на нужном тарифе, заполняем форму (оставляем контактные данные) и получаем API – ключик:
Копируем API – ключ и переходим к настройке скрипта в Asterisk.
Перед продолжение настройки, создаем Telegram – бота. О том, как это сделать читайте по кнопке (получаем API – токен и ID - чата):
На этом этапе у нас должен быть API – токен от Telegram бота и ID группового чата. Мы будем выполнять AGI – скрипт из диалплана при входящем звонке и отправлять данные в Telegram :) Переходим к самому скрипту:
#!/usr/bin/php -q <?php #парсим callerid require('phpagi.php'); $agi = new AGI(); $cid = $agi->request['agi_callerid']; #данные для подключения к Telegram $token = "ваш_api_от_Telegram"; $chat_id = "ID_чата"; #укажите ваш api - ключ от numverify $apikey = "api_ключ_от_numverify"; #вырезаем 10 цифр справа от номера и подставляем 7ку сначала (для приведения к требуемому формату) $phone_loc = substr($cid, -10); $phone_loc = "7$phone_loc"; #обращаемся к API и обрабатываем результат $numverify_url = "http://apilayer.net/api/validate?access_key=$apikey&number=$phone_loc"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$numverify_url); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); curl_setopt ($ch, CURLOPT_TIMEOUT, 60); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $numverify = curl_exec ($ch); curl_close($ch); #декодируем JSON $numverify_o = json_decode($numverify, true); print_r ($numverify_o); #формируем массив для отправки данных в Telegram $arr = array( 'Коллеги, нам звонит:' => $cid, 'Код страны:' => $numverify_o['country_code'], 'Название страны:' => $numverify_o['country_name'], 'Локация:' => $numverify_o['location'], 'Тип линии (городской/мобильный):' => $numverify_o['line_type'], ); foreach($arr as $key => $value) { $txt .= "".$key." ".$value."%0A"; }; #отправляем данные в сторону API Telegram fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); ?>
В случае скачивания, поменяйте расширение файла с .txt на .php
Огонь! Сохраняем этот скрипт как numverify.php и загружаем его в папку /var/lib/asterisk/agi-bin
. Это можно сделать с помощью WinSCP, например. Далее, в консоли через SSH доступ на сервер Asterisk дайте следующие команды:
dos2unix /var/lib/asterisk/agi-bin/numverify.php chown asterisk:asterisk /var/lib/asterisk/agi-bin/numverify.php chmod 775 /var/lib/asterisk/agi-bin/numverify.php
Поправим диалплан. Сделайте исполнение этого скрипта в транке, например:
exten => _.,n,AGI(numverify.php)
Перезагружаем диалплан командой:
dialplan reload
Итак, давайте проверим, что у нас получилось. Позвоним с номера 4996491913:
Тип линии landline - городской номер, mobile - мобильный и так далее. Более подробно можно почитать в документации numverify
Работает! А если нам позвонят из Владивостока? :)
Отлично. В зависимости от города звонящего, вы можете делать маршрутизацию вызова. Например, для Москвы возвращать в диалплан переменную со значением 1, для Новосибирска 2, для Владивостока 3 и так далее. А в зависимости от этого делать маршрутизацию вызова. Пример можно посмотреть в этой статье: