freeswitchforum.com
https://freeswitchforum.com/

Выбор gateway/distributor скриптом.
https://freeswitchforum.com/viewtopic.php?f=6&t=848
Страница 1 из 1

Автор:  andrew_isakov [ 10 июл 2017 16:40 ]
Заголовок сообщения:  Выбор gateway/distributor скриптом.

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

Автор:  error [ 10 июл 2017 17:23 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

можно через
- mod_odbc_query
- mod_lcr
- perl
- python
- lua
и т.д. понеслось по кочкам дальше

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

Автор:  andrew_isakov [ 10 июл 2017 17:28 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

Как закрыть? :)
Как-то так:
Код:
<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>

Автор:  andrew_isakov [ 10 июл 2017 18:11 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

error писал(а):
можно через
- mod_odbc_query
- mod_lcr
- perl
- python
- lua
и т.д. понеслось по кочкам дальше

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



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

Автор:  andrew_isakov [ 10 июл 2017 18:15 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

не зашло в экстеншн... :(
Хотя он самый первый стоит. Разумеется, reloadxml, reload mod_dialplan делал. Консолидированный freeswitch.xml проверил - есть там...

Автор:  andrew_isakov [ 10 июл 2017 18:44 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

А нет. Зашло. Но action не выполнились...

Автор:  andrew_isakov [ 10 июл 2017 19:18 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

Заработало. Отладка.

Автор:  andrew_isakov [ 25 ноя 2017 22:39 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

На какое-то время пришлось отложить. Вернулся вновь.
Не работает. Не работает, как ожидается.
Диалплан:
Код:
<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])

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

Автор:  Samael28 [ 04 дек 2017 14:15 ]
Заголовок сообщения:  Re: Выбор gateway/distributor скриптом.

Почитайте, как Freeswitch формирует dialplan. И зачем нужен inline.
Когда у вас формируется bridge, значение destination_distributor скорее всего пустое. С destination_number та же песня.

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/