Current section
Files
Jump to
Current section
Files
lib/gateway/infobip.ex
defmodule Infobip do
alias ExUssd.State.Registry
alias ExUssd.Routes
@behaviour ExUssd.Ussd
@doc """
Infobip
## Configuration
Add below config to dev.exs / prod.exs files
`config.exs`
```elixir
config :ex_ussd :provider, Infobip
```
## Example
iex> defmodule HomeHandler 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: HomeHandler)
iex> Infobip.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,
%{
shouldClose: false,
ussdMenu: "Welcome",
responseExitCode: 200,
responseMessage: ""
}
}
"""
@impl true
def goto(internal_routing: internal_routing, menu: menu, api_parameters: api_parameters) do
route =
Routes.get_route(%{text: internal_routing.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
)
{:ok,
%{
shouldClose: current_menu.should_close,
ussdMenu: menu_string,
responseExitCode: 200,
responseMessage: ""
}}
end
@impl true
def end_session(session_id: session_id) do
Registry.stop(session_id)
end
@impl true
def get_menu(session_id: session_id) do
ExUssd.State.Registry.get_menu(session_id)
end
end