Use this guide when you want to send anything that is not primarily a media upload: text, quoted replies, reactions, polls, forwards, and control messages.
Quick start
Send a plain text message with BaileysEx.send_message/4.
All outbound send examples on this page assume the connection was started with
connect/2 with the default Signal credentials in auth state, or override the
repository explicitly with :signal_repository or :signal_repository_adapter.
{:ok, _sent} =
BaileysEx.send_message(connection, "15551234567@s.whatsapp.net", %{text: "Hello from BaileysEx"})Options
These options matter most for everyday message sending:
quoted:reply to a previous message in the same chatmentions:mention one or more user JIDs in a text messagelink_preview:supply preview metadata yourself for a URLmessage_id_fun:override message-id generation when you need deterministic ids in tests
→ See Message Types Reference for the complete payload catalog.
Common patterns
Send a quoted reply
{:ok, _sent} =
BaileysEx.send_message(connection, incoming.key.remote_jid, %{
text: "Replying to your message",
quoted: incoming
})Edit a previously sent text message
{:ok, _sent} =
BaileysEx.send_message(connection, "15551234567@s.whatsapp.net", %{
edit: %{id: "3EB0OLD", remote_jid: "15551234567@s.whatsapp.net", from_me: true},
text: "Updated text"
})React to a message
{:ok, _sent} =
BaileysEx.send_message(connection, incoming.key.remote_jid, %{
react: %{key: incoming.key, text: "👍"}
})Create a poll
{:ok, _sent} =
BaileysEx.send_message(connection, "15551234567@s.whatsapp.net", %{
poll: %{name: "Lunch?", values: ["Yes", "No"], selectable_count: 1}
})Forward or revoke a message
{:ok, _forwarded} =
BaileysEx.send_message(connection, "15551234567@s.whatsapp.net", %{forward: original_message})
{:ok, _revoked} =
BaileysEx.send_message(connection, "15551234567@s.whatsapp.net", %{delete: original_message.key})Limitations
- The public facade sends message payloads that
BaileysEx.Message.Buildersupports today. It does not add a second abstraction layer over the builder. - Outbound interactive templates are not covered by the top-level facade. The currently supported reply payloads are listed in the message-types reference.
- If you pass an invalid JID,
BaileysEx.send_message/4returns{:error, :invalid_jid}. - If the auth state does not include
signed_identity_key,signed_pre_key, andregistration_id, and you do not override the repository explicitly,BaileysEx.send_message/4returns{:error, :signal_repository_not_ready}.
See also:
- Media — send uploaded files and download inbound media
- Event and Subscription Patterns — react to incoming messages cleanly
- Troubleshooting: Encryption Issues