Asterisk/FreePBX: Интеграция определителя номера с базой клиентов

от автора

А что если при входящем звонке вместо бездушного номера вы будете видеть на своём телефоне что-то вроде «ООО Стройпоставка» или «Иванов Семён Петрович», получаемые из базы ваших клиентов и контрагентов.
Будет весьма удобно, не правда ли?
А реализуется это очень легко.

Традиционно рассмотрю два варианта — для 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)  

Ну вот и всё.

ссылка на оригинал статьи http://habrahabr.ru/post/208586/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *