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

Материал из Webko Wiki
Версия от 12:48, 21 января 2016; Sol (обсуждение | вклад) (Новая страница: «Категория:VoIP == Общие приготовления == Сначала нужно создать в БД таблицу: CREATE TABLE `compani…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску


Общие приготовления

Сначала нужно создать в БД таблицу:

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)