Мы уже давно используем 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()
Код: Выделить всё
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();
};
Возможно в Lua для данного специального расширения "i" требуются какие-то другие методы добавления обработчика, например для классического специального расширения "h" необходимо регистрировать так называемые hangup_handlers, но мне не удалось ничего такого найти применительно к расширению "i". В принципе, это мелочь и мы без нее можем обойтись, но хотелось бы разобраться, так как мне не верится, что есть какие-то механизмы классического диалплана, которые не могут быть реализованы в Lua.
Может кто-то знает как это можно реализовать в Lua или по крайней мере, может у кого-то будут мысли по этому поводу?