VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Правильный CDR(dst) после макроса

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
Pardus
Сообщения: 8
Зарегистрирован: 06 апр 2012, 14:35

Правильный CDR(dst) после макроса

Сообщение Pardus »

Asterisk 1.8 + FreePBX

Ситуация:
Потребовалось при входящем звонке звонящему проиграть сообщение(только при условии поднятия трубы вызываемого).
Реализовал это через через разрыв каналов.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
направление звонка на оператора: DAHDI/g2/799,30,G(welcome,,1)

[welcome]
exten => s,1,Macro(client-channel)
exten => s,n,Macro(operator-channel)
exten => s,n,Hangup

[macro-operator-channel]
exten => s,1,Set(GLOBAL(operator_channel)=${CDR(channel)})
exten => s,n,Set(CHANNEL(language)=ru)
exten => s,n,Playback(ozhidajte-soedinenija)
exten => s,n,Wait(10)
exten => s,n,Hangup

[macro-client-channel]
exten => s,1,Set(CHANNEL(language)=ru)
exten => s,n,Playback(IVR/welcome_1)
exten => s,n,Set(__TRANSFER_CONTEXT=transfer-custom)
exten => s,n,MixMonitor(/var/spool/asterisk/monitor/${UNIQUEID}_(${STRFTIME(${EPOCH},,%d-%m-%Y)}_${STRFTIME(${EPOCH},,%H-%M)})_SRC(${CDR(src)})-DST(${CDR(dst)}).wav,b) ;
exten => s,n,Bridge(${operator_channel},p)
exten => s,n,Hangup
Ну и следствие в CDR(dst)=s. Как найти реальный dst, понятно(через CUT и CDR(channel)). А вот как потом в dst звонка записать то что найдено?
т.к. CDR(dst) только для чтения.
Можно конечно через sql, но как то не верится что нет решения при помощи *.
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Правильный CDR(dst) после макроса

Сообщение Vlad1983 »

попробовать так
направление звонка на оператора: DAHDI/g2/799,30,G(welcome,799,1)

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

[welcome]
exten => _.,1,Macro(client-channel)
exten => _.,n,Macro(operator-channel)
exten => _.,n,Hangup
ЛС: @rostel
Pardus
Сообщения: 8
Зарегистрирован: 06 апр 2012, 14:35

Re: Правильный CDR(dst) после макроса

Сообщение Pardus »

asterisk сразу в усмерть падает.)
в логах

file.c: Failed to write frame
[Apr 10 13:58:50] WARNING[4599] app_playback.c: ast_streamfile failed on Bridge/DAHDI/i2/799-5dec<ZOMBIE> for IVR/welcome_1

за бугром пишут что создание своего CDR поможет.

[incoming]
exten => _X.,1,Verbose(New call coming in)
exten => _X.,n,Set(CDR(original_dst)=${EXTEN})
exten => _X.,n,Goto(mainmenu,s,1)

на сколько жизнеспособное? А то экспериментировать пока больше не хочется * в работе. и только что я ее ронял)
Последний раз редактировалось Pardus 10 апр 2012, 12:20, всего редактировалось 1 раз.
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Правильный CDR(dst) после макроса

Сообщение Vlad1983 »

если поменять местами
exten => _.,1,Macro(client-channel)
exten => _.,n,Macro(operator-channel)
?
ЛС: @rostel
Pardus
Сообщения: 8
Зарегистрирован: 06 апр 2012, 14:35

Re: Правильный CDR(dst) после макроса

Сообщение Pardus »

а что это даст? просто клиент и оператор пойдут в противоположные контексты.
Аватара пользователя
zzz777z
Сообщения: 36
Зарегистрирован: 10 авг 2014, 20:48
Контактная информация:

Re: Правильный CDR(dst) после макроса

Сообщение zzz777z »

Использование вместо Macro, команды GoSub решит вашу проблему без модификации CDR.
1g0r
Сообщения: 126
Зарегистрирован: 25 ноя 2013, 16:56

Re: Правильный CDR(dst) после макроса

Сообщение 1g0r »

А если что-то типа такого?

[welcome]
exten => s,1,Set(SHARED(REALDSTNUM,${CHANNEL})=${EXTEN});
exten => s,n,Macro(client-channel)
exten => s,n,Macro(operator-channel)
exten => s,n,Hangup

[macro-operator-channel]
exten => s,1,Set(GLOBAL(operator_channel)=${CDR(channel)})
exten => s,n,Set(CHANNEL(language)=ru)
exten => s,n,Playback(ozhidajte-soedinenija)
exten => s,n,Wait(10)
exten => s,n,Hangup

[macro-client-channel]
exten => s,1,Set(CHANNEL(language)=ru)
exten => s,n,Playback(IVR/welcome_1)
exten => s,n,Set(__TRANSFER_CONTEXT=transfer-custom)
exten => s,n,MixMonitor(/var/spool/asterisk/monitor/${UNIQUEID}_(${STRFTIME(${EPOCH},,%d-%m-%Y)}_${STRFTIME(${EPOCH},,%H-%M)})_SRC(${CDR(src)})-DST(${SHARED(REALDSTNAME,${BRIDGEPEER})}).wav,b) ;
exten => s,n,Bridge(${operator_channel},p)
exten => s,n,Hangup

Не уверен что совпадает ${CHANNEL} с {BRIDGEPEER}... надо сравнивать.
А в CDR(dst) ожидается что? Ответивший оператор или набранный экстеншен?
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH