@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'


Подскажите в каком направлении копать
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Надо добавить ключ g, который позволяет Asterisk'у продолжить выполнение диалплана после завершения вызова.
same => n,Dial(SIP/78633000000/${dialout_number},20,g)
Ответ написан
exten=> h,1,System(echo "${DIALSTATUS}" >> /tmp/1234)


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

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

Похожие вопросы