Skip to main content
Access messages through a BusinessAccount object or directly via the client.

Send a text message

account = client.business_accounts.list.data.first

msg = account.send_text(to: "+33699887766", text: "Hello!")
msg.id      # => "msg_01hz..."
msg.status  # => "queued"

Send a template message

msg = account.send_template(
  to: "+33699887766",
  template_name: "order_confirmation",
  template_language: "en_US"
)

Using the messages resource directly

messages = client.business_messages(account.id)

msg = messages.create(
  to: "+33699887766",
  message_type: "text",
  content: "Hello!"
)

List messages

result = account.messages.list
result.data  # => Array of Message objects
result.meta  # => { "total" => 42 }
Only returns the last 100 messages, ordered newest first.

Retrieve a message

msg = account.messages.retrieve("msg_01hz...")
msg.status       # => "delivered"
msg.delivered_at # => 2026-01-01 12:00:05 UTC

Message attributes

AttributeTypeDescription
idStringWhatsRB message ID
directionStringoutbound
toStringRecipient phone number
message_typeStringtext or template
contentStringMessage text
template_nameStringTemplate name (if template)
template_languageStringTemplate language (if template)
statusStringqueued, sent, delivered, read, failed
wamidStringWhatsApp message ID (set after delivery)
error_messageStringError detail (if failed)
sent_atTimeWhen sent to Meta
delivered_atTimeWhen delivered to recipient
read_atTimeWhen read by recipient

Status helpers

msg.queued?    # => true
msg.sent?      # => false
msg.delivered? # => false
msg.read?      # => false
msg.failed?    # => false