Call Us Today! 877.742.2583




Page tree
Skip to end of metadata
Go to start of metadata

Content exactly the same as Ruby ESL but with with less formatting.

Ruby Examples

ESL in Inbound mode.

require 'ESL'

con = ESL::ESLconnection.new('127.0.0.1', '8021', 'ClueCon')
esl = con.sendRecv('api sofia status')
puts esl.getBody

ESL in Outbound mode in sync operation.

require 'socket'
require 'ESL'

server = TCPServer.new(8084)
loop do
  con = server.accept
  fd = con.to_i
  esl = ESL::ESLconnection.new(fd)
  esl.execute('answer')
  esl.execute('playback', '/usr/local/freeswitch/sounds/music/8000/suite-espanola-op-47-leyenda.wav')
  esl.execute('hangup')
end

ESL in Outbound async full mode (<action application="socket" data="localhost:8086 async full"/>). It forks a process of every connection in order to support simultaneous sessions.

#!/usr/bin/ruby

require "ESL"
require 'socket'
include Socket::Constants
bind_address = "127.0.0.1"
bind_port = 8086

def time_now
  Time.now.strftime("%Y-%m-%d %H:%M:%S")
end

socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.sockaddr_in(bind_port, bind_address)
socket.bind(sockaddr)
socket.listen(5)
puts "Listening for connections on #{bind_address}:#{bind_port}"
loop do
  client_socket, client_sockaddr = socket.accept #_nonblock
  pid = fork do
    @con = ESL::ESLconnection.new(client_socket.fileno)
    info = @con.getInfo
    uuid = info.getHeader("UNIQUE-ID")
    @con.sendRecv("myevents")
    @con.sendRecv("divert_events on")

    puts "#{time_now} [#{uuid}] Call to [#{info.getHeader("Caller-Destination-Number")}]"
    @con.execute("log", "1, Wee-wa-wee-wa")
    @con.execute("info", "")
    @con.execute("answer", "")
    @con.execute("playback", "/usr/local/freeswitch/sounds/music/8000/suite-espanola-op-47-leyenda.wav")

    while @con.connected
      e = @con.recvEvent

      if e
        name = e.getHeader("Event-Name")
        puts "EVENT: #{name}"
        break if name == "SERVER_DISCONNECTED"
        if name == "DTMF"
          digit = e.getHeader("DTMF-DIGIT")
          duration = e.getHeader("DTMF-DURATION")
          puts "DTMF DIGIT #{digit} (#{duration})"
          if digit == "5"
            @con.execute("log", "1, WHA HA HA. User pressed 5")
          elsif digit == "8"
           # TODO: close connection without hangup in order to proceed in dialplan. How?
          elsif digit == "9"
            @con.execute("transfer", "99355151")
          end
        end

      end
    end
    puts "Connection closed"
  end

  Process.detach(pid)
end