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

Проиграть звук после повешенья трубки?

Добавлено: 11 окт 2012, 21:41
varnav
Всем привет!

Есть такой отличный контекст для опросника:

[quiz]
exten => s,1,Verbose(2,Starting quiz)
exten => s,2,Playback(custom/q_hi)
exten => s,3,Read(a1,,1,n,2,10)
exten => s,4,Verbose(2,Answered ${answ})
exten => s,5,AGI(quiz.php,1,${a1})
exten => s,n,Hangup()

Если на него перенаправлять ручками - всё отлично работает. Если на него кидать через h - то всё просто обрывается после команды Playback. Пошарил по форумам - говорят (http://lists.digium.com/pipermail/aster ... 59179.html) что после того как трубку повесили голосовой тракт обрывается и типа звук проиграть нельзя уже.

Это правда?

Астер 1.8.12.0

Re: Проиграть звук после повешенья трубки?

Добавлено: 12 окт 2012, 09:43
Sfinx
Поднесите ухо к повешенной трубке и убедитесь сами ;)

Re: Проиграть звук после повешенья трубки?

Добавлено: 12 окт 2012, 19:00
varnav
Дело в том что такое точно работало в другом месте. В такой конфигурации:

exten => h,3,Goto(quiz,s,1)

После того как тот кому позвонили вешал трубку (но не звонивший!) h выполнялся, звук из контекста quiz проигрывался, ответ через Read считывался.
Трубку ведь можно повесить только с одной стороны - почему нельзя проиграть что-то второй стороне которая эту трубку ещё не повесила?

А здесь пытаюсь повторить - получается такое:

[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Goto (quiz,s,1)
[Oct 12 18:52:11] VERBOSE[31349] app_macro.c: == Channel 'SIP/baza5555-000014e3' jumping out of macro 'hangupcall'
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:1] Verbose("SIP/baza5555-000014e3", "2,Starting quiz") in new stack
[Oct 12 18:52:11] VERBOSE[31349] app_verbose.c: == Starting quiz
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:2] Playback("SIP/baza5555-000014e3", "custom/q_hi") in new stack
[Oct 12 18:52:11] WARNING[31349] file.c: Failed to write frame
[Oct 12 18:52:11] VERBOSE[31349] file.c: -- <SIP/baza5555-000014e3> Playing 'custom/q_hi.alaw' (language 'ru')
[Oct 12 18:52:11] WARNING[31349] app_playback.c: ast_streamfile failed on SIP/baza5555-000014e3 for custom/q_hi
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:3] Read("SIP/baza5555-000014e3", "a1,,1,n,2,10") in new stack
[Oct 12 18:52:11] VERBOSE[31349] app_read.c: -- Accepting a maximum of 1 digits.
[Oct 12 18:52:11] VERBOSE[31349] app_read.c: -- User disconnected
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:4] Verbose("SIP/baza5555-000014e3", "2,Answered ") in new stack
[Oct 12 18:52:11] VERBOSE[31349] app_verbose.c: == Answered
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:5] AGI("SIP/baza5555-000014e3", "quiz.php,1,") in new stack
[Oct 12 18:52:11] VERBOSE[31349] res_agi.c: -- Launched AGI Script /var/lib/asterisk/agi-bin/quiz.php
[Oct 12 18:52:11] VERBOSE[31349] res_agi.c: -- <SIP/baza5555-000014e3>AGI Script quiz.php completed, returning 0
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:6] Hangup("SIP/baza5555-000014e3", "") in new stack
[Oct 12 18:52:11] VERBOSE[31349] features.c: == Spawn extension (quiz, s, 6) exited non-zero on 'SIP/baza5555-000014e3'

Фактически сразу обрыв связи.

Re: Проиграть звук после повешенья трубки?

Добавлено: 13 окт 2012, 12:19
Sfinx
Есть всего два варианта:

1. h => 1, Dial(Local/play_sound)
2. через call file / Originate()

Re: Проиграть звук после повешенья трубки?

Добавлено: 13 окт 2012, 16:41
zzuz
Не надо вестить на доводы автора. Потому что он сам кусок диплана прочитал и ничего не понял. А вот то , что Hangup'а еще не было он и не посмотрел.

Re: Проиграть звук после повешенья трубки?

Добавлено: 13 окт 2012, 19:08
varnav
Если под автором подразумеваюсь я то это кусок я не прочитал а написал.
Что значит hangup-а не было? А как мы тогда в h попали?

Sfinx: К сожалению замена Goto(quiz,s,1) на Dial(Local/s@quiz) ничего не изменила.

Re: Проиграть звук после повешенья трубки?

Добавлено: 14 окт 2012, 03:08
zzuz
Где тут экстеншен h ?

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

[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Goto (quiz,s,1)
[Oct 12 18:52:11] VERBOSE[31349] app_macro.c: == Channel 'SIP/baza5555-000014e3' jumping out of macro 'hangupcall'
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:1] Verbose("SIP/baza5555-000014e3", "2,Starting quiz") in new stack
[Oct 12 18:52:11] VERBOSE[31349] app_verbose.c: == Starting quiz
[Oct 12 18:52:11] VERBOSE[31349] pbx.c: -- Executing [s@quiz:2] Playback("SIP/baza5555-000014e3", "custom/q_hi") in new stack
[Oct 12 18:52:11] WARNING[31349] file.c: Failed to write frame
[Oct 12 18:52:11] VERBOSE[31349] file.c: -- <SIP/baza5555-000014e3> Playing 'custom/q_hi.alaw' (language 'ru')
[Oct 12 18:52:11] WARNING[31349] app_playback.c: ast_streamfile failed on SIP/baza5555-000014e3 for custom/q_hi

Re: Проиграть звук после повешенья трубки?

Добавлено: 14 окт 2012, 12:39
varnav
Строчкой выше, я его просто не привёл. Из экстеншена h выполняется goto в контекст quiz.

exten => h,3,Goto(quiz,s,1)

Re: Проиграть звук после повешенья трубки?

Добавлено: 14 окт 2012, 12:46
zzuz
и?

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

[Oct 12 18:52:11] WARNING[31349] app_playback.c: ast_streamfile failed on SIP/baza5555-000014e3 for custom/q_hi

Re: Проиграть звук после повешенья трубки?

Добавлено: 14 окт 2012, 13:03
varnav
Ну да, именно так. Даже понятно почему так:

When the 'h' extension is running, the call legs have already been torn down. There is no way to delay this happening, and you can't do anything in the 'h' extension that needs to read audio from the channel (since no audio will appear, the first time it tries to read audio it will abort). Thus Playback() or Background(), for example, does not work. Essentially, the only things that make sense to use in the 'h' extension are those that don't have anything to do with the external channel that was involved before the hangup. No audio, no DTMF, etc.

http://www.voip-info.org/wiki/view/Asterisk+h+extension

Только вот - у одного клиента всё работает! РАБОТАЕТ! Хотя везде написано что это невозможно. Но я прямо сейчас могу набрать номер и услышать как чёрт побери после положенной агентом колцентра трубки переадресовывается на опросник. В астере! Через goto в экстеншене h!
Вот что удивительно.