Skip to content

Messages

The Message resource provides comprehensive methods for sending all types of WhatsApp messages.

Accessing the Resource

use Lynkbyte\EvolutionApi\Facades\EvolutionApi;

// Set instance first
$messages = EvolutionApi::for('my-instance')->messages();

// Or include instance in each call
$messages = EvolutionApi::messages();

Text Messages

Simple Text

// Quick helper method
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->text('5511999999999', 'Hello, World!');

// With delay (milliseconds)
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->text('5511999999999', 'Hello!', delay: 1000);

Using DTO

use Lynkbyte\EvolutionApi\DTOs\Message\SendTextMessageDto;

$dto = new SendTextMessageDto(
    number: '5511999999999',
    text: 'Hello from Laravel!',
    delay: 1000
);

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendText($dto);

// Or from array
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendText([
        'number' => '5511999999999',
        'text' => 'Hello!',
    ]);

With Formatting

WhatsApp supports basic formatting:

$text = "*Bold text*\n";
$text .= "_Italic text_\n";
$text .= "~Strikethrough~\n";
$text .= "```Monospace```\n";
$text .= "> Quote\n";
$text .= "• Bullet point";

EvolutionApi::for('my-instance')
    ->messages()
    ->text('5511999999999', $text);

Media Messages

Image

// Simple helper
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->image(
        number: '5511999999999',
        media: 'https://example.com/image.jpg',
        caption: 'Check out this image!'
    );

// Using DTO
use Lynkbyte\EvolutionApi\DTOs\Message\SendMediaMessageDto;

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendMedia([
        'number' => '5511999999999',
        'mediatype' => 'image',
        'media' => 'https://example.com/image.jpg',
        'caption' => 'Image caption',
    ]);

Video

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->video(
        number: '5511999999999',
        media: 'https://example.com/video.mp4',
        caption: 'Watch this video!'
    );

Document

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->document(
        number: '5511999999999',
        media: 'https://example.com/document.pdf',
        caption: 'Important document',
        fileName: 'report.pdf',
        mimetype: 'application/pdf'
    );

Base64 Media

$imageData = base64_encode(file_get_contents('image.jpg'));

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendMedia([
        'number' => '5511999999999',
        'mediatype' => 'image',
        'media' => "data:image/jpeg;base64,{$imageData}",
        'caption' => 'Uploaded image',
    ]);

Audio Messages

// Simple helper
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->audio('5511999999999', 'https://example.com/audio.mp3');

// Using DTO
use Lynkbyte\EvolutionApi\DTOs\Message\SendAudioMessageDto;

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendAudio([
        'number' => '5511999999999',
        'audio' => 'https://example.com/audio.ogg',
        'delay' => 1000,
    ]);

Location Messages

// Simple helper
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->location(
        number: '5511999999999',
        latitude: -23.5505,
        longitude: -46.6333,
        name: 'São Paulo',
        address: 'São Paulo, Brazil'
    );

// Using DTO
use Lynkbyte\EvolutionApi\DTOs\Message\SendLocationMessageDto;

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendLocation([
        'number' => '5511999999999',
        'latitude' => -23.5505,
        'longitude' => -46.6333,
        'name' => 'Meeting Point',
        'address' => '123 Main St, São Paulo',
    ]);

Contact Messages

use Lynkbyte\EvolutionApi\DTOs\Message\SendContactMessageDto;

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendContact([
        'number' => '5511999999999',
        'contact' => [
            [
                'fullName' => 'John Doe',
                'wuid' => '5511888888888',
                'phoneNumber' => '+55 11 88888-8888',
                'organization' => 'Acme Inc',
                'email' => 'john@example.com',
            ],
        ],
    ]);

Poll Messages

// Simple helper
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->poll(
        number: '5511999999999',
        name: 'What is your favorite color?',
        values: ['Red', 'Blue', 'Green', 'Yellow'],
        selectableCount: 1  // Single choice
    );

// Multiple choice poll
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->poll(
        number: '5511999999999',
        name: 'Select your interests:',
        values: ['Sports', 'Music', 'Movies', 'Technology', 'Travel'],
        selectableCount: 3  // Can select up to 3
    );

List Messages

use Lynkbyte\EvolutionApi\DTOs\Message\SendListMessageDto;

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendList([
        'number' => '5511999999999',
        'title' => 'Our Services',
        'description' => 'Choose a service to learn more',
        'buttonText' => 'View Services',
        'footerText' => 'Tap to select',
        'sections' => [
            [
                'title' => 'Main Services',
                'rows' => [
                    [
                        'title' => 'Consulting',
                        'description' => 'Professional consulting services',
                        'rowId' => 'consulting',
                    ],
                    [
                        'title' => 'Development',
                        'description' => 'Custom software development',
                        'rowId' => 'development',
                    ],
                ],
            ],
            [
                'title' => 'Support',
                'rows' => [
                    [
                        'title' => 'Technical Support',
                        'description' => '24/7 technical assistance',
                        'rowId' => 'support',
                    ],
                ],
            ],
        ],
    ]);

Button Messages

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendButtons(
        number: '5511999999999',
        title: 'Choose an option',
        description: 'Please select one of the options below',
        buttons: [
            ['buttonId' => 'yes', 'buttonText' => 'Yes, I agree'],
            ['buttonId' => 'no', 'buttonText' => 'No, thanks'],
            ['buttonId' => 'info', 'buttonText' => 'More info'],
        ],
        footer: 'Powered by Evolution API'
    );

Reaction Messages

Add Reaction

// Simple helper
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->react(
        remoteJid: '5511999999999@s.whatsapp.net',
        messageId: 'ABC123',
        reaction: '👍',
        fromMe: false
    );

