Хочу сделать что-то наподобие авторизации для сотрудников саппорта, чтобы перед постановкой в очередь, они вводили свой pin-код. Есть процедура в Mysql, которой из диалплана я передаю ${CULLERID(num)} и введенный оператором ${pincode}. Процедура возвращает 0 если авторизация прошла, и 1, если что-то пошло не так. В БД еще куча информации, которая потом попадает в отчеты и важно знать, когда сотрудник встал в очередь, когда вышел.
Так вот, все, что мне необходимо работает с помощью приложения диалплана MYSQL, но его поддержка прекращена, а в будущих сборках Asterisk его и вовсе не будет.
Текущее содержание func_odbc.conf
[QUEUE]
dsn=aster-odbc
mode=multirow
writesql=CALL Asterisk_SupportSessionStart(${ARG1},${ARG2})
Фрагмент externsions.conf, где вызывается процедура (это один из вариантов, я пробовал кучу других, ничего не работает).
exten => _*99*,1(begin),Read(pincode,${SOUNDPATH}/002-pin,4,10)
exten => _*99*,n,Set(pinvalid=${ODBC_QUEUE(${CULLERID(num)},${pincode})})
exten => _*99*,n,NoOp(${pinvalid})
exten => _*99*,n,GotoIf($[${pinvalid} = 0]?loginok)
exten => _*99*,n,GoTo(begin)
exten => _*99*,n(loginok),NoOp(Access granted)
exten => _*99*,n,HangUp()
Понимаю, что ошибка где-то в диалплане, мне нужно дальше обработать ответ от базы, а я его не могу получить.
exten => _*99*,n,NoOp(${pinvalid})
- ничего не присваевается.
Слышал про функции
ODBC_FETCH()
и
ODBC_FETCH_STATUS()
, но не понимаю, как их можно применить, да и документации по ним нет почти. За почти 4 дня разбирательств в голове все смешалось.