Kniga-Online.club
» » » » Джим Меггелен - Asterisk™: будущее телефонии Второе издание

Джим Меггелен - Asterisk™: будущее телефонии Второе издание

Читать бесплатно Джим Меггелен - Asterisk™: будущее телефонии Второе издание. Жанр: Программное обеспечение издательство неизвестно, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

CDR состоят из уникального идентификатора и нескольких полей информации о вызове (включая источник и канал назначения, продолжительность вызова, приложение, выполняемое последним, и т. д.). В кластере серверов Asterisk теоретически возможно дублирование уникальных идентификаторов, поскольку каждая система Asterisk учитывает только саму себя. Чтобы решить эту проблему, можно автоматически добавлять идентификатор системы в начало уникального ID. Для этого введем дополнительную опцию в файл /etc/asterisk/asterisk.conf и зададим идентификатор для каждого из серверов: [options]

systemname=toronto

clid varchar(80), src varchar(80), dst varchar(80), dcontext varchar(80), channel varchar(80), dstchannel varchar(80), lastapp varchar(80), lastdata varchar(80), duration int8, billsec int8, disposition varchar(45), amaflags int8, accountcode varchar(20), uniqueid varchar(40), userfield varchar(255),

CONSTRAINT asterisk_cdr_id_pk PRIMARY KEY (id)

)

WITHOUT OIDS;

Убедиться в том, что таблица создана, можно с помощью команды dt (describe tables):

asterisk=> dt asterisk_cdr

List of relations

Schema | Name | Type | Owner + + +

public | asterisk_cdr | table | asterisk (1 row)

Далее конфигурируем Asterisk на хранение ее CDR в базе данных. Это выполняется в файле /etc/ asterisk/cdr_odbc.conf с помощью следующих настроек:

[global]

dsn=asterisk-connector

username=asterisk password=welcome loguniqueid=yes table=asterisk_cdr

Если Asterisk уже запущена, из интерфейса командной строки Asterisk выполняем команду module reload cdr_odbc.so. Также можно просто ввести reload, чтобы выполнить полную перезагрузку. *CLI> reload

Проверим статус CDR. Для этого введем следующую команду и найдем в выводе строку CDR registered backend: ODBC:

*CLI> cdr status

CDR logging: enabled CDR mode: simple

CDR registered backend: cdr-custom

CDR registered backend: cdr_manager

CDR registered backend: ODBC

Теперь выполним вызов через сервер Asterisk, а потом проверим наличие данных о нем в таблице asterisk_cdr. Самый простой способ протестировать вызов - использовать CLI-команду Asterisk console dial (предполагается, что имеется звуковая карта и установлен модуль chan_oss). Однако для выполнения тестового звонка можно использовать любой имеющийся в распоряжении метод: *CLI> console dial [email protected]

-- Executing [[email protected]:1] Playback("OSS/dsp", "tt-weasels") in new stack -- <OSS/dsp> Playing 'tt-weasels' (language 'en')

Затем установим соединение с базой данных и выполним запрос SELECT для проверки наличия данных в таблице asterisk_cdr. Также можно выполнить команду SELECT * FROM asterisk_cdr;, но в этом случае будет возвращено намного больше данных: # psql -U asterisk -h localhost asterisk Password:

asterisk=> SELECT id,dst,channel,uniqueid,calldate FROM asterisk_cdr;

id | dst | channel | uniqueid | calldate

---+ + + +

1 | 100 | OSS/dsp | toronto-1171611019.0 | 2007-02-16 02:30:19-05 (1 rows)

Ощутим могущество func_odbc: система «горячих столов»

Функция диалплана func_odbc является, наверное, самой замечательной и мощной в Asterisk. Она позволяет создавать и применять довольно простые функции диалплана для извлечения и использования информации из баз данных непосредственно в диалплане. Ее можно использовать в очень многих случаях, например для управления пользователями или обеспечения возможности совместного использования динамической информации в рамках кластера серверов Asterisk.

func_odbc позволяет описывать SQL-запросы и присваивать им имена функций. В результате создаются специальные функции, которые получают свои результаты, выполняя запросы к базе данных. Взаимосвязи между именами создаваемых функций и выражениями SQL, которые они должны выполнять, описываются в файле func_odbc.conf. Используя именованные функции в диалплане, можно извлекать и обновлять значения в базе данных.

Хотя применение внешнего сценария для взаимодействия с базой данных (из которой создается плоский файл для Asterisk) имеет свои преимущества (если база данных дает сбой, система будет продолжать функционировать и сценарий просто не будет обновлять файлы до восстановления соединения с базой данных), основной недостаток в этом случае в том, что любые изменения, вносимые вами для пользователя, остаются недоступными, пока не будет выполнен сценарий обновления. Возможно, это не является большой проблемой для маленьких систем, но в больших системах ожидание вступления в силу внесенных изменений может привести к неприятностям, таким как прерывание активного вызова на время загрузки или синтаксического разбора большого файла. Ослабить негативные эффекты можно, применяя систему баз данных с дублированием. В версии Asterisk, следующей за 1.4 (в настоящее время эта версия готовится к выпуску[115]) синтаксис файла func_odbc.conf изменится не сильно, но обеспечит возможность в случае отказа перейти к другой СУБД. Таким образом, можно будет кластеризовать серверную часть базы данных, используя отношение ведущий-ведущий (pgcluster; Slony-II) или систему дублирования ведущий-ведомый (Slony-I).

Чтобы вы получили правильное представление о рассматриваемом далее материале, представьте себе дагвудовский сэндвич[116]. Можно ли описать всю гамму впечатлений от такого блюда, только представив изображение помидора или помахав перед носом кусочком сыра? Вряд ли. С этой же проблемой мы сталкиваемся, пытаясь придумать хороший пример, объясняющий, в чем мощь func_odbc. Поэтому мы решили «приготовить сэндвич полностью». Рецепт довольно сложен, но, попробовав этот сэндвич, вы не захотите ничего другого. Для нашего примера мы решили реализовать то, что, по нашему мнению, могло бы иметь практическое применение. Представим небольшую компанию, в отделе продаж которой насчитывается пять человек и им приходится делить между собой два рабочих стола. Это не так ужасно, как может показаться, потому что эти ребята большую часть времени находятся в разъездах и проводят в офисе максимум один день в неделю.

Тем не менее, когда они в офисе, они бы хотели, чтобы система знала, за каким столом они работают, чтобы звонки, адресованные им, направлялись именно туда. Также руководитель хочет иметь возможность отслеживать, когда они находятся в офисе, и управлять привилегиями звонков, производимых с этих телефонов, в их отсутствие.

Решением в такой ситуации, как правило, является использование так называемой системы «горячих столов» (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})})

Этот добавочный номер еще не закончен, но прервемся на мгновение и посмотрим, что уже сделано.

Перейти на страницу:

Джим Меггелен читать все книги автора по порядку

Джим Меггелен - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Asterisk™: будущее телефонии Второе издание отзывы

Отзывы читателей о книге Asterisk™: будущее телефонии Второе издание, автор: Джим Меггелен. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*