Current section
Files
Jump to
Current section
Files
lib/gateway/at.ex
defmodule AfricasTalking do
alias ExUssd.State.Registry
@behaviour ExUssd.Ussd
@doc """
Africa's talking
## Configuration
Add below config to dev.exs / prod.exs files
`config.exs`
```elixir
config :ex_ussd :provider, AfricasTalking
```
## Example
iex> AfricasTalking.goto(
...> internal_routing: %{text: "", session_id: "session_01", service_code: "*544#"},
...> menu: ExUssd.Menu.render(
...> name: "Home",
...> handler: fn menu, _api_parameters, _should_handle ->
...> menu |> Map.put(:title, "Home Page: Welcome")
...> end
...> ),
...> api_parameters: %{
...> "sessionId" => "session_01",
...> "phoneNumber" => "254722000000",
...> "networkCode" => "Safaricom",
...> "serviceCode" => "*544#",
...> "text" => ""
...> }
...> )
{:ok, "CON Home Page: Welcome"}
"""
@impl true
def goto(internal_routing: internal_routing, menu: menu, api_parameters: api_parameters) do
text_value = internal_routing.text |> String.replace("#", "")
service_code_value = internal_routing.service_code |> String.replace("#", "")
text =
cond do
text_value == service_code_value ->
""
text_value =~ service_code_value ->
text_value
true ->
case internal_routing.text |> String.split("*") do
value when length(value) == 1 -> value |> hd
value -> Enum.reverse(value) |> hd
end
end
route = ExUssd.Routes.get_route(%{text: text, service_code: internal_routing.service_code})
%{menu: current_menu, display: menu_string} =
EXUssd.Common.goto(
internal_routing: internal_routing,
menu: menu,
api_parameters: api_parameters,
route: route
)
%{should_close: should_close} = current_menu
output =
case should_close do
false ->
"CON " <> menu_string
true ->
Registry.stop(internal_routing.session_id)
"END " <> menu_string
end
{:ok, output}
end
@doc """
End session by ID
## Example
iex> AfricasTalking.end_session(session_id: "session_01")
{:error, :not_found}
"""
@impl true
def end_session(session_id: _session_id) do
{:error, :not_found}
end
@impl true
def get_menu(session_id: session_id) do
ExUssd.State.Registry.get_menu(session_id)
end
end