Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

ChannelRedirect() и Callee

0

Здравствуйте. Прошу прощения за некропостинг. Копирую свой вопрос из этой ветки.

Аналогичная ситуация. Нужно, чтобы nway call мог собирать callee.

features.conf

[applicationmap]
nwaystart => *0,caller,Macro,nwaycall-start

extensions.conf

[macro-nwaycall-start]
exten => s,1,NoOp
  ; присоединяем к конференции собеседника
  same => n,Set(__CONFNO=900)
  ; вариант 1
  same => n,ChannelRedirect(${BRIDGEPEER},dynamic-nway,${CONFNO},1)
  ; вариант 2
  same => n,System(asterisk -rx 'channel redirect ${BRIDGEPEER} dynamic-nway,${CONFNO},1')
  ; вариант 3 (скрипт аналогичный топикстартеру)
  same => n,AGI(/var/lib/asterisk/agi-bin/redirect.php)

  ; присоединяем к конференции инициатора
  same => n,Playback(conf-placeintoconf)
  same => n,Wait(0.3)
  same => n,Playback(confbridge-join)
  same => n,Dial(Local/${CONFNO}@dynamic-nway)

[dynamic-nway]
exten => _XXX,1,Answer()
  same => n,Set(__CONFNO=${EXTEN})
  same => n,Set(MEETME_EXIT_CONTEXT=dynamic-nway-invite)
  same => n,Set(__DYNAMIC_FEATURES=)
  same => n,MeetMe(${CONFNO},pqMX)
  same => n,Hangup

Вариант 1 - не работает.

[2013-10-11 12:53:58] DEBUG[26734]: pbx.c:4265 pbx_extension_helper: Launching 'ChannelRedirect'
    -- Executing [s@macro-nwaycall-start:4] ChannelRedirect("SIP/501-0000000e", "SIP/provider-0000000d,dynamic-nway,900,1") in new stack
[2013-10-11 12:53:58] DEBUG[26734]: channel.c:2703 ast_softhangup_nolock: Soft-Hanging up channel 'SIP/provider-0000000d'
[2013-10-11 12:53:58] DEBUG[26734]: app_macro.c:435 _macro_exec: Executed application: ChannelRedirect

Вариант 2 - не работает.

[2013-10-11 12:51:46] DEBUG[26728]: pbx.c:4265 pbx_extension_helper: Launching 'System'
    -- Executing [s@macro-nwaycall-start:4] System("SIP/501-0000000c", "asterisk -rx 'channel redirect SIP/provider-0000000b dynamic-nway,900,1'") in new stack
    -- Remote UNIX connection
[2013-10-11 12:51:46] DEBUG[26731]: channel.c:2703 ast_softhangup_nolock: Soft-Hanging up channel 'SIP/provider-0000000b'

Вариант 3 - работает.

[2013-10-11 12:58:54] DEBUG[26744]: manager.c:4709 process_message: Running action 'Redirect'
[2013-10-11 12:58:54] DEBUG[26744]: channel.c:2703 ast_softhangup_nolock: Soft-Hanging up channel 'SIP/provider-00000011'
[2013-10-11 12:58:54] DEBUG[26744]: channel.c:5964 __ast_channel_masquerade: Planning to masquerade channel SIP/501-00000012 into the structure of AsyncGoto/SIP/501-00000012
[2013-10-11 12:58:54] DEBUG[26744]: channel.c:5974 __ast_channel_masquerade: Done planning to masquerade channel SIP/501-00000012 into the structure of AsyncGoto/SIP/501-00000012
[2013-10-11 12:58:54] DEBUG[26744]: channel.c:6549 ast_do_masquerade: Actually Masquerading SIP/501-00000012(6) into the structure of AsyncGoto/SIP/501-00000012(6)
[2013-10-11 12:58:54] DEBUG[26744]: channel.c:6753 ast_do_masquerade: Putting channel SIP/501-00000012 in alaw/alaw formats
[2013-10-11 12:58:54] DEBUG[26744]: chan_sip.c:6734 sip_fixup: SIP Fixup: New owner for dialogue 5ab4a8af421bef667fe4bcc527d2692c@192.168.2.33:5060: SIP/501-00000012 (Old parent: AsyncGoto/SIP/501-00000012<ZOMBIE>)
[2013-10-11 12:58:54] DEBUG[26741]: res_agi.c:3509 run_agi: AsyncGoto/SIP/501-00000012<ZOMBIE> hungup
[2013-10-11 12:58:54] DEBUG[26744]: channel.c:6829 ast_do_masquerade: Done Masquerading SIP/501-00000012 (6)
[2013-10-11 12:58:54] DEBUG[26744]: res_rtp_asterisk.c:849 ast_rtp_change_source: Changing ssrc from 662727108 to 1707455763 due to a source change
[2013-10-11 12:58:54] DEBUG[26745]: pbx.c:4265 pbx_extension_helper: Launching 'Answer'
    -- Executing [900@dynamic-nway:1] Answer("SIP/501-00000012", "") in new stack
