
Konstantin
03.10.2017
12:30:09
Там есть биндинги.

One
03.10.2017
12:30:23
Нужно что бы при событии писались данные в скуль.

Konstantin
03.10.2017
12:30:45
В скрипте, который из диал-плана аызывпется можешь consumer создать.

Alexey
03.10.2017
12:30:53
mod_event_socket поддерживает подписку и фильтрацию
EventConsumer только подписку

Google

One
03.10.2017
12:30:59
Сэмпл смотрел, ничего не понял, ткните пожалуйста пальцем куда смотреть

Konstantin
03.10.2017
12:30:59
odbc включай

One
03.10.2017
12:31:19
У меня postgres

Konstantin
03.10.2017
12:31:34
Для postge тоже есть odbc

Alexey
03.10.2017
12:31:35

One
03.10.2017
12:32:01
Как в базу писать это я знаю. Интересует именно инициация этой этой записи
Как можно стартануть запись при событии.

Konstantin
03.10.2017
12:33:06
Я ж не знаю, как у человека сделано что уже. Поэтому все вприантв озвучиваю.
В какой момент и какую информацию нужно записать?

Alexey
03.10.2017
12:33:11
Каком?

One
03.10.2017
12:33:24
При окончании звонка
Нужно данные этого звонка писать в базу, ну и при отмене звонка или трансфере его.

Alexey
03.10.2017
12:34:04
api_hangup_hook самый простой способ

Google

Konstantin
03.10.2017
12:34:37
Ну. Если событие хочется, то CHANNEL HANGUP COMPLETE

One
03.10.2017
12:34:43

Konstantin
03.10.2017
12:37:49
<configuration name="lua.conf" description="LUA Configuration"> <settings> <hook event="CHANNEL_HANGUP_COMPLETE" script=myhook.lua"/> </settings> </configuration>
Но событие другое и скрипт тоже.
https://wiki.freeswitch.org/wiki/Event_List#CHANNEL_HANGUP_COMPLETE

Alexey
03.10.2017
12:40:22
Можно например запустить luarun скрип c EventConsumer для одного канала :)
На самом деле можно придумать достаточно много вариантов обработки CDR

Konstantin
03.10.2017
12:41:46
Вариантов масса
mod_cdr_odbc собрать
Был такой, как мне помнится

Alexey
03.10.2017
12:43:09
не доверяю я экранированию в подобных модулях

Konstantin
03.10.2017
12:44:37
cdr_xml и через middleware
radius

Alexey
03.10.2017
12:45:50
fail2ban + isql :)
Но я думаю xml_cdr или Lua реализация на hangup hook вполне достаточно
На Lua только желательно предусматреть повторну отправку в случае ошибки

Denis 災 nobody
03.10.2017
12:49:08

Google

Alexey
03.10.2017
12:51:21
https://github.com/fusionpbx/fusionpbx/blob/master/resources/install/scripts/app/voicemail/resources/scripts/mwi_subscribe.lua#L85-L126

Denis 災 nobody
03.10.2017
12:51:37

Alexey
03.10.2017
12:52:34
Запускаеш отдельным потоком через luarun и далее обрабатываешь событие CHANNEL_HANGUP или любое какое захочешь

Denis 災 nobody
03.10.2017
12:54:33
а чем кролик не?

Alexey
03.10.2017
12:55:02
Главное чтобы скрипт успевал обрабатывать поток событий.
Например если бд недоступна не очень желательно прекращать чтение событий
Лучше вычитывать их и далее сохранять например в файле как это делает xml_cdr

Denis 災 nobody
03.10.2017
12:56:51
в очереди rabbitmq с контролем успешности записи..
пост - там будет норм

Alexey
03.10.2017
12:57:35
а если rabbitmq недоступен :) ?

Denis 災 nobody
03.10.2017
12:57:57
да, тоже этого опасаюсь
но шанс что мускуль будет недоступен выше на порядок
а что иногда будет тупить - уверенность.

Alexey
03.10.2017
12:59:09
Можно и на redis очередь локальную использовать

Denis 災 nobody
03.10.2017
12:59:16
лишь бы место не кончилось

One
03.10.2017
13:05:40

Denis 災 nobody
03.10.2017
13:07:50
https://freeswitch.org/confluence/display/FREESWITCH/mod_amqp

Alexey
03.10.2017
13:08:04
https://freeswitch.org/confluence/display/FREESWITCH/mod_amqp
Ну и как всегда исходиники :)

One
03.10.2017
13:09:39

Google

One
03.10.2017
13:10:31
в чем различие CHANNEL_HANGUP и CHANNEL_HANGUP_COMPLETE

Konstantin
03.10.2017
13:12:37
Одно до формирования финальных данных, попадающих в CDR, другое после.
Это как разница между BEGIN и END.

Alexey
03.10.2017
13:14:20
там есть еще REPORTING события вроде

Konstantin
03.10.2017
13:14:53
CS_REPORTING есть, это подстадия.
Одно событие, другое состояние.
Тонкий момент.
В одном состоянии может быть несколько событий.

One
03.10.2017
13:16:20

Alexey
03.10.2017
13:18:48
xml_cdr использует on_reportning в котором написано /*! executed when the state changes to reporting */

Konstantin
03.10.2017
13:19:51
Ещё раз говорю: есть события, а есть состояния канала.
И вызовы внутреннего API FreeSwitch на уровне C не всегда совпадают с событиями.

Alexey
03.10.2017
13:21:55
Так это понятно. Просто как отловить этот переход состояния.
Ну и можно экспортировать этот API в Lua и обрабатывать callbacks :)
mod_managed похоже дает доступ к этому API

Konstantin
03.10.2017
13:22:55
А я не очень понимаю, чем CHANNEL_HANGUP_COMPLETE не устраивает? Все переменные, сформированные за время жизни канала доступны и уже не будут меняться.
Простая проверка заголовка на CS_REPORTING и выполнение всех необходимых операций.
У меня так и делает во многих местах. Там, правда Perl через ELS сбоку, но это сути не меняет. Я в то время с LUA ещё не подружился.

One
03.10.2017
13:36:23
какие варианты еще есть помимо mod_amqp, для записи в скуль потока данных

Konstantin
03.10.2017
13:39:51
Формировать SQL файлы через mod_cdr_csv и скриптом их гурзить по крону. Надёжно как танк.

Alexey
03.10.2017
13:40:14
Есть 2 части. Получение набора данных для записи и далее запись этих данных
Первая часть может быть через файлы (cdr_csv) http сервер xml_cdr
Inbound ESL connection, EventConsumer

Google

Alexey
03.10.2017
13:41:05
После того как определишься с первой частью можно думать над второй
FusionPBX использует PHP PDO для записи CDR

Borik
03.10.2017
13:52:38
Коллеги, что не так со строкой
bgapi originate {execute_on_answer='sched_hangup +120 alloted_timeout'}sofia/internal/service@192.168.100.74:5080 &playback(/usr/share/freeswitch/sounds/music/8000/danza-espanola-op-37-h-142-xii-arabesca.wav)
молчит как убитый
в логах говорит, что проигрывает звонок:
EXECUTE sofia/internal/service@192.168.100.74:5080 playback(/usr/share/freeswitch/sounds/music/8000/danza-espanola-op-37-h-142-xii-arabesca.wav)

Konstantin
03.10.2017
13:53:39
Не идёт звук в сторону вызываемого абонента?

Borik
03.10.2017
13:53:52
да, музыка не играет
сам файл слышал, в нем все ок, музыка есть

Konstantin
03.10.2017
13:54:14
А что в 200 OK от него?
А трафик на то, что там в 200 OK указано идёт?


Borik
03.10.2017
13:55:13
INVITE sip:service@192.168.100.74:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.100.106;rport;branch=z9hG4bKp020e5U7QcyNH
Max-Forwards: 70
From: "" <sip:0000000000@192.168.100.106>;tag=F1B1j870y65vN
To: <sip:service@192.168.100.74:5080>
Call-ID: dc13c5a5-22e4-1236-23b3-5cb901c86de0
CSeq: 113183293 INVITE
Contact: <sip:mod_sofia@192.168.100.106:5060>
User-Agent: FreeSWITCH-mod_sofia/1.6.19-36-7a77e0b~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, refer
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 274
X-FS-Support: update_display,send_info
Remote-Party-ID: <sip:0000000000@192.168.100.106>;party=calling;screen=yes;privacy=off
v=0
o=FreeSWITCH 1507009975 1507009976 IN IP4 192.168.100.106
s=FreeSWITCH
c=IN IP4 192.168.100.106
t=0 0
m=audio 28740 RTP/AVP 0 8 101 13
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=rtpmap:13 CN/8000
a=ptime:20
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.100.106;rport=5060;branch=z9hG4bKp020e5U7QcyNH
From: "" <sip:0000000000@192.168.100.106>;tag=F1B1j870y65vN
To: <sip:service@192.168.100.74:5080>;tag=XcFc0S04jaDFN
Call-ID: dc13c5a5-22e4-1236-23b3-5cb901c86de0
CSeq: 113183293 INVITE
Contact: <sip:service@192.168.100.74:5080;transport=udp>
User-Agent: SoftSWITCH/1.6.13
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, refer
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 248
X-FS-Display-Name: service
X-FS-Display-Number: sip:service@192.168.100.74
X-FS-Support: update_display,send_info
Remote-Party-ID: "service" <sip:service@192.168.100.74>;party=calling;privacy=off;screen=no
v=0
o=FreeSWITCH 1507016217 1507016218 IN IP4 192.168.100.74
s=FreeSWITCH
c=IN IP4 192.168.100.74
t=0 0
m=audio 22668 RTP/AVP 0 101 13
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=rtpmap:13 CN/8000
a=ptime:20
по-моему, все хорошо
там никаких натов, ничего нету, чистая коммутация между двумя соседними подсетями


Konstantin
03.10.2017
13:55:53
Да. они в одной сети.

Borik
03.10.2017
13:55:54
ртп-поток даже есть
не, в соседних, там маска /27, но это не принципиально

Konstantin
03.10.2017
13:56:11
Смотри на принимающей стороне.

Alexey
03.10.2017
13:56:16
a sched_hangup это точно application а не api ?