Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / Transfer: Вернуть звонок тому, кто перевел.

Transfer: Вернуть звонок тому, кто перевел.

Avatara of litnimax
Откуда: Москва
Сообщений: 3421

Re: Transfer: Вернуть звонок тому, кто перевел.

hpflash:

litnimax:

Oleg78:

<...> А как вытащить $CHANNEL по конкретному uniqueid с диалплана?
Не думаю, что такая функция есть в готовом виде.
Если я правильно понял то это PickUpChan()
Вытаскивает звонок с $CHANNEL по названию канала
По uniqueid? При чем тут Pickup? :-)
http://pbxware.ru - все для Asterisk! || Switchvox - сделано на Asterisk! Подробности на http://switchvox.ru
2009-03-02 17:46

Откуда: Москва
Сообщений: 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 */
2009-03-03 10:24

Откуда: Москва
Сообщений: 4

Re: Transfer: Вернуть звонок тому, кто перевел.

По uniqueid? При чем тут Pickup? :-)
извиняюсь ручник не снял :-D
2009-03-03 10:26

Откуда: Волгоград
Сообщений: 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)

Это написано из головы, могут быть мелкие косяки, но в целом алгоритм рабочий, у меня работает, просто нет возможности сейчас скопипастить точно.
Будут траблы со вторичным переводом, но тут нужно шаманить вторую строчку.
2009-03-04 23:27

Откуда: Ростов-на-Дону
Сообщений: 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
2009-05-04 21:26

Откуда: Хабаровск
Сообщений: 82

Re: Transfer: Вернуть звонок тому, кто перевел.

Спасибо Тебе, volody )))
2009-05-05 02:47

Сообщений: 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)
2009-05-15 14:23

Откуда: Ростов-на-Дону
Сообщений: 10

Re: Transfer: Вернуть звонок тому, кто перевел.

А если ${EXTEN} не sip, а iax, zap, или просто городской или сотовый номер? И зачем проверять, в FreePBX при:
Dial(Local/${EXTEN}@from-internal,12)
все проверки выполнятся и даже лучше проверится если func_devstate.c включена.
volody
2009-05-17 16:52

Сообщений: 69

Re: Transfer: Вернуть звонок тому, кто перевел.

Если используется только SIP, то лучше проверять. Проверьте - увидите почему.
2009-05-18 10:44

Сообщений: 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
2009-08-26 17:14

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru