Страница 1 из 2
Начальные значения в базе
Добавлено: 04 июн 2016, 09:14
roms
Всем хорошего настроения!
Хочу для диалплана задавать несколько начальных значений в AstDB.
Это возможно?
Все мануалы, которые я курил, рассказывают как задавать значения в AstDB из контекстов. А хочется до первого вызова любого контекста.
В секции global получается задать только константы. Попытки вписать туда операторы занесения значений в AstDB выдают ошибки.
Re: Начальные значения в базе
Добавлено: 04 июн 2016, 10:15
ded
Занесите руками
CLI> database put
Usage: database put <family> <key> <value>
Adds or updates an entry in the Asterisk database for
a given family, key, and value.
Re: Начальные значения в базе
Добавлено: 04 июн 2016, 10:24
roms
Возможность внесения руками я видел.
Просто не хочется логически разрывать контент.
Если я впишу значения в файл, каждый, кто после меня будет смотреть настройки - их увидит. Конечно можно вписать это в примечаниях, тогда тоже увидят.
Но при переносе конфигурации на другую машину или восстановлении конфигурационных файлов из резервной копии на этой машине придётся делать дополнительную операцию. И помнить про неё.
Поэтому хочется вписать всё в конфиг, что бы автоматом работало во всех случаях.
Если AstDB такого не позволяет - я изобрету конечно какой-нибудь костыль. Но хочется погламурнее.
Re: Начальные значения в базе
Добавлено: 04 июн 2016, 11:11
awsswa
Что мешает сделать bash скрипт ?
asterisk -rx "команда"
Забросили в каталог asterisk - при копировании конфигурации всё равно каталог копируете
Re: Начальные значения в базе
Добавлено: 04 июн 2016, 14:00
roms
Да в принципе ничего не мешает. Просто хочется максимум логичности, минимум расползания конфига по разным файлам.
bash-скрипт ведь сам тоже не запустится. Его надо увидеть, вспомнить нафига он был написан - в настройки АТС в нормальном режиме ведь не лезешь месяцами, а то и годами.
А если другой человек будет копировать/восстанавливать - он ведь полезет изучать детали только когда сразу после копирования что-то не заработает...
Короче, я так понимаю, что с AstDB этот номер не пройдёт.
Надо lua почитать, может там возможности шире, чем в conf/ael...
Re: Начальные значения в базе
Добавлено: 04 июн 2016, 15:05
zzuz
Задавать из диалплана значения внутренней БД можно командой
Re: Начальные значения в базе
Добавлено: 04 июн 2016, 16:31
awsswa
Нечего вспоминать на надо
В диаплане проверили контрольный ключ - если нету, через SYSTEM запустили из каталога bash скрипт - он создаст необходимые ключи
Каталог /etc/asterisk самое главное скопировать полностью
Re: Начальные значения в базе
Добавлено: 05 июн 2016, 02:11
roms
awsswa писал(а):В диаплане проверили контрольный ключ
Где его проверять?
Насколько я изучил астериск, в конфиге возможны разделы general, global, и контексты. Вся логика, все активные действия могут быть только в контекстах. А контексты могут быть вызваны только набором номера (ну или через AMI).
Т.е. мне нужно в каждом контексте, в котором могут быть использованы эти данные из AstDB, сначала поставить проверку на их существование, и если они не существуют - установить их?
Тогда и внешний скрипт не нужен, можно и напрямую.
Решение рабочее, но не очень красивое.
Я хотел сделать самым логичным способом: блок кода, выполняемый при старте. Но похоже астериск так не умеет. Буду придумывать внешнее инициализирующее действие...
Re: Начальные значения в базе
Добавлено: 05 июн 2016, 09:25
Vlad1983
через AMI чекаете и через него же заполняете
Re: Начальные значения в базе
Добавлено: 05 июн 2016, 12:33
zzuz
Но похоже астериск так не умеет.
Умеет
Объявляете глобальную переменную с нужными ключами в секции global и описываете сами дефолтные ключи.
Код: Выделить всё
[globals]
DB_KEYS=key1,key2,key3
DB_key1=val1
DB_key2=val2
DB_key3=val3
[check_keys]
exten => s,1,Set(C=1)
exten => s,n,While($["${CUT(DB_keys,\,,${C})}" != ""])
exten => s,n,Set(C=$[${C}+1])
exten => s,n,Set(KEY=${CUT(DB_keys,\,${C})})
exten => s,n,ExecIf($["${DB_EXISTS(DEFAULT/${KEY})}"]?Noop(Запись имеется):Set(DB(DEFAULT/${KEY}))=${GLOBAL(DB_${KEY})}))
exten => s,n,EndWhile()
exten => s,n,Return()
и в диаплане вызываете этот макрос
Код: Выделить всё
[context]
exten => _X.,1,GoSub(check_keys,s,1)
exten => _X.,n,....