ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

FreeSWITCH - перевод звонка

Использование и настройка других открытых VoIP PBX

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

FreeSWITCH - перевод звонка

Сообщение denis21 » 17 июн 2014, 20:52

Приветствую вас, коллеги!

Суть задачи:
Юзер 1 принял звонок из внешнего транка от скажем юзера 2, тут понадобилось отправить юзера 2 юзеру 3 (Такой-же локальный абон fs как и юзер 1).
Юзер 1 ставит юзера 2 на ожидание, набирает по второй линии юзера 3, сообщает, тебе мол такой там звонок, с таким вопросом. Юзер 3 говорит, мол давай, переводи.
Юзер 1 делает перевод юзера 2 на юзера 3 и на этом забывает юзера 2 раз и на всегда.

Пробую вот в twinkle сделать слепой перевод - работает. Но при слепом переводе - понятн дело не то. Юзеру 1 надо поговорить с юзером 3, а потом переводить.
Второй вариант, как я понял, сделать удержание звонка (это twinkle делает автоматически), сделать перевод с передачей голоса, а потом сделать конференцию. Однако юзер 1 должен выйти из конференции не заметно для юзера 2. Ок - юзер 1 просто кладёт трубку.
Но в моём случае весь звонок на этом падает:

Код: выделить все
2014-06-17 19:36:36.840079 [NOTICE] switch_ivr_bridge.c:721 Hangup sofia/internal/sip:user1@10.101.127.201:42872 [CS_EXCHANGE_MEDIA] [NORMAL_CLEARING]
2014-06-17 19:36:36.840079 [NOTICE] sofia.c:716 Hangup sofia/internal/sip:user3@10.13.138.17:5060 [CS_EXCHANGE_MEDIA] [NORMAL_CLEARING]
2014-06-17 19:36:36.840079 [NOTICE] sofia.c:716 Hangup sofia/internal/user3@domain.ltd [CS_EXECUTE] [NORMAL_CLEARING]
2014-06-17 19:36:36.860090 [NOTICE] switch_core_session.c:1564 Session 7738 (sofia/internal/user3@domain.ltd) Ended
2014-06-17 19:36:36.860090 [NOTICE] switch_core_session.c:1568 Close Channel sofia/internal/user3@domain.ltd [CS_DESTROY]
2014-06-17 19:36:36.860090 [NOTICE] switch_ivr_bridge.c:1567 Hangup sofia/external/user2@sipgateway.ltd:5061 [CS_EXECUTE] [NORMAL_CLEARING]

Подскажите пожалуйста, в какую сторону копать?
denis21
 
Сообщений: 33
Зарегистрирован: 17 июн 2014, 20:28

Re: FreeSWITCH - перевод звонка

Сообщение Vlad1983 » 17 июн 2014, 20:57

проще всё: Dialplan_Tools_att_xfer
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: FreeSWITCH - перевод звонка

Сообщение denis21 » 17 июн 2014, 21:03

Я уже смотрел сегодня сей вариант. Не совсем понимаю тогда, на что биндить в bind_meta_app?
Или вариант, *1 номер юзера 3#? Почему в таком случае не использовать встроенные функции перевода в софтфоны и voip-девайсы?
Плюс да, кроме софтфонов у меня будут разные voip-девайсы, на которых например R - сразу клавиша перевода.
denis21
 
Сообщений: 33
Зарегистрирован: 17 июн 2014, 20:28

Re: FreeSWITCH - перевод звонка

Сообщение Vlad1983 » 17 июн 2014, 21:28

bind_meta_app перехватывает DTMF-последовательность из двух символов по умолчанию с ведущей *
<action application="bind_meta_app" data="1...
перехватит *1

<action application="bind_meta_app" data="1 b s execute_extension::attented_xfer XML features"/>
на B плече (ставится если переводить может отвечающий)

соответственно
<action application="bind_meta_app" data="1 a s execute_extension::attented_xfer XML features"/>
для перевода звонящим

<action application="bind_meta_app" data="1 ab s execute_extension::attented_xfer XML features"/>
при вутренних вызовах

нормальные аппараты поддерживают удерживание и трансфер без DTMF
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: FreeSWITCH - перевод звонка

Сообщение denis21 » 17 июн 2014, 21:42

Хм... Спасибо... Почему-то с с этой штукой у меня сегодня были проблемы:
В офисе есть одна база Gigaset C610A, на которой весят две трубки стоящие в разных отделах. Каждая трубка регистрируется на FS под разными пользователями. И при *любое_чило - звонок сразу отправлялся на одну из трубок, не дожидаясь пока я что нить введу в twinkle...
Пробовал вешать в разные extension:

Код: выделить все
       <extension name="входящие">
            <condition field="destination_number" expression="^перечисление_номеров_с_sip-транков$">
                <!--<action application="answer"/> --> <!-- Ответ происходит из Lua-скрипта. -->
                <action application="log" data="INFO Incoming call to ${destination_number}"/>
                <action application="set" data="domain_name=company.ltd" />
                <action application="bind_meta_app" data="0 b o execute_extension::att_xfer XML features"/>
                <action application="set" data="hangup_after_bridge=true"/>
                <action application="set" data="transfer_ringback=/opt/freeswitch-1.2/sounds/company-w-sounds/holdmusic2.wav"/>
                <action application="lua" data="luaivr.lua" />
            </condition>
        </extension>

