Страница 1 из 2

FreeSWITCH и att_xfer на extension

Добавлено: 02 янв 2016, 21:03
tma
Всех с Новым Годом!

Мучаю тут FreeSWITCH и не могу почему-то победить довольно-таки простую вещь - трансфер.
С FreeSWITCH занимаюсь всего пару дней, до этого ни разу не щупал, поэтому не все понимаю... ;(

Схема такая:
Инициатор вызова из города -> FS -> IVR -> Город -transfer-> FS -> Город
Словами:
Вызов приходит из города, поступает в IVR, нажимается в меню цифра 1:

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

<entry action="menu-exec-app" digits="1" param="transfer 300 XML fmc-context"/>
300 - это короткий номер FMC, уходит через транк оператору (т.е. обратно в город).
Абонент 3XX тыкает кнопки *4301#, слушаем замечательную музыку, вызов уходит на короткий FMC номер 301 опять в город.
Абоненты 300 и 301 разговаривают друг с другом, а дальше - облом. Если повесить трубку на абоненте 300, то на 301
вызов завершается. При этом инициируемый вызов абонент остается на линии слушать тишину до бесконечности...
Описание вызова att_xfer:

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

<action application="bind_meta_app" data="4 b s execute_extension::att_xfer_kik XML ${context}"/>
сам extension att_xfer:

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

    <extension name="att_xfer_kik">
     <condition field="destination_number" expression="^att_xfer_kik$">
       <action application="read" data="3 4 'tone_stream://%(10000,0,350,440)' digits 30000 #"/>
       <action application="set" data="origination_cancel_key=#"/>
       <!-- <action application="att_xfer" data="user/${digits}@${context}"/> --> <!-- не работает, т.к. это не зарегистрированный юзер -->
       <action application="set" data="sip_h_X-return=true"/> <!-- в интернете предлагали -->
       <action application="att_xfer" data="<fmc_group=<GROUP>>loopback/${digits}"/>
       <!-- <action application="transfer" data="${digits} XML ${context}"> -->
     </condition>
    </extension>
Читал, что с loopback могут быть проблемы и т.д. Пробовал разные варианты, но пока ничего не получилось.
Нужно направлять именно в контекст, т.к. вызываться может не только внешний номер, но и зарегистрированный юзер.

Re: FreeSWITCH и att_xfer на extension

Добавлено: 03 янв 2016, 08:40
Vlad1983
вместо loopback попробовать одноразово для проверки

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

<action application="set" data="uuid_bridge_continue_on_cancel=true"/>
<action application="att_xfer" data="sofia/gateway/fmc/301,[leg_delay_start=10]sofia/gateway/tfop/89012345678"/>
если в таком виде все нормально, выдергивать списки альтернатив через mod_perl, mod_lua ... и вызывать оттуда же att_xfer

Re: FreeSWITCH и att_xfer на extension

Добавлено: 03 янв 2016, 10:22
tma
sofia плохо, т.к. нужно вызывать экстеншин, а не непосредственно FMC-номер.
На каких-то номерах может висеть что-то еще кроме мобильника.
Или универсально не сделать?

Re: FreeSWITCH и att_xfer на extension

Добавлено: 03 янв 2016, 11:18
Vlad1983
говорю как сделать универсально
не видите

по считанному через

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

<action application="read" data="3 4 'tone_stream://%(10000,0,350,440)' digits 30000 #"/>
номеру
формируется из данных БД, CRM, etc эта строка:

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

sofia/gateway/fmc/301,[leg_delay_start=10]sofia/gateway/tfop/89012345678
но сначала нужно проверить работает ли оно корректно в вашем случае

Re: FreeSWITCH и att_xfer на extension

Добавлено: 03 янв 2016, 22:07
tma
300 и 301 - это номера в FMC группе, оба номера - сотовые.
Не совсем понимаю причем здесь leg_delay_start - это же задержка, больше для перебора подходит (folow me/etc).
Через sofia я попробую, но универсальности не вижу. Оба номера в примере - внешние и оба, а меня интересует возможность вызова экстеншина, где какие-то номера могут быть внешними, а какие-то - внутренними.

Re: FreeSWITCH и att_xfer на extension

Добавлено: 03 янв 2016, 23:11
Glukinho
tma писал(а):С FreeSWITCH занимаюсь всего пару дней, до этого ни разу не щупал, поэтому не все понимаю... ;(
Где-то я это уже видел))

Re: FreeSWITCH и att_xfer на extension

Добавлено: 04 янв 2016, 01:36
tma
Vlad1983 писал(а): но сначала нужно проверить работает ли оно корректно в вашем случае
Некорректно. Прописываю вызов только FMC-номера (мне еще нужно заголовок передать для идентификации - P-Asserted-Identity):

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

       <action application="unset" data="sip_h_Privacy"/>
       <action application="unset" data="sip_h_P-Asserted-Identity"/>
       <action application="set" data="sip_h_P-Asserted-Identity=<sip:IDIDID@IP.IP.IP.IP>"/>
       <action application="att_xfer" data="sofia/gateway/fmcgw/${digits}"/>
На fmcgw вызов уходит, по tcpdump я вижу INVITE, но тут же FreeSWITCH отправляет CANCEL и возвращает вызов обратно.
Шлюз даже ответить-то не успевает...
Но даже если такой метод заработает, он очень ограниченный.
Хотелось бы так: номер 301 может быть зарегистрированным абонентом и FMC-номером.
Тогда нужно направить вызов на абонента и если его нет - на FMC.

Re: FreeSWITCH и att_xfer на extension

Добавлено: 04 янв 2016, 09:39
Vlad1983
без изменений только loopback может вызвать вместе с вагоном непредсказуемого поведения

с дублированием диалплана для перевода можно попробовать
в att_xfer заменяете на execute_extension и в целевом extension вместо bridge вызываете att_xfer

Re: FreeSWITCH и att_xfer на extension

Добавлено: 04 янв 2016, 11:36
tma
Ok, посмотрим, но это добавит логики, но почему после:

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

<action application="att_xfer" data="sofia/gateway/fmcgw/${digits}"/>
я получаю CANCEL?
Идет:
INVITE -> fmcgw
SIP/2.0 100 Trying -> fmcgw
CANCEL -> fmcgw
OK <- fmcgw
В случае с loopback его нет, хотя есть другие проблемы.

Re: FreeSWITCH и att_xfer на extension

Добавлено: 04 янв 2016, 12:46
tma
Последний вопрос снят - я сам дурак, завершал набор номера через '#', который сам же определил для прерывания оригинации.
Трансфер на внешний номер удался, буду копать дальше. Минус всего этого дела пока в том, что уж больно много писанины с непривычки...