Groups¶
The Group resource provides comprehensive methods for creating and managing WhatsApp groups.
Accessing the Resource¶
use Lynkbyte\EvolutionApi\Facades\EvolutionApi;
$groups = EvolutionApi::for('my-instance')->groups();
Creating Groups¶
Basic Creation¶
$response = EvolutionApi::for('my-instance')
->groups()
->create(
subject: 'Project Team',
participants: ['5511999999999', '5511888888888']
);
if ($response->isSuccessful()) {
$groupJid = $response->json('groupJid');
echo "Group created: {$groupJid}";
}
With Description¶
$response = EvolutionApi::for('my-instance')
->groups()
->create(
subject: 'Project Team',
participants: ['5511999999999', '5511888888888'],
description: 'A group for our project discussions'
);
Fetching Groups¶
Get All Groups¶
// Without participants
$response = EvolutionApi::for('my-instance')
->groups()
->fetchAll();
// With participants
$response = EvolutionApi::for('my-instance')
->groups()
->fetchAll(getParticipants: true);
foreach ($response->json() as $group) {
echo "Group: {$group['subject']}\n";
echo "JID: {$group['id']}\n";
}
Get Single Group¶
$response = EvolutionApi::for('my-instance')
->groups()
->fetchOne('123456789@g.us');
$group = $response->json();
echo "Name: {$group['subject']}";
echo "Description: {$group['desc']}";
echo "Participants: " . count($group['participants']);
Get Group Participants¶
$response = EvolutionApi::for('my-instance')
->groups()
->participants('123456789@g.us');
foreach ($response->json() as $participant) {
echo "{$participant['id']}: {$participant['admin'] ?? 'member'}";
}
Updating Groups¶
Update Name (Subject)¶
$response = EvolutionApi::for('my-instance')
->groups()
->updateSubject('123456789@g.us', 'New Group Name');
Update Description¶
$response = EvolutionApi::for('my-instance')
->groups()
->updateDescription('123456789@g.us', 'Updated group description');
Update Picture¶
// From URL
$response = EvolutionApi::for('my-instance')
->groups()
->updatePicture('123456789@g.us', 'https://example.com/image.jpg');
// From base64
$imageBase64 = base64_encode(file_get_contents('group-image.jpg'));
$response = EvolutionApi::for('my-instance')
->groups()
->updatePicture('123456789@g.us', "data:image/jpeg;base64,{$imageBase64}");
Remove Picture¶
Managing Participants¶
Add Participants¶
$response = EvolutionApi::for('my-instance')
->groups()
->addParticipants('123456789@g.us', [
'5511999999999',
'5511888888888',
]);
Remove Participants¶
$response = EvolutionApi::for('my-instance')
->groups()
->removeParticipants('123456789@g.us', [
'5511777777777',
]);
Promote to Admin¶
$response = EvolutionApi::for('my-instance')
->groups()
->promoteToAdmin('123456789@g.us', [
'5511999999999',
]);
Demote from Admin¶
$response = EvolutionApi::for('my-instance')
->groups()
->demoteFromAdmin('123456789@g.us', [
'5511999999999',
]);
Group Invitations¶
Get Invite Code¶
$response = EvolutionApi::for('my-instance')
->groups()
->inviteCode('123456789@g.us');
$code = $response->json('inviteCode');
$link = "https://chat.whatsapp.com/{$code}";
Revoke Invite Code¶
$response = EvolutionApi::for('my-instance')
->groups()
->revokeInviteCode('123456789@g.us');
$newCode = $response->json('inviteCode');
Accept Invite¶
$response = EvolutionApi::for('my-instance')
->groups()
->acceptInvite('AbCdEfGhIjK'); // Invite code
Get Invite Info¶
Get group information from invite code without joining:
$response = EvolutionApi::for('my-instance')
->groups()
->inviteInfo('AbCdEfGhIjK');
$groupInfo = $response->json();
echo "Group: {$groupInfo['subject']}";
echo "Participants: {$groupInfo['size']}";
Send Invite to Users¶
$response = EvolutionApi::for('my-instance')
->groups()
->sendInvite(
groupJid: '123456789@g.us',
numbers: ['5511999999999', '5511888888888'],
description: 'Join our team group!'
);
Group Settings¶
Update Settings¶
// Only admins can send messages (announcement mode)
$response = EvolutionApi::for('my-instance')
->groups()
->updateSettings('123456789@g.us', 'announce');
// Everyone can send messages
$response = EvolutionApi::for('my-instance')
->groups()
->updateSettings('123456789@g.us', 'not_announce');
// Only admins can edit group info
$response = EvolutionApi::for('my-instance')
->groups()
->updateSettings('123456789@g.us', 'locked');
// Everyone can edit group info
$response = EvolutionApi::for('my-instance')
->groups()
->updateSettings('123456789@g.us', 'unlocked');
Helper Methods¶
// Set announcement mode
EvolutionApi::for('my-instance')
->groups()
->setAnnouncementMode('123456789@g.us', enabled: true);
// Set locked mode
EvolutionApi::for('my-instance')
->groups()
->setLockedMode('123456789@g.us', enabled: true);
Disappearing Messages¶
// Enable (24 hours)
$response = EvolutionApi::for('my-instance')
->groups()
->toggleEphemeral('123456789@g.us', 86400);
// Enable (7 days)
$response = EvolutionApi::for('my-instance')
->groups()
->toggleEphemeral('123456789@g.us', 604800);
// Enable (90 days)
$response = EvolutionApi::for('my-instance')
->groups()
->toggleEphemeral('123456789@g.us', 7776000);
// Disable
$response = EvolutionApi::for('my-instance')
->groups()
->toggleEphemeral('123456789@g.us', 0);
Join Requests¶
Get Pending Requests¶
$response = EvolutionApi::for('my-instance')
->groups()
->pendingParticipants('123456789@g.us');
foreach ($response->json() as $request) {
echo "Request from: {$request['id']}";
}
Accept Requests¶
$response = EvolutionApi::for('my-instance')
->groups()
->acceptJoinRequests('123456789@g.us', [
'5511999999999@s.whatsapp.net',
]);
Reject Requests¶
$response = EvolutionApi::for('my-instance')
->groups()
->rejectJoinRequests('123456789@g.us', [
'5511888888888@s.whatsapp.net',
]);
Other Operations¶
Check Admin Status¶
$response = EvolutionApi::for('my-instance')
->groups()
->isAdmin('123456789@g.us');
$isAdmin = $response->json('isAdmin');
Leave Group¶
Method Reference¶
| Method | Description |
|---|---|
create($subject, $participants, $description) |
Create new group |
fetchAll($getParticipants) |
Get all groups |
fetchOne($groupJid) |
Get single group |
participants($groupJid) |
Get group participants |
updateSubject($groupJid, $subject) |
Update group name |
updateDescription($groupJid, $description) |
Update description |
updatePicture($groupJid, $image) |
Update group picture |
removePicture($groupJid) |
Remove group picture |
addParticipants($groupJid, $participants) |
Add members |
removeParticipants($groupJid, $participants) |
Remove members |
promoteToAdmin($groupJid, $participants) |
Promote to admin |
demoteFromAdmin($groupJid, $participants) |
Demote from admin |
inviteCode($groupJid) |
Get invite code |
revokeInviteCode($groupJid) |
Revoke invite code |
acceptInvite($inviteCode) |
Join via invite code |
inviteInfo($inviteCode) |
Get invite info |
sendInvite($groupJid, $numbers, $description) |
Send invites |
updateSettings($groupJid, $action) |
Update settings |
setAnnouncementMode($groupJid, $enabled) |
Set announcement mode |
setLockedMode($groupJid, $enabled) |
Set locked mode |
toggleEphemeral($groupJid, $expiration) |
Set disappearing messages |
pendingParticipants($groupJid) |
Get join requests |
acceptJoinRequests($groupJid, $participants) |
Accept requests |
rejectJoinRequests($groupJid, $participants) |
Reject requests |
isAdmin($groupJid) |
Check admin status |
leave($groupJid) |
Leave group |
Examples¶
Create and Configure Group¶
// Create group
$response = EvolutionApi::for('my-instance')
->groups()
->create('Support Team', ['5511999999999']);
$groupJid = $response->json('groupJid');
// Update description
EvolutionApi::for('my-instance')
->groups()
->updateDescription($groupJid, 'Official support channel');
// Set announcement mode (only admins can send)
EvolutionApi::for('my-instance')
->groups()
->setAnnouncementMode($groupJid, true);
// Enable 7-day disappearing messages
EvolutionApi::for('my-instance')
->groups()
->toggleEphemeral($groupJid, 604800);
// Get invite link
$inviteResponse = EvolutionApi::for('my-instance')
->groups()
->inviteCode($groupJid);
$inviteLink = "https://chat.whatsapp.com/" . $inviteResponse->json('inviteCode');
Bulk Add Participants¶
public function addMembersToGroup(string $groupJid, array $numbers): array
{
// Validate numbers first
$validatedResponse = EvolutionApi::for('my-instance')
->chats()
->checkNumber($numbers);
$validNumbers = collect($validatedResponse->json())
->filter(fn($n) => $n['exists'])
->pluck('number')
->toArray();
// Add in batches of 10
$results = [];
foreach (array_chunk($validNumbers, 10) as $batch) {
$response = EvolutionApi::for('my-instance')
->groups()
->addParticipants($groupJid, $batch);
$results[] = $response->json();
// Rate limit
sleep(1);
}
return $results;
}