Такой-же bind_meta_app в extension для внутр. номеров.
И сам att_xfer:
Код: выделить все
    <extension name="att_xfer">
     <condition field="destination_number" expression="^att_xfer$">
       <action application="read" data="3 4 '/opt/freeswitch-1.2/sounds/company-w-sounds/holdmusic2.wav' attxfer_callthis 30000 #"/>
       <action application="set" data="origination_cancel_key=#"/>
        <action application="log" data="INFO AXFR TO ${attxfer_callthis}@$${domain_name}" />
       <action application="att_xfer" data="user/${attxfer_callthis}@company.ltdt"/>
     </condition>
    </extension>
denis21
 
Сообщений: 33
Зарегистрирован: 17 июн 2014, 20:28

Re: FreeSWITCH - перевод звонка

Сообщение denis21 » 18 июн 2014, 00:24

Точней *0
При этом явно нигде не указано, что вызывать эту трубку.
denis21
 
Сообщений: 33
Зарегистрирован: 17 июн 2014, 20:28

Re: FreeSWITCH - перевод звонка

Сообщение Vlad1983 » 18 июн 2014, 07:18

<action application="bind_meta_app" data="0 b o execute_extension::att_xfer XML features"/>
с чего взято что третьем параметром должно быть "o"?
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: FreeSWITCH - перевод звонка

Сообщение denis21 » 18 июн 2014, 10:14

Спасибо, исправил... Взялось оно видимо из-за не достаточного понимания....
Сейчас штука такая:

2014-06-18 10:06:57.650104 [NOTICE] switch_core_session.c:2895 Execute att_xfer(user/${user_data(${attxfer_callthis}@company.ltd attr id)})
2014-06-18 10:06:57.650104 [WARNING] mod_dptools.c:3933 Can't find user [user3@server-hostname.mycompany.ltd]
2014-06-18 10:06:57.650104 [NOTICE] switch_ivr_originate.c:2661 Cannot create outgoing channel of type [user] cause: [SUBSCRIBER_ABSENT]

Хотя вроде в extension указал:

Код: выделить все
   <extension name="att_xfer">
     <condition field="destination_number" expression="^att_xfer$">
       <action application="read" data="3 4 '/opt/freeswitch-1.2/sounds/company-w-sounds/holdmusic2.wav' attxfer_callthis 30000 #"/>
       <action application="set" data="origination_cancel_key=#"/>
        <action application="set" data="domain_name=company.ltd" />
        <action application="set" data="domain=company.ltd" />
        <action application="log" data="INFO AXFRED TO ${attxfer_callthis}@$${domain_name}" />
       <action application="att_xfer" data="user/${user_data(${attxfer_callthis}@company.ltd attr id)}"/>
     </condition>
    </extension>

ps. У меня на FS мульти-доменная конфигурация.
Разобрался. Чуть позже опишу решение.
denis21
 
Сообщений: 33
Зарегистрирован: 17 июн 2014, 20:28

Re: FreeSWITCH - перевод звонка

Сообщение denis21 » 18 июн 2014, 16:36

Делаю сейчас на другой атске, (FS 1.2.23~32bit Win Server 2008) при входящем звонке вижу запись:
2014-06-18 16:42:52.606871 [INFO] switch_ivr_async.c:3701 Bound B-Leg: *0 execute_extension::att_xfer XML features
Однако на *0 никакой реакции нет...


Код: выделить все
           <extension name="входящие">
               <condition field="destination_number" expression="^Номера_с_транков$">
               <action application="bind_meta_app" data="0 ab s execute_extension::att_xfer XML features"/>
                   <action application="log" data="INFO Incoming call to ${destination_number}"/>
                     <action application="set" data="domain_name=mycompany.ltd" />
                   <action application="set" data="transfer_ringback=$${ru-ring}" />
                   <action application="set" data="ringback=$${ru-ring}" />
                   <action application="set" data="hangup_after_bridge=true"/>
                  
                  <action application="lua" data="callrouter.lua" />
               </condition>
           </extension>

         
         <extension name="внутренние-номера">
            <condition field="destination_number" expression="^(\d{3}|\D{3,})$" require-nested="false">
            <action application="set" data="dialed_extension=${destination_number}"/>

            <action application="bind_meta_app" data="0 ab s execute_extension::att_xfer XML features"/>
            <action application="set" data="default_language=ru"/>

            <!-- Конфигурация параметров звонка -->
            <action application="set" data="ringback=$${ru-ring}"/>
            <action application="set" data="transfer_ringback=$${ru-ring}"/>
            <action application="set" data="call_timeout=60"/>
            <!-- <action application="set" data="sip_exclude_contact=${network_addr}"/> -->
            <action application="set" data="hangup_after_bridge=true"/>
            <action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT"/>
            <!-- <action application="set" data="continue_on_fail=true"/> -->


            <!-- Добавляем а CDR информацию о звонке -->
            <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
            <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
            <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
            <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
            <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
            <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>


            <!-- Собственно звонки внутренним абонентам -->
            <action application="bridge" data="user/${dialed_extension}@${domain_name}"/>


         </condition>

      </extension>
denis21
 
Сообщений: 33
Зарегистрирован: 17 июн 2014, 20:28

Re: FreeSWITCH - перевод звонка

Сообщение Vlad1983 » 18 июн 2014, 16:51

Либо идет мимо этого диалплана, либо dtmf внутриканально.
Включать дебаг, смотреть логи.
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

След.

Вернуться в FreeSwitch, SER, Yate и другие

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH