SQL из диалплана

По следам прошедшей конференции AsterConf’2017 мы решили опубликовать несколько простых советов, которые оказались полезными участникам конференции.

Первый относится к использованию SQL запросов в системах, которые построены при помощи написания диалплана без применения графических оболочек вроде FreePBX. Для работы c SQL из диалплана чаще всего используют возможности модуля func_odbc. Однако часто оказывается неудобным то, что для каждого запрос а требуется редактирование отдельного файла. Ниже описание того, как этого избежать и задавать все запросы в диалплане.

В примерах конфигурационных файлов, поставляемых с asterisk есть такой пример настройки func_odbc:

Все бы хорошо, но данный пример только использовать чтение из БД, используя SQL зарос, заданный в диалплане. Выглядит это так:

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

При исследовании был найден простой и относительно элегантный способ — передавать в func_odbc лишь имя переменной, содержащей SQL запрос:

таким образом запросы на запись и чтение будут выглядеть примерно так:

Надеюсь данный прием пригодится широким массам