
Marc
04.09.2018
10:07:52
нет
Ещё вопрос: в дебаг консоли нет ошибок в месте вызова playback?

Borik
04.09.2018
10:08:13
нет, только сообщение о несоответствии рэйта
switch_core_file.c:342 File /var/lib/freeswitch/storage/http_file_cache/53598a4413f70d87017a71f690931e27.wav sample rate 48000 doesn't match requested rate 8000

Marc
04.09.2018
10:08:53

Google

Marc
04.09.2018
10:09:05
А кодек 711 в ноге куда это играется?

Borik
04.09.2018
10:09:44
да

Alex
04.09.2018
10:10:05

Marc
04.09.2018
10:10:09
да
Тогда даунсамплинг и тестировать

Borik
04.09.2018
10:10:20
черт...
:)

Marc
04.09.2018
10:12:14
черт...
Если нужно давать именно ХД качество, нужно юзать Опус, но абонентский терминал должен поддерживать

Borik
04.09.2018
10:13:36
не, у меня совершенно другая задача. У меня есть хранилище, где лежат хер его знает какие файлы (в плане, какой пользователь промт загрузил, то и лежит), которые мне надо проиграть в канал.

Marc
04.09.2018
10:13:38
Типа такого

Alex
04.09.2018
10:14:51
назначить принудительно?

Google

Borik
04.09.2018
10:16:12
ну и хорошо б было, что б оно работало как-то так просто


Marc
04.09.2018
10:20:42
Запускаете из диалплана ваш луаскрипт с аргументом ${uuid}
Но я еще раз уточняю, что при таком способе (вызов из диалплана) после завершения вызова часть переменных будет недоступна, плюс в диалплане нужно задать hangup_after_bridge=false, а также выполнить set_zombie_exec при этом после завершения звонка сессия не убьется и из нее можно будет прочитать часть переменных
https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools%3A+set+zombie+exec
Возможно для вашей задачи (прочитать переменные _после_ завершения звонка) способ с curl xml который предложил коллега выше, будет проще


Алексей
04.09.2018
10:58:51
добрый день. есть расхождения по длительности звонка в CDR, между оператором и фрисвичом, расхождение с 1-2 секунды на звонок, подскажите куда копать ?

? Stan
04.09.2018
10:59:03
это нормально

Alex
04.09.2018
11:00:09

Алексей
04.09.2018
11:01:13
это нормально
выливается в разницу выставляемых счетов за телефонию...

? Stan
04.09.2018
11:01:58
Плюс фрисвич по дефолту округляет математическа, а оператор всегда вверх

Alex
04.09.2018
11:02:24

Marc
04.09.2018
11:02:32

Alex
04.09.2018
11:02:57
да

Marc
04.09.2018
11:03:01

Google

Alex
04.09.2018
11:03:55
Не срабатывает uuid_dump после бриджа - ошибка

Marc
04.09.2018
11:04:47
да
именно ошибка или в переменных _undef_ ?

Alex
04.09.2018
11:06:01
2018-09-04 14:05:39.941043 [INFO] switch_cpp.cpp:1365 -ERR No such channel!

Алексей
04.09.2018
11:06:11

Alex
04.09.2018
11:07:06
if (gate == "mixnet" and legA:ready()) then
session:execute("playback", "tone_stream://L=2;%(800,3200,425)");
if (gate == "mixnet" and legA:ready()) then
freeswitch.bridge(session, legA);
freeswitch.consoleLog("info",legA:getVariable("billsec"));
billsec = legA:getVariable("billsec");
API = freeswitch.API()
API:executeString("uuid_dump "..my_uuid);
freeswitch.consoleLog("info",API:executeString("uuid_dump "..my_uuid));
end;

? Stan
04.09.2018
11:07:17
механизм округления возможно изменить ? где почитать ?
надо брать переменную которая точное время фиксирует с долями секунды и самому окряглять. billmsec вроде называется или ка то так. Но разница всёравно будет, потому что сигнализация ваша не сразу доходит оператору, плюс его станции надо время на обработку.
Плюс если у вас фрисвич в виртуалке работает, то там может время плавать

Алексей
04.09.2018
11:08:17

? Stan
04.09.2018
11:08:43

Алексей
04.09.2018
11:09:03
больше 2х

? Stan
04.09.2018
11:09:21
а что за характер трафика? не с маленьким ацд?

Алексей
04.09.2018
11:10:01
транзит

Marc
04.09.2018
11:10:14
строки до вызова скрипта

