fecyt писал(а):Я ж говорю не разбирались.
В моем случае имя канала нужно было сохранять затем, чтобы потом сбриджевать, т.к. никак не узнать в канале Б о существовании канала А, если не передать переменной, а Вы его начали и в макрос вписывать.
С опцией G, если не будете дополнительно постобработку CDR делать или продолжать диалплан опцией g, то не беда.
Этот вариант скорее всего Вам и подойдет, опять же нужна будет переменная с именем канала А, чтобы абонента и оператора можно было соединить.
Я уже попробовал. Работает так, как надо.
Решил в спокойной обстановке на выходных довести ваш пример до конца, когда никто не мешает и не торопит.
Вот в таком виде формально работает:
[incoming]
exten => provider,1,Set(__chan=${CHANNEL})
same => n,dial(SIP/50,,M(test2-dial-takeup))
[macro-test2-dial-takeup]
exten => s,1,noop(macros answer, ${chan})
same => n,System(echo "Channel: Local/100@test2a\nMaxRetries: 1\nRetryTime: 5\nWaitTime: 20\nContext: test2b\nExtension: 100\nPriority: 1\nSet: chan=${chan}\nArchive: yes\n" > /tmp/file.call)
same => n,System(mv /tmp/file.call /var/spool/asterisk/outgoing/)
same => n,Background(hello)
same => n,Background(hello)
same => n,Background(hello)
same => n,Background(hello)
same => n,Background(hello)
same => n,Bridge(${chan})
[test2a]
exten => _X.,1,NoOp(test2a ---- ${chan})
same => n,Answer()
same => n,Bridge(${chan})
same => n,Hangup()
[test2b]
exten => _X.,1,NoOp(test2b ---- ${chan})
same => n,Answer()
same => n,playback(tt-monkeys)
same => n,Hangup()
Только в 11 Астериске ругается на <ZOMBIE> каналы, которые образуются, а также даже после успешного разговора в CDR у всех разговоров billsec = 0. В общем некорректно работает.
А 13-й Астериск вообще напрочь вылетает после окончания звонка с сообщением "Ошибка сегментирования (сделан дамп памяти)"! Помогает только service asterisk restart.
Вариант с параметром G не подходит под LUA (проверил) - там нет понятия приоритетов (событие приходит в контекст и там ты с ним работаешь на языке программирования, никаких нумерованных строк, формально у всех команд приоритет 1).
Снова в тупике. Неужели в Астериске невозможно красиво воплотить простую идею - проиграть во входящий канал несколько файлов при поднятии трубки оператором?