как сделать исходящий вызов с freeswitch и воспроизвести файл после ответа на вызов назначения?

Я хочу написать веб-приложение, которое подключается к бесплатному коммутатору и совершает исходящий вызов на какой-либо номер назначения (шлюз для стационарных или внутренних sip-устройств) и воспроизводит некоторые звуки (может быть, сделать некоторую логику в сценарии lua).

Прочитав вики freeswitch, я нашел команду originate, но она у меня не работает (я просто проверяю внутренний номер sip - sofia/internal/username@ip ). Если команда originate может это сделать, как ее правильно использовать? Если есть другой способ, пожалуйста, скажите мне.


person Ahmad Dehnavi    schedule 25.04.2017    source источник


Ответы (5)


Команда Originate используется для выполнения вызова, а команда bridge используется для соединения вызова. Вы можете вызвать команду originate извне, используя сокет esl.

Примеры:

 originate {ignore_early_media=true,originate_timeout=60}sofia/gateway/name/number &playback(message)

См. здесь esl, написанный на node.js https://github.com/englercj/node-esl

person suren    schedule 14.06.2017

один из способов, который я тестирую, и он работает, - запустить скрипт lua из консоли freeswitch или ESL: (например, "luarun test.lua")

https://freeswitch.org/confluence/display/FREESWITCH/Lua+API+Reference#LuaAPIReference-session:hangupCause

obSession = freeswitch.Session("sofia/192.168.0.4/1002")
 
   -- Check to see if the call was answered
   if obSession:ready() then
    -- Play file here
   else   
    -- This means the call was not answered ... Check for the reason
    local obCause = obSession:hangupCause()
    freeswitch.consoleLog("info", "obSession:hangupCause() = " .. obCause )
    if ( obCause == "USER_BUSY" ) then              -- SIP 486
       -- For BUSY you may reschedule the call for later
    elseif ( obCause == "NO_ANSWER" ) then
       -- Call them back in an hour
    elseif ( obCause == "ORIGINATOR_CANCEL" ) then   -- SIP 487
       -- May need to check for network congestion or problems
    else
       -- Log these issues
    end
    end

person Ahmad Dehnavi    schedule 30.04.2017
comment
Я продолжаю получать RECOVERY_ON_TIMER_EXPIRE - person ; 02.02.2018

Вы можете сделать это очень легко из плана набора:

<action function="play-file" data="myfile.wav"/>
person Adam Wright    schedule 16.05.2017
comment
Как вы выполняете диалплан без входящего вызова, я хочу сделать исходящий вызов из веб-приложения. а что касается вашего кода, я думаю, что диалплан freeswitch должен быть похож на «‹action app=playback data=myfile.wav/›» - person Ahmad Dehnavi; 16.05.2017
comment
Одна из идей состоит в том, чтобы просто использовать номеронабиратель на основе командной строки для совершения звонков через freeswitch, такой как клиент JVoIP java voip. На самом деле JVoIP также может передавать вам голосовой файл. - person Adam Wright; 18.05.2017

Вы можете заставить воспроизведение wav, когда кто-то начинает звонок, выполните следующие действия.

  1. Поместите свою волну в папку freeswitch/conf.
  2. Добавьте приведенный ниже код в файл freeswitch/conf/autoload_configs.

  3. Запустите HTTP-сервер, который получает POST-запрос и возвращает ваш диалплан (который сообщает Freeswitch, что нужно воспроизвести ваш wav).

  4. Убедитесь, что ваш файл freeswitch/conf/autoload_configs/xml_curl.conf.xml выглядит так:
    <param name="gateway-url" value="http://yourIP:yourServerPort/dialplan.xml" bindings="dialplan"/>

Надеюсь это поможет.

person ArthurG    schedule 18.05.2017
comment
спасибо за ваш ответ, вы воспроизводите какой-то файл для кого-то, кто звонит. но я хочу, чтобы фрисвитч был частью вызова и начал исходящий вызов (пример для рекламы). Я ответил на свой вопрос раньше. - person Ahmad Dehnavi; 18.05.2017
comment
Вы имеете в виду что-то вроде это? Кстати, это входит в dialplan.xml - person ArthurG; 19.05.2017

вы можете достичь с помощью приложения socket [ESL].

https://wiki.freeswitch.org/wiki/Event_Socket_Outbound

person bhanuchandar    schedule 14.06.2017
comment
Хотя ссылка может содержать ответ, лучше опубликовать любое соответствующее решение в своем ответе на случай, если ссылка исчезнет. - person Bram; 14.06.2017
comment
Спасибо за ваше предложение, теперь я тоже буду публиковать ответ - person bhanuchandar; 14.06.2017