Asterisk RealTime Extensions (Динамическая конфигурация в плане набора)


(Народ считает, что это самое классное применение механизма динамической конфигурации RealTime.)

Настройки в файле Extensions.conf

Определение динамических RealTime екстеншенов в плане набора осуществляется с помощью директивы switch. Ниже приводится пример того, как это определить в контексте [test] плана набора:


[test]
;
; switch => Realtime/ [ context ] @ [ family ] [ /options ]
; если контекст не указан, то будет использован контекст default
; если семейство (family) не указано, то по умолчанию будет использовано название 'extensions'
;
switch => Realtime/mycontext@realtime_ext


Эта директива указывает Asterisk'у, что любой вызов, поступающий в контекст 'test' будет обрабатываться, используя динамический механизм RealTime, используя контекст "mycontext" и имя семейства (family) - "realtime_ext".

Название контекста - опциональное поле. Можно определить директиву как: (switch => Realtime/@realtime_ext) и опустить этот параметр. В этом случае RealTime будет использовать название текущего контекста, в данном случае - "test".

Имя семейства (family) так же необязательно: Зададим: (switch => Realtime/@) и опустим этот параметр, тогда механизм RealTime будет использовать имя семейства (family): "extensions".

На данный момент нет дополнительных параметров для данной директивы, следовательно, Вы можете их не указывать.

Вышеприведенное имя конфигурационного семейства (family) может быть любым. Только надо быть уверенным, что оно совпадает с тем, что у Вас прописано в файле extconfig.conf: (realtime_ext => mysql,asterisk,extensions_table )

И конечно, Вы можете использовать несколько директив switch в Вашем плане набора и насколько имен конфигурационных семейств (family) при использовании данного метода.

Таблица базы данных

Просто создадим необходимую нам таблицу:

Примечание: Вы можете использовать любое имя таблицы по Вашему желанию. Только проверяйте, чтоб имя таблицы соответствовало тому конфигурационному семейству (family), для которого Вы хотите ее использовать.


#
# Table structure for table `extensions_table`
#

CREATE TABLE `extensions_table` (
`id` int(11) NOT NULL auto_increment,
`context` varchar(20) NOT NULL default '',
`exten` varchar(20) NOT NULL default '',
`priority` tinyint(4) NOT NULL default '0',
`app` varchar(20) NOT NULL default '',
`appdata` varchar(128) NOT NULL default '',
KEY `id` (`id`)
) TYPE=MyISAM;

#
# Dumping data for table `extensions_table`
#

INSERT INTO `extensions_table` VALUES (1, 'mycontext', '_574555XXXX', 1, 'Wait', '2');
INSERT INTO `extensions_table` VALUES (2, 'mycontext', '_574555XXXX', 2, 'SayNumber', '102');
INSERT INTO `extensions_table` VALUES (3, 'mycontext', '2815551212', 1, 'Playback', 'pbx-invalid');




Еще один пример записей в таблице от Matthen Boehm:

INSERT INTO `extensions` (`id`, `context`, `exten`, `priority`, `app`, `appdata`)
VALUES (5, 'cytel', '8322008630', '1', 'Dial', 'SIP/3044,30');

INSERT INTO `extensions` (`id`, `context`, `exten`, `priority`, `app`, `appdata`)
VALUES (7, 'cytel', '80', '1', 'Voicemailmain', '@cytel');

INSERT INTO `extensions` (`id`, `context`, `exten`, `priority`, `app`, `appdata`)
VALUES (8, 'cytel', '_832.', '1', 'Dial', 'SIP/${EXTEN}@66.88.74.85|30');

INSERT INTO `extensions` (`id`, `context`, `exten`, `priority`, `app`, `appdata`)
VALUES (9, 'cytel', '_9X.', '1', 'Dial',
'IAX2/devasterisk:asterisk@asterisk-alpha/${EXTEN}@cytel-internal');

INSERT INTO `extensions` (`id`, `context`, `exten`, `priority`, `app`, `appdata`)
VALUES (10, 'cytel', '3013', '1', 'Dial', 'SIP/3013|30');

INSERT INTO `extensions` (`id`, `context`, `exten`, `priority`, `app`, `appdata`)
VALUES (11, 'cytel', '_3XXX', '1', 'Dial',
'IAX2/devasterisk:asterisk@asterisk-alpha/${EXTEN}@cytel-internal');


Проверка работоспособности


Направим вызов в контекст [ test ] . Тогда Asterisk должен выполнить запрос в соответствующую таблицу базы данных, чтобы получить команды, которые должны быть выполнены для Вашего набранного номера.

Итак, Вы набрали 5745558896, тогда должно быть выполнено двухсекундное ожидание: Wait(2), потом мы должны услышать проговор номеров "один ноль два" ("one zero two").

Если Вы набрали 2815551212, тогда Вы должны услышать фразу о неправильно набранном номере ("I'm sorry. That's not a valid extension").

  • Поддержка стандартных екстеншенов 'i' и 's' на данный момент не поддерживается.
  • Стандартный екстеншен 't' поддерживается при применении данного метода конфигурации.
Замечание: В последних CVS поддерживаются 'i' и 's'

Замечание по использованию команд Goto и GotoIf в плане набора


Если Вы используете команду Goto или GotoIf, то вы должны использовать только символ '|' в поле таблицы app_data для разделения параметров команд, а не символ ','. Например, поле app_data может быть заполнено параметрами в такой форме: context|s|1 и не может быть в такой: context,s,1.

Ссылки по теме: