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

Предупреждение о записи разговора для исходящих звонков Elastix

0

Добрый день. Настроил Elastix (в основном через веб-интерфейс). Разговоры некоторых экстеншенов пишутся, но предупреждение о том, что "разговор будет записан" в веб интерфейсе можно выставить только для входящих звонков. Что делать для исходящих? Я так понимаю, нужно делать custom контекст (в extension-custom.conf) с описанием исходящего звонка и добавлением команд

exten => s,n,Answer
exten => s,n,Wait(2)
exten => s,n,Playback(custom/mynotification)

Но я не пойму куда именно нужно вставлять данные команды, чтобы всё работало. Прикрепил часть моего extension-additional.conf, по логике нужно вставлять данные команды где-то здесь. Если подскажете куда, то я уже сам смогу добавить в extension-custom всё, что нужно, чтобы не перезаписывался основной файл после изменений в веб-интерфейсе.

[outrt-2] ; 243DinstarKSout
include => outrt-2-custom
exten => _09[678]XXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)

exten => _09[678]XXXXXXX/_10[12356],1,Macro(user-callerid,LIMIT,EXTERNAL,)
exten => _09[678]XXXXXXX/_10[12356],n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _09[678]XXXXXXX/_10[12356],n,Set(_NODEST=)
exten => _09[678]XXXXXXX/_10[12356],n,Gosub(sub-record-check,s,1(out,${EXTEN},))
exten => _09[678]XXXXXXX/_10[12356],n,Macro(dialout-trunk,21,11${EXTEN},,off)
exten => _09[678]XXXXXXX/_10[12356],n,Macro(dialout-trunk,22,11${EXTEN},,off)
exten => _09[678]XXXXXXX/_10[12356],n,Macro(dialout-trunk,23,11${EXTEN},,off)
exten => _09[678]XXXXXXX/_10[12356],n,Macro(outisbusy,)

;--== end of [outrt-2] ==--;

[macro-user-callerid]
include => macro-user-callerid-custom
exten => s,1,Set(TOUCH_MONITOR=${UNIQUEID})
exten => s,n,Set(AMPUSER=${IF($["${AMPUSER}" = ""]?${CALLERID(number)}:${AMPUSER})})
exten => s,n,GotoIf($["${CUT(CHANNEL,@,2):5:5}"="queue" | ${LEN(${AMPUSERCIDNAME})}]?report)
exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
exten => s,n,Set(AMPUSER=${DB(DEVICE/${REALCALLERIDNUM}/user)})
exten => s,n,GotoIf($["${AMPUSER}" = "none"]?limit)
exten => s,n,Set(AMPUSERCIDNAME=${DB(AMPUSER/${AMPUSER}/cidname)})
exten => s,n,GotoIf($["${AMPUSERCIDNAME:1:2}" = ""]?report)
exten => s,n,Set(AMPUSERCID=${IF($["${ARG2}" != "EXTERNAL" & "${DB_EXISTS(AMPUSER/${AMPUSER}/cidnum)}" = "1"]?${DB_RESULT}:${AMPUSER})})
exten => s,n,Set(__DIAL_OPTIONS=${IF($["${DB_EXISTS(AMPUSER/${AMPUSER}/dialopts)}" = "1"]?${DB_RESULT}:${DIAL_OPTIONS})})
exten => s,n,Set(CALLERID(all)="${AMPUSERCIDNAME}" <${AMPUSERCID}>)
exten => s,n,GotoIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})} & "${DB(AMPUSER/${AMPUSER}/concurrency_limit)}">"0" & "${GROUP_COUNT(${AMPUSER}@concurrency_limit)}">="${DB(AMPUSER/${AMPUSER}/concurrency_limit)}"]?limit)
exten => s,n,ExecIf($["${ARG1}"="LIMIT" & ${LEN(${AMPUSER})}]?Set(GROUP(concurrency_limit)=${AMPUSER}))
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/language)}" != ""]?Set(CHANNEL(language)=${DB(AMPUSER/${AMPUSER}/language)}))
exten => s,n(report),GotoIf($[ "${ARG1}" = "SKIPTTL" | "${ARG1}" = "LIMIT" ]?continue)
exten => s,n(report2),Set(__TTL=${IF($["foo${TTL}" = "foo"]?64:$[ ${TTL} - 1 ])})
exten => s,n,GotoIf($[ ${TTL} > 0 ]?continue)
exten => s,n,Wait(${RINGTIMER})
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n,Playback(im-sorry&an-error-has-occured&with&call-forwarding)
exten => s,n,Macro(hangupcall,)
exten => s,n(limit),Answer
exten => s,n,Wait(1)
exten => s,n,Playback(beep&im-sorry&your&simul-call-limit-reached&goodbye)
exten => s,n,Macro(hangupcall,)
exten => s,n,Congestion(20)
exten => s,n(continue),Set(CALLERID(number)=${CALLERID(number):0:40})
exten => s,n,Set(CALLERID(name)=${CALLERID(name):0:40})
exten => s,n,Set(CDR(cnum)=${CALLERID(num)})
exten => s,n,Set(CDR(cnam)=${CALLERID(name)})
exten => s,n,Set(CHANNEL(language)=${MASTER_CHANNEL(CHANNEL(language))})

exten => h,1,Macro(hangupcall,)

;--== end of [macro-user-callerid] ==--;

