Transfer: Вернуть звонок тому, кто перевел.
Откуда: Москва
Сообщений: 3421
|
Re: Transfer: Вернуть звонок тому, кто перевел.
hpflash: litnimax: Oleg78: <...> А как вытащить $CHANNEL по конкретному uniqueid с диалплана?
Не думаю, что такая функция есть в готовом виде.
Если я правильно понял то это PickUpChan()
Вытаскивает звонок с $CHANNEL по названию канала
По uniqueid? При чем тут Pickup? :-)
|
Откуда: Москва
Сообщений: 4
|
Re: Transfer: Вернуть звонок тому, кто перевел.
что-то не стыкуется. Вы как-раз и показали участок, где "На Sip все работает как нада".... Тогда покажите, как происходит набор на аппаратные телефоны (кстати не ясно, чем вы их цепляете к Астериску ). Другими словами то место, где глючит. ИМХО, а может и я чего не увидел....
в том то и дело что на аппаратные телефоны идет по этому диал плану, если бы я знал где че глючит я бы исправил.
в CLI NOTICE Unable to create/find SIP channel for this INVITE <---- Грешу на это!
Никто не встречался?
Разница в том что софтовые телефоны могут определить разрыв связи, а аппаратные нет.
ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
} else {
ast_log(LOG_NOTICE, "Unable to create/find SIP channel for this INVITE\n");
- if (ignore)
+ if (ast_test_flag(req, SIP_PKT_IGNORE))
transmit_response(p, "503 Unavailable", req);
else
transmit_response_reliable(p, "503 Unavailable", req);
@@ -11003,7 +11010,7 @@
return res;
}
/*! \brief Handle incoming CANCEL request */
|
Откуда: Москва
Сообщений: 4
|
Re: Transfer: Вернуть звонок тому, кто перевел.
По uniqueid? При чем тут Pickup? :-)
извиняюсь ручник не снял :-D
|
Откуда: Волгоград
Сообщений: 62
|
Re: Transfer: Вернуть звонок тому, кто перевел.
exten => _XXX,1,Set(WHOISTHIS=${EXTEN}); Запоминаем, кто принял звонок.
exten => _XXX,n,FLG=${IF($[${FLG}=1]?2:${IF($[${FLG}=2]?3:1)})}; манипуляции с флагами
exten => _XXX,n,Dial(SIP/${EXTEN},20,tT); Звоним
exten => t,1,GotoIf($[${FLG}=2]?t:1000)
exten => t,2,HangUp
exten => t,1000,Dial(SIP/${WHOISTHIS},,tT)
Это написано из головы, могут быть мелкие косяки, но в целом алгоритм рабочий, у меня работает, просто нет возможности сейчас скопипастить точно.
Будут траблы со вторичным переводом, но тут нужно шаманить вторую строчку.
|
Откуда: Ростов-на-Дону
Сообщений: 10
|
Re: Transfer: Вернуть звонок тому, кто перевел.
Для FreePBX, без правки стандартных скриптов, для входящих и исходящих, клиенты Sip, Zap...
#echo "TRANSFER_CONTEXT = from-transfer" >> /etc/asterisk/globals_custom.conf
[from-transfer] ; (сокращенно)
exten => _X.,1,Set(TRNFEXT=${CUT(BLINDTRANSFER,,1)})
exten => _X.,n,GotoIf($["${TRNFEXT}" != "${CUT(CHANNEL,,1)}"]?incoming)
; входящий или исходящий
exten => _X.,n,Set(TRNFEXT=${CDR(src)})
exten => _X.,n,Goto(both)
exten => _X.,n(incoming),AGI(get_ext_from_ch|${TRNFEXT})
exten => _X.,n(both),NoOp(TRNFEXT="TRNFEXT")
exten => _X.,n,Dial(Local/${EXTEN}@from-internal,12)
exten => _X.,n,GotoIf($["${DIALSTATUS}" != "NOANSWER"]?NOANSWER)
exten => _X.,n(wait),Wait(5)
exten => _X.,n(NOANSWER),Dial(Local/${TRNFEXT}@from-internal/n)
exten => _X.,n,Macro(hangupcall)
exten => h,1,Macro(hangupcall)
для исходящих звонков транки не должны менять CallerID, входящие звонки до перевода могут быть направлены и перенаправлены без ограничений(группы, IVR, ...)
get_ext_from_ch - из CHANNEL получить exten
если просто на shell:
#!/bin/sh
declare -a array
while read -e ARG && [ "$ARG" ] ; do
array=(` echo $ARG | sed -e 's/://'`)
export ${array[0]}=${array[1]}
echo "${array[0]}=${array[1]}" >>/tmp/proba
done
TRNFEXT=`echo $1`
checkresults() {
while read line
do
case ${line:0:4} in
"200 " ) echo $line >&2
return;;
"510 " ) echo $line >&2
return;;
"520 " ) echo $line >&2
return;;
* ) echo $line >&2;;
esac
done
}
TRNFEXT=`asterisk -rx "database show DEVICE" | grep "/dial" | grep -i $TRNFEXT | cut -d/ -f3`
echo "Setting VARIABLE TRNFEXT to: $TRNFEXT" >&2
echo "SET VARIABLE TRNFEXT \"$TRNFEXT\""
checkresults
exit 0;
volody
|
Откуда: Хабаровск
Сообщений: 82
|
Re: Transfer: Вернуть звонок тому, кто перевел.
Спасибо Тебе, volody )))
|
Сообщений: 69
|
Re: Transfer: Вернуть звонок тому, кто перевел.
Также неплохо проверять на номер на доступность:
[from-transfer]
exten => _X.,1,Set(TRNFEXT=${CUT(BLINDTRANSFER,,1)})
; check if call is incoming or outgoing
exten => _X.,n,GotoIf($["${TRNFEXT}" != "${CUT(CHANNEL,,1)}"]?incoming)
exten => _X.,n,Set(TRNFEXT=${CDR(src)})
exten => _X.,n,Goto(both)
exten => _X.,n(incoming),AGI(get_ext_from_ch|${TRNFEXT})
exten => _X.,n(both),NoOp(TRNFEXT="${TRNFEXT}")
exten => _X.,n,ChanIsAvail(SIP/${EXTEN},s)
exten => _X.,n,GotoIf($[${LEN(${AVAILCHAN})} = 0]?wait)
exten => _X.,n,Dial(Local/${EXTEN}@from-internal,12)
exten => _X.,n,GotoIf($["${DIALSTATUS}" != "NOANSWER"]?NOANSWER)
exten => _X.,n(wait),Wait(5)
exten => _X.,n(NOANSWER),Dial(Local/${TRNFEXT}@from-internal/n)
exten => _X.,n,Macro(hangupcall)
exten => h,1,Macro(hangupcall)
|
Откуда: Ростов-на-Дону
Сообщений: 10
|
Re: Transfer: Вернуть звонок тому, кто перевел.
А если ${EXTEN} не sip, а iax, zap, или просто городской или сотовый номер? И зачем проверять, в FreePBX при:
Dial(Local/${EXTEN}@from-internal,12)
все проверки выполнятся и даже лучше проверится если func_devstate.c включена.
volody
|
Сообщений: 69
|
Re: Transfer: Вернуть звонок тому, кто перевел.
Если используется только SIP, то лучше проверять. Проверьте - увидите почему.
|
Сообщений: 19
|
Re: Рабочий пример для новичков в Trixbox
Trixbox 2.6.2.3
Дописать в extensions_custom.conf следующее:
[from-pstn-custom]
exten => _X.,1,Set(__TRANSFER_CONTEXT=custom-test_transfer)
[custom-test_transfer]
exten => _X.,1,NOOP(entering custom-test_transfer)
exten => _X.,n,Set(timeoutd=30); set timeout in seconds
exten => _X.,n,Set(extLeng=${LEN(${EXTEN})})
exten => _X.,n,NOOP(the extenlength is ${extLeng})
exten => _x.,n,Dial(local/${EXTEN}@from-internal,${timeoutd})
exten => _X.,n,Gotoif($["${DIALSTATUS}" = "ANSWER"]?hangup,callback)
exten => _X.,n,Set(CALLERID(name)=Return:${CALLERID(name)})
exten => _X.,n(callback),dial(local/${BLINDTRANSFER:4:${extLeng}}@from-internal)
exten => _X.,n(hangup),hangup()
exten => _*X.,1,Dial(local/${EXTEN}@from-internal,15)
exten => _*X.,n,Hangup()
Возможно, данный пример кому-нибудь облегчит жизнь и понимание сущности *
(с) взято с freepbx.org
|
|