Elixir FastAGI library to build FastAGI servers and process Asterisk calls.
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.
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