? Stan
04.09.2018
11:10:29
транзит
ну вас еще накалывать могут чуток. Там процент, плюс от неточности процент, получается 2+

Marc
04.09.2018
11:11:15
а вы с этим пробовали? session:execute("set_zombie_exec")

Alex
04.09.2018
11:11:47
в диалплане прописано. сек...
<include>
<extension name="out_mixnet">
<condition field="${toll_allow}" expression="domestic"/>
<condition field="destination_number" expression="^(\+38|38)(\d{10})$">
<action application="set" data="early_media=true"/>
<action application="set" data="hangup_after_bridge=false"/>
<action application="set_zombie_exec"/>
<action application="set" data="instant_ringback=true"/>
<action application="set" data="ringback=${ru-ring}"/>
<action application="set" data="media_bug_answer_req=true"/>
<action application="lua" data="billing.lua '${accountcode}' '38$2' '${domain_name}' '${uuid}'"/>
</condition>
</extension>
</include>

Алексей
04.09.2018
11:16:25

Marc
04.09.2018
11:17:10

Google

Alex
04.09.2018
11:18:32
да, хочу в скрипте расчитывать, но не могу выловить его. А в базу он, зараза, пишется)
где то же он есть в какой то переменной

Marc
04.09.2018
11:21:53
Я сталкивался с подобной проблемой в более ранних версиях, в итоге я просто создал кастомные канальные переменные, относящиеся к тарифу и позволяющие вычислить стоимость, а сам расчёт делал с помощью триггера в базе, куда записывались все переменные
Лично у меня создалось впечатление что сами разрабы не уверены что происходит с сессией после разрыва соединения. Никто толком ничего не пишет

Alex
04.09.2018
11:23:49
может быть в скрипте задать 2 ноги и бриджевать их, не используя session, только пока не представляю как

Marc
04.09.2018
11:27:11

Alex
04.09.2018
11:28:45
1.6.19

Anton
04.09.2018
11:28:48
скажу страшное слово .) esl

Marc
04.09.2018
11:29:16

Alex
04.09.2018
11:29:50

Marc
04.09.2018
11:30:27
Я его не понимаю)
у фрисвича есть сокет, через который им можно управлять и подписываться на разные события
Это дает максимально полный контроль над всем

Alex
04.09.2018
11:31:02
Да это я знаю. Но не программер я. Мне тяжко это

Anton
04.09.2018
11:31:07
'Event-Name': 'CHANNEL_HANGUP_COMPLETE'
'variable_billmsec': '7900'
если милисекунды .)

Marc
04.09.2018
11:31:31
Ну да

Anton
04.09.2018
11:31:46
будет на каждой ноге
по своему hangup_complete .)

Google

Marc
04.09.2018
11:32:25

Anton
04.09.2018
11:33:23
нет

Marc
04.09.2018
11:33:31
:)

Anton
04.09.2018
11:33:32
в dialplan никакие изменения вносить не потребуется
только слушать

Marc
04.09.2018
11:35:22
в смысле слушать, посчитать и записать в базу?

Anton
04.09.2018
11:35:30
да

Marc
04.09.2018
11:35:56
а модуль который пишет в базу сам по себе, отключить?

Anton
04.09.2018
11:35:58
управлять вызовом из esl в озвученном сценарии не обязательно
<action application="lua" data="billing.lua '${accountcode}' '38$2' '${domain_name}' '${uuid}'"/>

Marc
04.09.2018
11:36:17
mod_odbc_cdr

Anton
04.09.2018
11:36:21
там я так понимаю вопрос того чтобы сюда передать нужное значение
а это уже как захочется
это не сильно связанные между собой вещи

Marc
04.09.2018
11:37:08
в работающем скрипте после завершения легБ прочитать ее биллсек

Anton
04.09.2018
11:39:33
не совсем понял сейчас... я за то чтобы в подобном сценарии написать логику на чём угодно что подцепится на сокет в фрисвитч, получит доступ к нужным событиям, и канальным переменным
а дальше - база, не база, не важно...
писать естественно так чтобы не блокировать сокет в процессе обработки, недавно кто то упоминал о том что у него есть опыт когда подписались на все события и работали с сокетом блокируя поток и при этом терялись сообщения

Marc
04.09.2018
11:42:14
у коллеги, как я понял вся логика реализована на луа, включая создание legB и bridge. Нужно по завершению legB прочитать из нее billsec так чтобы ее значение стало доступно в скрипте для дальнейшего использования. Правильно?

Alex
04.09.2018
11:42:36
а можно в текущем скрипте подключится к сокету и вытянуть нужные данные?