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' поддерживается при применении данного метода конфигурации.
Замечание по использованию команд Goto и GotoIf в плане набора
Если Вы используете команду Goto или GotoIf, то вы должны использовать только символ '|' в поле таблицы app_data для разделения параметров команд, а не символ ','. Например, поле app_data может быть заполнено параметрами в такой форме: context|s|1 и не может быть в такой: context,s,1.
Ссылки по теме:
- Asterisk Realtime
- RealTime Static" class="wiki wiki_page">Asterisk Realtime Static
- Asterisk Realtime Sip
- Asterisk Realtime IAX
- Asterisk Realtime Voicemail
- Asterisk Realtime Queue
- Asterisk Realtime Extensions