[macro-dialout-trunk]
include => macro-dialout-trunk-custom
exten => s,1,Set(DIAL_TRUNK=${ARG1})
exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = "foo"]?nomax)
exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?skipoutcid)
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
exten => s,n(skipoutcid),GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))
exten => s,n,ExecIf($["${FORCE_CONFIRM}"!="" ]?Set(DIAL_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS}M(confirm)))
exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1)
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(num,i)=${DIAL_NUMBER}))
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(name,i)=CID:${CALLERID(number)}))
exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk)
exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
exten => s,n(outnum),Set(the_num=${OUTNUM})
exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
exten => s,n(chanfull),Noop(max channels used up)

exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
exten => s-BUSY,n,Playtones(busy)
exten => s-BUSY,n,Busy(20)

exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
exten => s-ANSWER,n,Macro(hangupcall,)

exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
exten => s-NOANSWER,n,Progress
exten => s-NOANSWER,n,Playback(number-not-answering,noanswer)
exten => s-NOANSWER,n,Congestion(20)

exten => s-INVALIDNMBR,1,Noop(Dial failed due to trunk reporting Address Incomplete - giving up)
exten => s-INVALIDNMBR,n,Progress
exten => s-INVALIDNMBR,n,Playback(ss-noservice,noanswer)
exten => s-INVALIDNMBR,n,Busy(20)

exten => s-CHANGED,1,Noop(Dial failed due to trunk reporting Number Changed - giving up)
exten => s-CHANGED,n,Playtones(busy)
exten => s-CHANGED,n,Busy(20)

exten => _s-.,1,Set(RC=${IF($[${ISNULL(${HANGUPCAUSE})}]?0:${HANGUPCAUSE})})
exten => _s-.,n,Goto(${RC},1)

exten => 17,1,Goto(s-BUSY,1)

exten => 18,1,Goto(s-NOANSWER,1)

exten => 22,1,Goto(s-CHANGED,1)

exten => 23,1,Goto(s-CHANGED,1)

exten => 28,1,Goto(s-INVALIDNMBR,1)

exten => _X,1,Goto(continue,1)

exten => _X.,1,Goto(continue,1)

exten => continue,1(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} HANGUPCAUSE: ${HANGUPCAUSE} - failing through to other trunks)
exten => continue,n,Set(CALLERID(number)=${AMPUSER})

exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk)

exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)

exten => h,1,Macro(hangupcall,)

;--== end of [macro-dialout-trunk] ==--;
удалить закрыть спам изменить тег редактировать

спросил 2015-09-22 11:14:16 +0400

_jin Gravatar _jin flag of Ukraine
1 1 2

обновил 2015-09-22 12:26:40 +0400

Comments

dial с ключем M - M(x): Executes the macro (x) upon connect of the call (i.e. when the called party answers). See also U. IMPORTANT - The CDR 'billsecs' field is set to zero if the callee answers the call, but hangs up whilst the macro is still running (if the callee answers and the macro finishes, 'billsecs' contains the correct value). The macro can set ${MACRO_RESULT} to the following: В самом макросе уже читаете сообщение

awsswa ( 2015-09-22 13:31:24 +0400 )редактировать

Спасибо за комментарий, но я ещё не настолько сильно "в теме", чтобы понять изложенное Вами. Из всего этого я понял, что мне нужно создать макрос (например macro-out-announce) с Playback-ом и из основного контекста командой Dial(M(out-announce)) направить звонок в макрос?

_jin ( 2015-09-22 14:18:33 +0400 )редактировать

если погуглить то примеры найдет - другой разговор что это всё надо вставить в ovverride часть вашей freepbx - справитесь ?

awsswa ( 2015-09-22 16:49:02 +0400 )редактировать

Думаю, что справлюсь. Примеров конкретных не нашёл, конечно, всё лишь отдалённо подходит к моему случаю, но думаю что смогу составить из разных примеров нужный мне. Главный вопрос для меня, это - на каком этапе в вышеизложенном даилплане мне нужно вставить команду Dial(M(x))? И куда после объявления о записи должен возвратится звонок ${MACRORESULT} GOTO=? Или Может вообще не использовать ${MACRORESULT}? т.к. прочитал, что "Если Вы хотите, чтобы оба абонента были соединены по завершению выполнения макроса, вы НЕ ДОЛЖНЫ устанавливать значение переменной MACRO_RESULT."

_jin ( 2015-09-22 17:00:35 +0400 )редактировать

Вроде нашёл, мне нужно вставить в: [macro-dialout-trunk] exten => s,n,Dial(${OUT${DIALTRUNK}}/${OUTNUM},${TRUNKRINGTIMER},tM(out-announce))${DIALTRUNKOPTIONS})

и сделать макрос: [macro-out-announce]

exten => s,n,Wait(1)

exten => s,n,Playback(custom/VBZ)

exten => s,n,Return()

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

_jin ( 2015-09-22 17:25:39 +0400 )редактировать

Return уберите. вместо переписывания этой строчки просто добавьте в вебе в settings в опцию outbound dialling options ваш макрос M(out-announce).

meral ( 2015-09-23 14:18:22 +0400 )редактировать

С большим опозданием, но всё таки решил добавить простое решение вопроса, которое нашёл на основе комментария от meral. Всё просто: в вэб морде во вкладке Trunks>Edit Sip Trunk(Для готовых транков)>Asterisk Trunk Dial Options в поле прописываем параметр A(x) где x - путь к файлу announcement, в моём случае (custom/VBZ) и ставим рядом галочку Override. Всё, теперь при поднятии трубки вызываемым абонентом ему будет проигрываться звук из файла, а затем соединять с вызывающим. Вопрос закрыт.

_jin ( 2016-02-26 15:02:20 +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 ленту новостей

Статистика

Задан: 2015-09-22 11:14:16 +0400

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

Обновлен: Sep 22 '15

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