Current section
Files
Jump to
Current section
Files
lib/anu.ex
defmodule Anu do
@moduledoc """
Composable Elixir SDK for the WhatsApp Business API.
Anu provides a pipe-first API for building and sending WhatsApp messages.
## Quick start
Anu.Message.new("+5511999999999")
|> Anu.Message.text("Hello from Anu!")
|> Anu.deliver()
## Configuration
config :anu,
access_token: "your_whatsapp_token",
phone_number_id: "your_phone_number_id",
verify_token: "your_webhook_verify_token",
app_secret: "your_app_secret"
See `Anu.Config` for all configuration options.
"""
alias Anu.Config
@doc """
Delivers a message through the configured adapter.
Returns `{:ok, %Anu.Response{}}` on success or `{:error, %Anu.Error{}}` on failure.
## Examples
{:ok, response} =
Anu.Message.new("+5511999999999")
|> Anu.Message.text("Hello!")
|> Anu.deliver()
response.id
#=> "wamid.HBgN..."
"""
@spec deliver(Anu.Message.t()) :: {:ok, Anu.Response.t()} | {:error, Anu.Error.t()}
def deliver(%Anu.Message{} = message) do
adapter = Config.adapter()
adapter.deliver(message, Config.finch_name())
end
@doc """
Delivers a message, unwrapping the result.
Returns the `%Anu.Response{}` directly on success. On failure, raises an
`ArgumentError` with the error details. Useful in scripts and IEx sessions.
## Examples
response =
Anu.Message.new("+5511999999999")
|> Anu.Message.text("Hello!")
|> Anu.deliver!()
"""
@spec deliver!(Anu.Message.t()) :: Anu.Response.t()
def deliver!(%Anu.Message{} = message) do
case deliver(message) do
{:ok, response} ->
response
{:error, %Anu.Error{code: code, message: error_message}} ->
raise ArgumentError, "Anu delivery failed (#{code}): #{error_message}"
end
end
end