View Source Fastagi
Elixir FastAGI library to build FastAGI servers and process Asterisk calls.
installation
Installation
If available in Hex, the package can be installed
by adding fastagi
to your list of dependencies in mix.exs
:
def deps do
[
{:fastagi, "~> 0.1.0"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/fastagi.
usage
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