Будет весьма удобно, не правда ли?
А реализуется это очень легко.
Традиционно рассмотрю два варианта — для FreePBX, и для «чистого» Asterisk.
Общие приготовления
Сначала нужно создать в БД таблицу:
CREATE TABLE `companies` (
`name` CHAR(150) NOT NULL,
`number` BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (`number`)
);
и заполнить её списком клиентов, сотрудников и так далее. Этот список без проблем можно импортировать через промежуточный CSV из 1C, Active Directory, различных CRM и адресных книг с помощью множества доступных утилит, от HeidiSQL до PHPMyAdmin, и эта часть не должна создать проблем.
FreePBX
В меню Caller ID Lookup Sources нужно добавить source type: MySQL, прописать адрес сервера, логин, пароль, а в поле query указать:
SELECT name FROM companies WHERE number LIKE CONCAT('%',SUBSTRING('[NUMBER]',-7));
а в меню inbound routes выбрать свежесозданный lookup source из выпадающего списка.
Asterisk communications framework — то есть «чистый» Asterisk
В диалплан следует добавить следующие строки:
exten => foo,n,MYSQL(Connect connid localhost cdr cdrpass asterisk) ; Указываем хост, логин, пароль, БД.
exten => foo,n,GotoIf($["${connid}" = ""]?nodb) ; Соединение не удалось
exten => foo,n,MYSQL(Query resultid ${connid} SELECT name FROM companies WHERE number="${CALLERID(num)}" LIMIT 1)
exten => foo,n,MYSQL(Fetch fetchid ${resultid} name)
exten => foo,n,MYSQL(Clear ${resultid})
exten => foo,n,Set(CALLERID(name)=${name})
exten => foo,n,MYSQL(Disconnect ${connid})
exten => foo,n(nodb),NoOp(DoneDB)
Ну вот и всё.
Комментарии (9)
j3st3r
07.12.2015 16:16+1MYSQL app deprecated уже в 11 астере.
ODBC — значительно проще и универсальнее (до тех пор пока в топик не залезет уважаемый antirek и не начнет говорить про agi:)varnav
07.12.2015 16:49Проще? Я бы не сказал. Вместо одной строчки нужно править несколько конфигов.
В остальном согласен. Но есть ли по ODBC для Asterisk нормальная документация?
antirek
08.12.2015 08:19Мне нравятся такие маленькие сниппеты. varnav, продолжайте.
Объясню почему. Да, документации много. Но если бы документация было достаточно, то не было бы сайтов с вопросами и ответами, коллекций рецептов по типу stackoverflow или тостера — в общем, надо обмениваться опытом.
Еще вот недавно встретил такой формат объяснения настроек астериска: Voip Guys Asterisk Tutorials — канал на Youtube. Конфигурируют и тут же показывают что изменилось.varnav
08.12.2015 08:42+1Я работаю с астериском очень давно, но не только с ним.
Считаю что с документацией по астериску проблемы, она сильно уступает документации других проектов.
Легко увидеть что по поиску обычно сверху выдаётся www.voip-info.org с устаревшей, но более полной информацией. А официальная wiki довольно куцая.
Dobrotin
08.12.2015 13:37+1Еще можно было использовать модуль FreePBX «Asterisk Phonebook», CallerID Lookup в нём тоже «ищет».
shadowalone
09.12.2015 03:05не совсем одно и тоже:
SELECT name FROM companies WHERE number LIKE CONCAT('%',SUBSTRING('[NUMBER]',-7));
и
SELECT name FROM companies WHERE number="${CALLERID(num)}" LIMIT 1
Во втором случае, вероятность несовпадения в разы больше… ибо номер может придти с префиксом/без страны/города — зависит от твоего оператора телефонии.
la0
Я бы если бы что-то подобное делал, делал бы или sqlite (зачем тащить мускул?) или получение этой информации по HTTP-ссылке.
Последнее очень пригодится, например, если вдруг в компании узнают что такое CRM
varnav
Мускул в 80% и так уже на астериске будет установлен, для CDR например.
В случае FreePBX он там будет в 100% случаев.