@Father4

Asterisk результат звонка call file?

Здравствуйте. Имеется астериск, настроенный на звонки из call файла.
сам файл:
Channel: Local/123@outbound_test
Context: out
Extension: 100
Set: dialout_number=79001234567
Archive: yes


extersions_custom.conf
[outbound_test]
exten => 123,1,System(echo "Dialout number ${dialout_number}" >> /tmp/123)
same => n,Dial(SIP/78633000000/${dialout_number},20)
same => h,n,System(echo "${DIALSTATUS}" >> /tmp/1234)

[out]
exten => 100,1,Noop(Answered)
exten => 100,2,Hangup()
exten => 100,3,Noop(echo "${DIALSTATUS}" >> /tmp/12345)


Все нормально звонок проходит. В фаил /tmp/123 добавляется информация о номере.
А вот ни в /tmp/1234 ни в /tmp12345 нет. Даже файлы не создаются. Задача получить значение ${DIALSTATUS}.

лог
-- SIP/78633000000-00000009 answered Local/123@outbound_test-00000005;2
    > Channel Local/123@outbound_test-00000005;1 was answered
 -- Executing [100@out:1] NoOp("Local/123@outbound_test-00000005;1", "Answered") in new stack
 -- Auto fallthrough, channel 'Local/123@outbound_test-00000005;1' status is 'UNKNOWN'
[Dec 16 21:11:49] NOTICE[27698]: pbx_spool.c:427 attempt_thread: Call completed to Local/123@outbound_test
  == Spawn extension (outbound_test, 123, 2) exited non-zero on 'Local/123@outbound_test-00000005;2'


Подскажите в каком направлении копать
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Надо добавить ключ g, который позволяет Asterisk'у продолжить выполнение диалплана после завершения вызова.
same => n,Dial(SIP/78633000000/${dialout_number},20,g)
Ответ написан
@dronmaxman
VoIP Administrator
Что бы работал g, надо вот так, но все равно это не будет работать если внутренний номер первым положит трубку.
[outbound_test]
exten => 123,1,System(echo "Dialout number ${dialout_number}" >> /tmp/123)
same => n,Dial(SIP/78633000000/${dialout_number},20,g)
same => n,HangUp()

exten => h,1,System(echo "${DIALSTATUS}" >> /tmp/1234)


Если по правильному, то рекомендую делать через handler. И в system рекомендую добавлять & в конце.
[hdlr-dialstatus]
exten => s,1,Verbose(0, -----Dial Status handler -----)
 same => n,System(echo "${DIALSTATUS}" >> /tmp/1234 &)

 [outbound_test]
exten => 123,1,System(echo "Dialout number ${dialout_number}" >> /tmp/123)
 same => n,Set(CHANNEL(hangup_handler_push)=hdlr-dialstatus,s,1(${EXTEN}))
 same => n,Dial(SIP/78633000000/${dialout_number},20)
 same => n,HangUp
Ответ написан
Комментировать
exten=> h,1,System(echo "${DIALSTATUS}" >> /tmp/1234)


По отсальному:
Явный Hangup и неявный Hangup (После Dial) завершают обработку диалплана - все что после него не будет выполнено.
Далее, какие существуют костыли, чтобы что-то сделать при Hangup:
  1. extension h в текущем контексте - насколько помню, вызовется при любом случае завершения вызова
  2. уже предложенный параметр g позволит продолжить выполнение после завершения Dial, но только если вызываемый абонент положил трубку - не подходит вам
  3. параметр F([[context^]exten^]priority) - переведет вызываемого абонента по указанному контексту/экстену, если вызывающий положил трубку - тоже не ваш случай. Это например перевести на автомат, который попросит оценить обслуживание
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы