Current section

Files

Jump to
ex_ussd lib ex_ussd.ex
Raw

lib/ex_ussd.ex

alias ExUssd.Utils
defmodule ExUssd do
@moduledoc """
USSD interation
"""
@provider Application.get_env(:ex_ussd, :gateway) || AfricasTalking
@doc """
Navigation
## Configuration
Add below config to dev.exs / prod.exs files
`config.exs`
```elixir
config :ex_ussd :provider, AfricasTalking
```
## Example
iex> defmodule MyHomeHandler do
...> @behaviour ExUssd.Handler
...> def handle_menu(menu, _api_parameters) do
...> menu |> Map.put(:title, "Welcome")
...> end
...>end
iex> menu = ExUssd.Menu.render(name: "Home", handler: MyHomeHandler)
iex> ExUssd.goto(
...> internal_routing: %{text: "", session_id: "session_01", service_code: "*544#"},
...> menu: menu,
...> api_parameters: %{
...> "sessionId" => "session_01",
...> "phoneNumber" => "254722000000",
...> "networkCode" => "Safaricom",
...> "serviceCode" => "*544#",
...> "text" => ""
...> }
...> )
{:ok, "CON Welcome"}
"""
@spec goto(
internal_routing: ExUssd.Ussd.internal_routing(),
menu: ExUssd.Ussd.menu(),
api_parameters: ExUssd.Ussd.api_parameters()
) :: any()
def goto(internal_routing: internal_routing, menu: menu, api_parameters: api_parameters),
do:
@provider.goto(
internal_routing: internal_routing,
menu: menu,
api_parameters: api_parameters
)
@doc """
## Example
iex> ExUssd.end_session(session_id: "session_01")
{:error, :not_found}
"""
def end_session(session_id: session_id), do: @provider.end_session(session_id: session_id)
def get_menu(session_id: session_id), do: @provider.get_menu(session_id: session_id)
@doc """
This a helper function that helps simulate ussd call
## Example
iex> defmodule MyHomeHandler do
...> @behaviour ExUssd.Handler
...> def handle_menu(menu, _api_parameters) do
...> menu |> Map.put(:title, "Welcome")
...> end
...> end
iex> menu = ExUssd.Menu.render(name: "Home", handler: MyHomeHandler)
iex> ExUssd.Utils.simulate(menu: menu, text: "")
{:ok, %{menu_string: "Welcome", should_close: false}}
"""
def simulate(menu: menu, text: text), do: Utils.simulate(menu: menu, text: text)
@doc """
This a helper function that helps simulate ussd call
## Example
iex> defmodule MyHomeHandler do
...> @behaviour ExUssd.Handler
...> def handle_menu(menu, _api_parameters) do
...> menu |> Map.put(:title, "Welcome")
...> end
...> end
iex> menu = ExUssd.Menu.render(name: "Home", handler: MyHomeHandler)
iex> ExUssd.simulate(menu: menu, text: "", service_code: "*141#")
{:ok, %{menu_string: "Welcome", should_close: false}}
"""
def simulate(menu: menu, text: text, service_code: service_code),
do: Utils.simulate(menu: menu, text: text, service_code: service_code)
end