https://github.com/staskobzar/exfastagi
Elixir FastAGI library
https://github.com/staskobzar/exfastagi
asterisk asterisk-agi asterisk-pbx elixir fastagi
Last synced: 3 months ago
JSON representation
Elixir FastAGI library
- Host: GitHub
- URL: https://github.com/staskobzar/exfastagi
- Owner: staskobzar
- License: gpl-3.0
- Created: 2022-05-04T13:46:39.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2022-05-05T01:07:34.000Z (about 3 years ago)
- Last Synced: 2025-01-04T04:47:33.146Z (5 months ago)
- Topics: asterisk, asterisk-agi, asterisk-pbx, elixir, fastagi
- Language: Elixir
- Homepage:
- Size: 43 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fastagi
[](https://github.com/staskobzar/exfastagi/actions/workflows/elixir.yml)
[](https://coveralls.io/github/staskobzar/exfastagi?branch=master)
[](https://github.com/staskobzar/exfastagi/blob/master/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`:
```elixir
def deps do
[
{:fastagi, "~> 0.1.0"}
]
end
```[Fastagi.Session commands](https://hexdocs.pm/fastagi/Fastagi.Session.html) documentation.
## Usage
Module to Fasagi processes each AGI connection with "handle_connection" callback withing a module that uses Fastagi. Module example:```elixir
defmodule MyAGI do
require Logger
use Fastagidef 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}")
endFastagi.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:
```elixir
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
```