AshDispatch.SMSBackend behaviour (AshDispatch v0.5.1)

View Source

Behaviour that an SMS backend module implements. Configure a backend in your app config:

config :ash_dispatch, :sms_backend, MyApp.SMS

The transport (AshDispatch.Transports.SMS) will call your backend's deliver/4 whenever an event channel with transport: :sms fires.

Implementation contract

  • Read receipt.recipient (phone number — your responsibility to validate format) and receipt.content[:body]/:message for the SMS body.
  • Send the SMS via your provider's API.
  • Update the receipt via Ash:
    • On success: for_update(:mark_sent, %{provider_id: provider_id})
    • On failure: for_update(:mark_failed, %{error_message: reason})
  • Return {:ok, updated_receipt} or {:error, reason}.

Most backends are thin wrappers around HTTP clients (Twilio, Vonage, Telavox SMS, etc.).

Summary

Callbacks

deliver(receipt, context, channel, event_config)

@callback deliver(
  receipt :: struct(),
  context :: AshDispatch.Context.t(),
  channel :: AshDispatch.Channel.t(),
  event_config :: map()
) :: {:ok, struct()} | {:error, term()}