freeswitchforum.com

Форум поддержки FreeSWITCH

FreeSWITCH is a registered trademark of Anthony Minessale. Official FreeSWITCH site.

Текущее время: 28 мар 2024 21:28

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 10 июл 2017 16:40 

Зарегистрирован: 28 окт 2013 19:16
Сообщения: 41
Здравы будьте!
Подскажите пожалуйста, как можно реализовать следующую штуку.
Имеется таблицы ABC от Россвязи. Завёрнуты в базу, нормализованы с gate/distributor'ми. Необходимо реализовать dialplan, получающий gate/distributor путём запроса из этой базы. Как хотя бы подступиться. Гугль не помог (может быть, не те слова использовал), поиск по форуму "dialplan script" был послан, т.к. указанные слова поисковик счёл "общеупотребимыми", так что не серчайте, если это есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 10 июл 2017 17:23 

Зарегистрирован: 23 авг 2014 11:49
Сообщения: 368
Откуда: Казань
можно через
- mod_odbc_query
- mod_lcr
- perl
- python
- lua
и т.д. понеслось по кочкам дальше

в общем одни sql-запросы

_________________
Пути IP-пакета неисповедимы


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 10 июл 2017 17:28 

Зарегистрирован: 28 окт 2013 19:16
Сообщения: 41
Как закрыть? :)
Как-то так:
Код:
<extension name="Select Distributor">
      <action application="log" data="INFO: Выбор дистрибьютора для ${destination_number}"/>
     
     <action application="python" data="destination_distributor=${python(select_distributor)}"/>
     <!-- destination_number передаётся в session -->
     <action application="log" data="INFO: Дистрибьютор ${destination_distributor} для ${destination_number}"/>
       
    <action application="bridge" data="sofia/gateway/${distributor(${destination_distributor})}/${destination_number}"/>
</extension>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 10 июл 2017 18:11 

Зарегистрирован: 28 окт 2013 19:16
Сообщения: 41
error писал(а):
можно через
- mod_odbc_query
- mod_lcr
- perl
- python
- lua
и т.д. понеслось по кочкам дальше

в общем одни sql-запросы



с запросами оно и так ясно. Трудность была в самом диалплане прописать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 10 июл 2017 18:15 

Зарегистрирован: 28 окт 2013 19:16
Сообщения: 41
не зашло в экстеншн... :(
Хотя он самый первый стоит. Разумеется, reloadxml, reload mod_dialplan делал. Консолидированный freeswitch.xml проверил - есть там...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 10 июл 2017 18:44 

Зарегистрирован: 28 окт 2013 19:16
Сообщения: 41
А нет. Зашло. Но action не выполнились...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 10 июл 2017 19:18 

Зарегистрирован: 28 окт 2013 19:16
Сообщения: 41
Заработало. Отладка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 25 ноя 2017 22:39 

Зарегистрирован: 28 окт 2013 19:16
Сообщения: 41
На какое-то время пришлось отложить. Вернулся вновь.
Не работает. Не работает, как ожидается.
Диалплан:
Код:
<include>
    <extension name="Select Distributor">
        <condition field="destination_number" expression="^(\+7|8)?(\d{10})$|^(\d{6})$" break="never">
        <action application="log" data="INFO: select_distributor for ${destination_number}"/>
        <action application="set" data="args=${destination_number}"/>
        <action application="python" data="destination_distributor=${python(select_distributor)}"/>
        <action application="bridge" data="sofia/gateway/${distributor(${destination_distributor})}/${destination_number}"/>
        <action application="log" data="INFO: select_distributor ${destination_distributor} for ${destination_number}"/>
        </condition>
    </extension>
</include>

скрипт:
Код:
def fsapi(session, stream, env, args):
    destination_number = session.getVariable('destination_number')
    fs.consoleLog('info', 'select_distributor destination_number=%s start...\n' % destination_number)
    if destination_number[0] != '0':
        destination_number = destination_number[-10:]
        if len(destination_number) == 6:
            destination_number = '8362' + destination_number
        if len(destination_number) == 10:
            fs.consoleLog('info', 'select_distributor %s start...\n' % destination_number)

            db = pg2.connect('dbname=50eb8a3c0e444176ea5139ad5de941cd79daa8b9 '\
                             'user=freeswitch password="freeswitch" '\
                             'host=192.168.222.179 port=5432')

            SELECT = 'select dst.name, dst.cut_code, dst.id '\
                     'from routes_mask roma '\
                     'join operators op on (op.id=roma.operator_id) '\
                     'left join distributors dst on (dst.id=op.distributor_id) '\
                     'join regions reg on (reg.id=roma.region_id) '\
                     'where (aaa=%s and %s between range_a and range_b) and '\
                     'dst.is_active and (dst.all_home or reg.is_home) '\
                     'order by roma.timestamp desc '\
                     'limit 1;'
            ARGS = (destination_number[:3], int(destination_number[3:]), )
            c = db.cursor()
            c.execute(SELECT, ARGS)
            distributor = c.fetchone()
            c.close()
            db.close()
            if distributor:
                fs.consoleLog('info', 'select_distributor distributor: %s\n' % distributor[0])
                destination_number = '+7' + destination_number
                session.setVariable('destination_number', destination_number)

                stream.write(distributor[0])

Оно как бы работает, но не звонит. И дальше по диалплану не идёт.
Что необходимо оправить?
База сделана на основе предоставляемых россвязью файлов. Наверное, многие посылали лучи добра в сторону закона об отмене мобильного рабства.
Подозреваю, что что-то не так с диалпланом.
В идеале всё должно на этой паре и заканчиваться.
Благодарю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выбор gateway/distributor скриптом.
СообщениеДобавлено: 04 дек 2017 14:15 

Зарегистрирован: 22 окт 2015 20:31
Сообщения: 156
Откуда: Киев
Почитайте, как Freeswitch формирует dialplan. И зачем нужен inline.
Когда у вас формируется bridge, значение destination_distributor скорее всего пустое. С destination_number та же песня.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB