Skip to content

staskobzar/exfastagi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fastagi

Elixir CI Coverage Status GPLv3 license

Elixir FastAGI library to build FastAGI servers and process Asterisk calls.

Installation

The package can be installed by adding fastagi to your list of dependencies in mix.exs:

def deps do
  [
    {:fastagi, "~> 0.1.0"}
  ]
end

Fastagi.Session commands documentation.

Usage

Module to Fasagi processes each AGI connection with "handle_connection" callback withing a module that uses Fastagi. Module example:

defmodule MyAGI do
  require Logger
  use Fastagi

  def handle_connection(sess) do
    IO.puts("========================================")
    IO.inspect(sess)

    with {:ok, _} <- Fastagi.Session.answer(sess),
         {:ok, _} <- Fastagi.Session.verbose(sess, "Hello there from exFastagi"),
         {:ok, resp} <- Fastagi.Session.get_variable(sess, "VARFOO"),
         :ok <- Logger.info("VARFOO = #{resp.value}"),
         {:ok, _} = Fastagi.Session.hangup(sess) do
      IO.puts("=================================================")
      IO.puts("| session is done")
      IO.puts("=================================================")
    else
      :hangup -> Logger.warn("Session channel was hangup by Asterisk")
      {:error, err} -> Logger.error("Session error: #{err}")
    end

    Fastagi.Session.close(sess)
  end
end

Starting Fastagi.Server can be done directly via "start_link" function that receives port and module name as arguments. Can also be used in application. For example:

defmodule MyMAGI.App do
  use Application

  @impl true
  def start(_type, _args) do
    children = [
      Supervisor.child_spec({Task, fn -> Fastagi.Server.start_link(4575, MyAGI) end},
        restart: :permanent
      )
    ]

    Supervisor.start_link(children, strategy: :one_for_one)
  end
end