Pull to refresh

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

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

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


Ну вот и всё.
Tags:
Hubs:
+6
Comments 9
Comments Comments 9

Articles