You will finish this page with a text message sent from a live BaileysEx connection.
Before you begin
- Your connection reaches WhatsApp successfully
- Your session is already paired
- You know the recipient JID
- Your auth state includes the normal Signal credentials (
signed_identity_key,signed_pre_key, andregistration_id) or you overrode the default repository
Steps
1. Send a text message
Call BaileysEx.send_message/4 with a user JID and a content map.
BaileysEx builds the built-in production Signal adapter automatically during
connect/2 when the auth state includes the standard Signal credentials. Use
signal_repository: or signal_repository_adapter: only when you need a custom
repository implementation.
{:ok, sent} =
BaileysEx.send_message(connection, "15551234567@s.whatsapp.net", %{text: "Hello from Elixir"})The return value includes the generated message id, destination JID, encoded message, and timestamp.
2. Subscribe to incoming messages
Use BaileysEx.subscribe/2 if you want a simple message loop.
unsubscribe =
BaileysEx.subscribe(connection, fn
{:message, message} -> IO.inspect(message, label: "incoming")
{:connection, update} -> IO.inspect(update, label: "connection")
_other -> :ok
end)This is the simplest way to build bots and automations on top of the public facade.
3. Reply to a received message
Use the incoming message key to reply in the same chat.
{:message, incoming} = receive do
event -> event
end
{:ok, _reply} =
BaileysEx.send_message(connection, incoming.key.remote_jid, %{
text: "I received your message",
quoted: incoming
})Quoted replies use the original message metadata so WhatsApp renders the reply thread correctly.
Check that it worked
You should see a result like %{id: "3EB0..."} from send_message/4, and the recipient should receive the message in WhatsApp.
Next steps: