Size: a a a

2020 November 20

AK

Andrey Kryukov in ru_freeswitch
Коллеги, а подскажите пожалуйста Freeswitch имеет какое-то свое понимание о статусных ответах и о причинах завершения. Например, если я в ответ на Invite  получу  480 Temporarily Unavailable, то в переменных
канальных увижу last_bridge_hangup_cause = [NO_USER_RESPONSE]
Если я сделаю session:hangup("NO_USER_RESPONSE") то етвет о завершении от фрисвича будет 408 Request Timeout
Вопрос как поступать и как зеркально пробрасывать ответы определенного типа ?
Пользоваться для анализа канальными переменными вида  
sip_invite_failure_status: [480]
sip_invite_failure_phrase: [Temporarily Unavailable]
и звершать вызов  путем выполнения
session:execute("respond","480"); ?
Просто странно получается , что
continue_on_fail использует такую запись
NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,NO_ROUTE_DESTINATION, но это никак не соотносится с реальной причиной которая бала получена в А-ноге
источник

BB

Borik Bobrujskov in ru_freeswitch
Если надо пробрасывать реальную причину со второго плеча, делайте что-то вроде
hangup ${bridge_hangup_cause}
...или как там эту переменную зовут, не помню
источник

BB

Borik Bobrujskov in ru_freeswitch
источник

BB

Borik Bobrujskov in ru_freeswitch
А вообще, сам об это спотыкался и материал разработчиков. Там был какой-то нюанс, типа "если hangup_after_bridge=true и continue_in_fail=false" то пробрасывается as is, но в условиях не уверен
источник

AK

Andrey Kryukov in ru_freeswitch
Borik Bobrujskov
Если надо пробрасывать реальную причину со второго плеча, делайте что-то вроде
hangup ${bridge_hangup_cause}
...или как там эту переменную зовут, не помню
пробросил через respond "${sip_invite_failure_status} ${sip_invite_failure_phrase}"
источник

AK

Andrey Kryukov in ru_freeswitch
Borik Bobrujskov
А вообще, сам об это спотыкался и материал разработчиков. Там был какой-то нюанс, типа "если hangup_after_bridge=true и continue_in_fail=false" то пробрасывается as is, но в условиях не уверен
да на досуге покурю на эту тему и попробую, спасибо
источник
2020 November 21

AK

Andrey Kryukov in ru_freeswitch
коллеги есть вопрос касательно lua
session:execute("app","data");
Это выполнит Application на текущей ноге,  а как можно из луа получить
доступ к session2, допустим по uuid ?
Я хочу в определенный момент на второй ноге выполнить
bind_meta_app.
Как получить доступ к объекту сессии, которая порождена через XML Dialplan
<action application="bridge" data="....."/>   ?
источник

АХ

Алексей Хабуляк... in ru_freeswitch
Andrey Kryukov
коллеги есть вопрос касательно lua
session:execute("app","data");
Это выполнит Application на текущей ноге,  а как можно из луа получить
доступ к session2, допустим по uuid ?
Я хочу в определенный момент на второй ноге выполнить
bind_meta_app.
Как получить доступ к объекту сессии, которая порождена через XML Dialplan
<action application="bridge" data="....."/>   ?
вроде никак. можете попробовать через api сделать sendmsg(отправить event.) но я не уверен. сам так не делал
sendmsg
call-command: execute
execute-app-name:
execute-app-arg:
event-lock: true/false
источник

А

Александр in ru_freeswitch
Andrey Kryukov
коллеги есть вопрос касательно lua
session:execute("app","data");
Это выполнит Application на текущей ноге,  а как можно из луа получить
доступ к session2, допустим по uuid ?
Я хочу в определенный момент на второй ноге выполнить
bind_meta_app.
Как получить доступ к объекту сессии, которая порождена через XML Dialplan
<action application="bridge" data="....."/>   ?
я так понимаю что вместо документации вы в чатик ходите?
источник

AK

Andrey Kryukov in ru_freeswitch
Александр
я так понимаю что вместо документации вы в чатик ходите?
Ну что вы, в самом деле, я не жду что за меня решат все мои проблемы.

Я искал, но скорее всего пропустил. Документация по FS  не маленькая. Из того какие я изыскания провел, то из скрипта запущенного на А ноге получить доступ к объекту сессии Б-ноги нельзя, я  провел несколько часов раскуриваю документацию(но может не в тех местах курил, конечно)
Касательно же bind_meta_app я тоже внимательно изучил и если ноги В состоянии UNBRIDGED то шалость неудастся.

В чатик я хожу за советом, а не за решением, если что
источник

А

Александр in ru_freeswitch
ноги б в состоянии UNBRIDGED не являются б ногами
источник

А

Александр in ru_freeswitch
какую логику в целом хотите получить?
источник

А

Александр in ru_freeswitch
источник

AK

Andrey Kryukov in ru_freeswitch
изначально хотелось делать dtmf hold , то есть биндить на кнопку выполнение команды холд и потом делать бинд с ключем i1 для анхолда
источник

AK

Andrey Kryukov in ru_freeswitch
да есть конечно uuid_hold toggle
источник

AK

Andrey Kryukov in ru_freeswitch
источник

AK

Andrey Kryukov in ru_freeswitch
точнее даже не так
A разговаривает с Б
Б жмет последовательность DTMF  выполняется hold на ноге А
Б жмет последовательность в статусе на холде  - выполняется unhold  на  ноге A через applicahion  hold unhold
Если же так логически нельзя то планировал использовать uuid_hold
Еще нашел uuid_phone_event <uuid> hold|talk , думал может делать soft_hold  и потом в нужную ногу посылать оповещение о холде
источник

AK

Andrey Kryukov in ru_freeswitch
Таким образом получается что мне отлов DTMF  нужно производить на одной ноге а выполнять на другой, что вообщем-то корректно работает для случая когда звонки bridged, но анхолд такая же логика поведения, а там забиндить на одну ногу отлов DTMF  а исполнение на противоположной нельзя потому что UNBRIDGED/ Вот в том-то и суть проблемы, что нужно либо получить объект сессии по uuid  либо иметь возможность как-то выполнить APP  на ноге о которой я знаю uuid
источник
2020 November 22

BB

Borik Bobrujskov in ru_freeswitch
App на плече, о котором Вы знаете uuid, делается при помощи uuid_broadcast

Но я не очень понимаю, зачем Вам из одного плеча ставить на холд второе
источник

BB

Borik Bobrujskov in ru_freeswitch
И почему при холде у Вас разваливается бридж
источник