[2013-10-11 12:58:54] DEBUG[26744]: manager.c:4290 match_filter: Examining event:
Event: Newchannel
Privilege: call,all
Channel: AsyncGoto/SIP/501-00000012
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum:
CallerIDName:
AccountCode:
Exten: s
Context: macro-nwaycall-start
Uniqueid: 1381481934.45

[2013-10-11 12:58:54] DEBUG[26744]: manager.c:4290 match_filter: Examining event:
Event: Masquerade
Privilege: call,all
Clone: SIP/501-00000012
CloneState: Up
Original: AsyncGoto/SIP/501-00000012
OriginalState: Up

    -- <AsyncGoto/SIP/501-00000012<ZOMBIE>>AGI Script /var/lib/asterisk/agi-bin/redirect.php completed, returning 4
[2013-10-11 12:58:54] ERROR[26744]: utils.c:1278 ast_careful_fwrite: fwrite() returned error: Connection reset by peer
  == Manager 'me_and_only_me' logged off from 127.0.0.1
[2013-10-11 12:58:54] DEBUG[26741]: app_macro.c:429 _macro_exec: Spawn extension (macro-nwaycall-start,s,4) exited non-zero on 'AsyncGoto/SIP/501-00000012<ZOMBIE>' in macro 'nwaycall-start'

Т.е. если ChannelRedirect() выполняется от Callee - каким-то образом работает только через AGI->AMI. При этом похоже, что просто оба канала редиректятся в контекст [dynamic-nway], т.к. инициатору далее должны выполняться Playback, Wait и т.д., но в выводе их нет.

Уважаемые гуру, адекватная работа этой хотелки в принципе возможна, или это косяк на уровне кода * и нужно искать другие варианты ?




Собственно по наводке zzuz нашел похожий баг на багтрекере *. https://issues.asterisk.org/jira/browse/ASTERISK-11896 Его почему-то отметили как пофиксеный, но не закоммитили ни в одну версию. Это оно?

удалить закрыть спам изменить тег редактировать

спросил 2013-10-11 17:41:45 +0400

bb2kp Gravatar bb2kp
105 7 1 8

1 Ответ

0

channelredirect не может применяться для трансфера самого себя на залоченном канале. это не баг,а фича. причина - в процессе трансфера должна выполнится еще одна блокировка.

все остальное работает.

ссылка удалить спам редактировать

ответил 2013-10-11 17:45:05 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

"Все остальное" - это для caller'а ? Да, нормально работает. Просто плюшка в том, что callee такая фича нужнее. Я думал, что если с оговорками оно пашет через AMI, то и само приложение в диалплане можно заставить. А какая альтернатива ? Transfer() ?

bb2kp ( 2013-10-11 17:57:09 +0400 )редактировать

все остальное - это в любых ситуациях когда канал НЕ заблокирован. лучшая альтернатива - внешний eventlistener и посылать userevent ему с просьбой трансфернуть. трансфер тоже не будет работать. причина та же. нельзя трансфернуть заблокированный канал. при трансфере меняется имя канала и как себя после этого должен вести макрос - неопредлено даже теоретически.

meral ( 2013-10-11 20:14:26 +0400 )редактировать

Я же не выбираю блокировать канал или нет - это делает приложение. Насчет внешнего слушателя идею не понял, выше два примера : System и AMI, пробовал также из консоли руками (самый внешний вариант) - не влияет. Если имеется в виду вешать какого-нибудь демона и пинать его, например, через Curl, чтобы он редиректил через тот же AMI, то это как то очень жирный вариант.

bb2kp ( 2013-10-11 22:57:36 +0400 )редактировать

вешать демона, пинать не через curl а через user event. http://www.voip-info.org/wiki/view/Asterisk+cmd+UserEvent

meral ( 2013-10-12 00:25:52 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2013-10-11 17:41:45 +0400

Просмотрен: 1,222 раз

Обновлен: Oct 11 '13

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.