Страница 1 из 1

Обработка invalid entry extension в Lua

Добавлено: 17 авг 2020, 15:59
kantv
Всем Всем хорошего настроения!

Мы уже давно используем Asterisk и последние 2 года перевели dialplan на lua. В целом все работает. Но сейчас захотелось добавить функцию, чтобы если абонент ошибся и набрал несуществующий в контексте номер, то ему бы проигрывалось аудио сообщение о том, что он неверно набрал номер вместо обычных коротких гудков, так как некоторые абоненты думают, что это сигнал "занято" и продолжают названить на неправильный номер вместо того, чтобы проверить что они набирают. В классическом диалплане отловить набор несуществующего номера можно было через специальный extension "i" примерно вот таким образом (приводится во всех видах документации):

Код: Выделить всё

[test]
exten => _1XX,1,Dial(${EXTEN})

exten => i,1,NoOp(An invalid number ${INVALID_EXTEN} was dialed.)
exten => i,2,Answer()
exten => i,3,Playback(invalid)
exten => i,4,Hangup()
То есть в контекст просто добавляется дополнительный специальный extension "i", причем делается это как для любого другого обычного расширения. Пробовал сделать аналогично и в lua (это не реальный диалплан, а лишь пример):

Код: Выделить всё

test = {
["_1XX"] = function(context, extension)
app.Dial("PJSIP/"..extension);
end;

["i"] = function(context, extension)
app.NoOp("An invalid number "..extension.." was dialed.");
app.Answer();
app.Playback(invalid);
app.Hangup();
};
Но такой вариант работать не хочет - не начинает выполняться функция указанная для расширения "i".
Возможно в Lua для данного специального расширения "i" требуются какие-то другие методы добавления обработчика, например для классического специального расширения "h" необходимо регистрировать так называемые hangup_handlers, но мне не удалось ничего такого найти применительно к расширению "i". В принципе, это мелочь и мы без нее можем обойтись, но хотелось бы разобраться, так как мне не верится, что есть какие-то механизмы классического диалплана, которые не могут быть реализованы в Lua.

Может кто-то знает как это можно реализовать в Lua или по крайней мере, может у кого-то будут мысли по этому поводу?