Дорогой друг, как часто в твою организацию звонят партнеры, клиенты или просто спам (навязывание ненужных услуг)? Нам, например, часто :) Мы подумали, что было бы неплохо знать заранее название компании, представитель которой хочет дозвониться до нас, например, отображая компанию на дисплее телефона оператора.
В качестве источника данных, было принято решение использовать API Поиска по организациям в связке с Asterisk AGI. Итак, приступаем к настройке.
Если количество обращений к Яндекс. API Поиска по организациям не превышает 500 запросов в сутки, вы можете использовать его на бесплатной основе. В противном случае, вам необходимо заключить договор. Условия использования можно почитать здесь.
ПОШАГОВОЕ ВИДЕО
ПОЛУЧЕНИЕ КЛЮЧА (TOKEN)
Переходим в кабинет разработчика Яндекс по адресу https://developer.tech.yandex.ru и нажимаем получить ключ:
- Имя ключа - введите имя для ключа. Например, Asterisk;
- Подключение - выберите из списка API Поиска по организациям;
Указываем личный данные, даем краткое описание своего сервиса и соглашаемся с условиями. Нажимаем Отправить:
Запоминаем значение, которое выделено красным на скриншоте выше – это и есть ваш токен. Переходим к настройке AGI – скрипта.
РИСУЕМ AGI - СКРИПТ НА PHP
Примерная структура скрипта проста: из AGI мы берем CallerID звонящего, делаем CURL в сторону API Яндекса. Ответ мы получаем в формате JSON, который мы декодируем в обычный массив, а затем разбираем его по элементам. Посмотрим в код скрипта (комментарии к коду по традиции после //):
#!/usr/bin/php -q
<?php
require('phpagi.php');
$agi = new AGI();
$cid = $agi->request['agi_callerid']; // цепляем CallerID;
$key = 'd415b201-3d9b-45a7-95b9-000000000000'; // добавьте в эту переменную ваш API – ключ;
$yandex_url = "https://search-maps.yandex.ru/v1/?text=$cid&results=1&type=biz&lang=ru_RU&apikey=$key"; // URL, на который мы будем делать запрос на получение данных;
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$yandex_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);
$yandex = curl_exec ($ch); // выполняем запрос и записываем его в переменную;
curl_close($ch);
$yandex_o = json_decode($yandex, true); // декодируем JSON в массив;
$views = $yandex_o['features'][0]['properties']['CompanyMetaData']['name']; // вытаскиваем из массива элемент, в котором присутствует название организации;
if (empty($views)) {$agi->set_variable("lookupcid", "$cid");} else {
$agi->set_variable("lookupcid", "$views");
} // если переменная с именем организации пустая, то в диалплан мы возвращаем значение переменной lookupcid равное номеру звонящего, а если название организации мы получили, то записываем его в эту переменную;
?>
Сохраните скрипт под именем company_name.php в директории /var/lib/asterisk/agi-bin и дайте следующие команды в консоль сервера:
dos2unix /var/lib/asterisk/agi-bin/company_name.php
chown asterisk:asterisk /var/lib/asterisk/agi-bin/company_name.php
chmod 775 /var/lib/asterisk/agi-bin/company_name.php
А еще, как нам кажется, было бы удобно передавать на дисплей сферу деятельности компании, чтобы при входящем звонке оператора смог примерно понять, какой посыл звонка. Выбрать эти данные можно из элементов ['features'][0]['properties']['CompanyMetaData']['Categories'][0-2]['name'];. Где выделен текст (диапазон 0 - 2), может быть только 1 цифра.
ВСТАВЛЯЕМ СКРИПТ В ДИАЛПЛАН
Осталось самое легкое – вставить скрипт в диаплан. Мы сделаем это в контексте обработки вызовов оператором с номером 8899:
exten => 8899,n,AGI(company_name.php)
exten => 8899,n,Set(CALLERID(name)=${lookupcid})
Перезагружаем диалплан командой dialplan reload. Звоним со своего офисного телефона на наш корпоративный номер +74996491913 и видим: