Тем не менее, когда они в офисе, они бы хотели, чтобы система знала, за каким столом они работают, чтобы звонки, адресованные им, направлялись именно туда. Также руководитель хочет иметь возможность отслеживать, когда они находятся в офисе, и управлять привилегиями звонков, производимых с этих телефонов, в их отсутствие.
Решением в такой ситуации, как правило, является использование так называемой системы «горячих столов» (hot-desking). Мы реализовали такую функцию для вас, чтобы продемонстрировать мощь func_odbc. Начнем с простого и создадим два настольных телефона в файле sip.conf.
; sip.conf
; ПОЛЬЗОВАТЕЛИ СИСТЕМЫ 'ГОРЯЧИХ СТОЛОВ'
[desk_1]
type=friend
host=dynamic
secret=my_special_secret
context=hotdesk
qualify=yes
[desk_2]
type=friend
host=dynamic
secret=my_special_secret
context=hotdesk
qualify=yes
; КОНЕЦ ОПИСАНИЯ ПОЛЬЗОВАТЕЛЕЙ 'ГОРЯЧИХ СТОЛОВ' Это два настольных телефона, звонки на которые обрабатываются в контексте [hotdesk] файла extensions.conf. Если вы хотите, чтобы эти устройства на самом деле работали, конечно, понадобится задать соответствующие параметры в самих устройствах, но это все рассматривалось в главе 4.
Для файла sip.conf это все. У нас уже есть два кусочка хлеба, но это еще не сэндвич.
Теперь давайте настроим базу данных (предполагаем, что коннектор ODBC базы данных создан и работает, как описывалось в предыдущих разделах данной главы). Сначала подключимся к консоли базы данных следующим образом: # su - postgres
$ psql -U asterisk -h localhost asterisk
Password:
Затем, используя следующий фрагмент кода, создадим таблицу: CREATE TABLE ast_hotdesk (
id serial NOT NULL, extension int8,first_name text, last_name text, cid_name text, cid_number varchar(10), pin int4, context text,
status bool DEFAULT false, 'location' text,
CONSTRAINT ast_hotdesk_id_pk PRIMARY KEY (id)
)
WITHOUT OIDS;
После этого заполняем базу данных следующей информацией (некоторые значения изменятся лишь после выполнения диалплана, но мы приводим их здесь для примера). В консоли PostgreSQL выполните такие команды:
asterisk=> INSERT INTO ast_hotdesk ('extension', 'first_name', 'last_name', 'cid_name', 'cid_number', 'pin', 'context', 'location') VALUES (1101, 'Leif', 'Madsen', 'Leif Madsen', '4165551101', '555', 'longdistance', 'desk_1');
Повторите предыдущую строку и введите собственные значения VALUES для всех записей, которые вы желаете видеть в базе данных. Данные таблицы ast_hotdesk можно увидеть, выполнив простой запрос SELECT из консоли PostgreSQL:
asterisk=> SELECT * FROM ast_hostdesk; в результате чего будет получен примерно такой вывод:
Теперь у нас есть все ингредиенты, можно приниматься за диалплан. Вот здесь и начинается волшебство.
Прежде чем вы начнете писать программу, обращаем ваше внимание, что весь текст примера можно найти в приложении G. Хотя мы рекомендуем разобрать весь пример вместе с нами по шагам, в приложении вы можете увидеть его целиком (и скопировать его код, если у вас есть электронная версия данной книги).
В файле extensions.conf мы собираемся создать контекст [hotdesk]. Для начала определим шаблонный добавочный номер, который обеспечит возможность пользователям регистрироваться в системе:
; extensions.conf ; функция 'горячих столов' [hotdesk]
; Регистрация 'горячего стола'
exten => _ | 10[1-5] | 1 | NoOp() |
exten => _ | 10[1-5] | n | Set(E=${EXTEN}) |
exten => _ | 10[1-5] | n | Verbose(1|Hot Desk Extension ${E} is changing status |
exten => _ | 10[1-5] | n | Verbose(1|Checking current status of extension ${E}) |
exten => _ | 10[1-5] | n | Set(${E}_STATUS=${HOTDESK_INFO(status,${E})}) |
exten => _ | 10[1-5] | n | Set(${E}_PIN=${HOTDESK_INFO(pin,${E})}) |