// Using DTO
use Lynkbyte\EvolutionApi\DTOs\Message\SendReactionMessageDto;

$dto = SendReactionMessageDto::react(
    remoteJid: '5511999999999@s.whatsapp.net',
    messageId: 'ABC123',
    fromMe: false,
    reaction: '❤️'
);

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendReaction($dto);

Remove Reaction

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->unreact(
        remoteJid: '5511999999999@s.whatsapp.net',
        messageId: 'ABC123',
        fromMe: false
    );

Sticker Messages

// Simple helper
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sticker('5511999999999', 'https://example.com/sticker.webp');

// Using DTO
use Lynkbyte\EvolutionApi\DTOs\Message\SendStickerMessageDto;

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendSticker([
        'number' => '5511999999999',
        'sticker' => 'https://example.com/sticker.webp',
    ]);

Status/Story Messages

use Lynkbyte\EvolutionApi\DTOs\Message\SendStatusMessageDto;

// Text status
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendStatus([
        'type' => 'text',
        'content' => 'Hello from my status!',
        'backgroundColor' => '#25D366',
        'font' => 1,
        'allContacts' => true,
    ]);

// Image status
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendStatus([
        'type' => 'image',
        'content' => 'https://example.com/image.jpg',
        'caption' => 'Check this out!',
        'allContacts' => true,
    ]);

// Video status
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendStatus([
        'type' => 'video',
        'content' => 'https://example.com/video.mp4',
        'allContacts' => true,
    ]);

Template Messages

For WhatsApp Business API:

use Lynkbyte\EvolutionApi\DTOs\Message\SendTemplateMessageDto;

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendTemplate([
        'number' => '5511999999999',
        'name' => 'order_confirmation',
        'language' => 'en',
        'components' => [
            [
                'type' => 'body',
                'parameters' => [
                    ['type' => 'text', 'text' => 'John'],
                    ['type' => 'text', 'text' => '#12345'],
                ],
            ],
        ],
    ]);

Message Operations

Reply to a Message

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->reply(
        number: '5511999999999',
        text: 'This is my reply',
        quotedMessageId: 'original-message-id'
    );

Forward a Message

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->forward(
        number: '5511888888888',        // Destination
        messageId: 'ABC123',            // Message to forward
        remoteJid: '5511999999999@s.whatsapp.net'  // Original chat
    );

Mark as Read

// Single message
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->markAsRead('5511999999999@s.whatsapp.net', 'message-id');

// Multiple messages
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->markMultipleAsRead([
        ['remoteJid' => '5511999999999@s.whatsapp.net', 'id' => 'msg-1'],
        ['remoteJid' => '5511999999999@s.whatsapp.net', 'id' => 'msg-2'],
    ]);

Delete Message

// Delete for everyone
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->deleteMessage('5511999999999@s.whatsapp.net', 'message-id');

// Delete only for me
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->deleteForMe('5511999999999@s.whatsapp.net', 'message-id');

Edit Message

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->updateMessage(
        remoteJid: '5511999999999@s.whatsapp.net',
        messageId: 'message-id',
        text: 'Updated message text'
    );

Star/Unstar Message

// Star
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->starMessage('5511999999999@s.whatsapp.net', 'message-id');

// Unstar
$response = EvolutionApi::for('my-instance')
    ->messages()
    ->unstarMessage('5511999999999@s.whatsapp.net', 'message-id');

Get Message by ID

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->getMessageById('5511999999999@s.whatsapp.net', 'message-id');

Presence Indicators

Show Typing

// Show typing indicator
EvolutionApi::for('my-instance')->messages()->typing('5511999999999');

// Show recording indicator
EvolutionApi::for('my-instance')->messages()->recording('5511999999999');

// Stop presence indicator
EvolutionApi::for('my-instance')->messages()->stopPresence('5511999999999');

Send with Typing Simulation

$response = EvolutionApi::for('my-instance')
    ->messages()
    ->sendWithTyping(
        number: '5511999999999',
        text: 'Hello!',
        delay: 2000  // Show typing for 2 seconds before sending
    );

Chat Operations

Archive/Unarchive Chat

// Archive
EvolutionApi::for('my-instance')
    ->messages()
    ->archiveChat('5511999999999@s.whatsapp.net');

// Unarchive
EvolutionApi::for('my-instance')
    ->messages()
    ->unarchiveChat('5511999999999@s.whatsapp.net');

Method Reference

Method Description
sendText($dto) Send text message with DTO
text($number, $text, $delay) Quick text message
sendMedia($dto) Send media message with DTO
image($number, $media, $caption) Quick image message
video($number, $media, $caption) Quick video message
document($number, $media, $caption, $fileName) Quick document message
sendAudio($dto) Send audio message with DTO
audio($number, $audio, $delay) Quick audio message
sendLocation($dto) Send location message with DTO
location($number, $lat, $lng, $name, $address) Quick location message
sendContact($dto) Send contact message
sendPoll($dto) Send poll message
poll($number, $name, $values, $selectableCount) Quick poll message
sendList($dto) Send list message
sendButtons($number, $title, $desc, $buttons) Send button message
sendReaction($dto) Send reaction
react($remoteJid, $messageId, $reaction) Quick reaction
unreact($remoteJid, $messageId) Remove reaction
sendSticker($dto) Send sticker message
sticker($number, $sticker) Quick sticker message
sendStatus($dto) Send status/story
sendTemplate($dto) Send template message
reply($number, $text, $quotedMessageId) Reply to message
forward($number, $messageId, $remoteJid) Forward message
markAsRead($remoteJid, $messageId) Mark as read
deleteMessage($remoteJid, $messageId) Delete message
updateMessage($remoteJid, $messageId, $text) Edit message
typing($number) Show typing indicator
recording($number) Show recording indicator

Next Steps