Инициировать звонок с внутреннего номера
Можно ли инициировать звонок с внутреннего номера? Мое расширение выглядит следующим образом:
[read_text]
exten => s,1,Answer( )
exten => s,n,Dial(SIP/1,G(99))
exten => s,n,Dial(SIP/2,G(99))
exten => s,n,Goto(1)
exten => s,100,System(echo '${text}' | /usr/bin/espeak --stdout |sox -t wav - -r 8000 /tmp/voice.wav)
exten => s,n,Playback(/tmp/voice)
exten => s,n,System(rm /tmp/voice.wav)
exten => s,n,Hangup( )
Так что, если SIP/1 или SIP/2 отвечает, он воспроизводит текст и зависает, если никто не отвечает, он продолжает набирать номер. Я пытался создать файл вызова, но для этого требуется настройка какого-либо канала, я пытался использовать локальный, но безуспешно. Я также обнаружил, что есть очереди, но не могу найти способ инициировать вызов в очередь из файла вызовов. Я очень плохо знаком со звездочкой.
1 ответ
То, что вы пытаетесь сделать, может стать довольно грязным из плана набора. Попробуйте что-то вроде этого:
[call_read_text]
exten => s,1,Dial(SIP/1,gG(read_text,s,1))
exten => s,n,Dial(SIP/2,gG(read_text,s,1))
exten => s,n,Goto(1)
[read_text]
exten => s,1,System(echo '${text}' | /usr/bin/espeak --stdout |sox -t wav - -r 8000 /tmp/voice.wav)
exten => s,n,Playback(/tmp/voice)
exten => s,n,System(rm /tmp/voice.wav)
exten => s,n,Hangup()
- Не отвечайте на звонок, прежде чем начать!
g
будет продолжаться в плане набора, если на вызов не будет ответа, и вызовет следующий добавочный номерG()
будет прыгать кread_text,s,1
если на звонок ответили, и охота закончилась- Вы можете запустить все это с помощью файла вызовов, соединив первый контекст со вторым (произойдет при ответе).
Что-то вроде этого:
Channel: Local/s@call_read_text
Context: read_text
Extension: s
Priority: 1
Больше о файлах звонков здесь: http://www.voip-info.org/wiki/view/Asterisk+auto-dial+out. использование Set: foo=bar
в файле вызова, чтобы установить ${text}