PHPackages                             izzuddinmohsin/laravel-whatsapp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. izzuddinmohsin/laravel-whatsapp

ActiveLibrary[API Development](/categories/api)

izzuddinmohsin/laravel-whatsapp
===============================

A Laravel connector for WhatsApp via Evolution API. Simple, clean, and framework-agnostic within Laravel ecosystem.

v1.0.0(3mo ago)05MITPHPPHP ^8.1

Since Feb 17Pushed 3mo agoCompare

[ Source](https://github.com/izzuddinmohsin/laravel-whatsapp)[ Packagist](https://packagist.org/packages/izzuddinmohsin/laravel-whatsapp)[ RSS](/packages/izzuddinmohsin-laravel-whatsapp/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (7)Versions (2)Used By (0)

Laravel WhatsApp Connector
==========================

[](#laravel-whatsapp-connector)

A simple, clean Laravel package to connect with WhatsApp via [Evolution API](https://github.com/EvolutionAPI/evolution-api). Works with Blade, Livewire, Inertia.js — any Laravel stack.

> **Disclaimer**: This package uses unofficial WhatsApp APIs via Evolution API. WhatsApp/Meta may ban numbers that use unofficial APIs. Use at your own risk and consider the [official WhatsApp Cloud API](https://developers.facebook.com/docs/whatsapp/cloud-api) for production business use.

Features
--------

[](#features)

- Send messages: text, image, video, audio, document, location, contact, buttons, list
- Receive messages via webhooks with event-driven architecture
- Full instance management (create, delete, restart, connect, logout)
- Database storage for instances, messages, and webhook logs
- Queue support for async message sending and webhook processing
- Laravel Notifications channel integration
- Multi-instance support for multiple WhatsApp accounts
- Cleanup command for old data retention
- Reusable trait for any service class
- Configurable storage (can run lightweight without database)
- Retry logic on API calls

Requirements
------------

[](#requirements)

- PHP 8.1+
- Laravel 10, 11, or 12
- A running [Evolution API](https://github.com/EvolutionAPI/evolution-api) instance

Installation
------------

[](#installation)

```
composer require izzuddinmohsin/laravel-whatsapp
```

Publish the config:

```
php artisan vendor:publish --tag=whatsapp-config
```

Publish and run migrations (optional but recommended):

```
php artisan vendor:publish --tag=whatsapp-migrations
php artisan migrate
```

Add to your `.env`:

```
EVOLUTION_API_URL=http://localhost:8080
EVOLUTION_API_KEY=your-api-key
EVOLUTION_INSTANCE=your-instance-name
```

> **Note**: If you don't need database storage, set `WHATSAPP_STORE_MESSAGES=false` and `WHATSAPP_STORE_WEBHOOKS=false` in your `.env`. You can skip the migration publish step entirely.

Quick Start
-----------

[](#quick-start)

### Sending Messages

[](#sending-messages)

```
use IzzuddinMohsin\LaravelWhatsApp\Facades\WhatsApp;

// Text message
WhatsApp::to('60123456789')->text('Hello from Laravel!');

// Image with caption
WhatsApp::to('60123456789')->image('https://example.com/photo.jpg', 'Check this out!');

// Document
WhatsApp::to('60123456789')->document('https://example.com/invoice.pdf', 'invoice.pdf', 'Your invoice');

// Audio
WhatsApp::to('60123456789')->audio('https://example.com/audio.mp3');

// Video
WhatsApp::to('60123456789')->video('https://example.com/video.mp4', 'Watch this');

// Location
WhatsApp::to('60123456789')->location(3.1390, 101.6869, 'KL Tower', 'Kuala Lumpur');

// Contact card
WhatsApp::to('60123456789')->contact('Ali Ahmad', '60198765432', 'Syarikat ABC');
```

### Interactive Messages

[](#interactive-messages)

```
// Buttons
WhatsApp::to('60123456789')->buttons(
    title: 'Choose an option',
    description: 'What would you like to do?',
    buttons: [
        ['id' => 'order', 'text' => 'Track Order'],
        ['id' => 'support', 'text' => 'Get Support'],
        ['id' => 'info', 'text' => 'More Info'],
    ]
);

// List message
WhatsApp::to('60123456789')->list(
    title: 'Our Menu',
    description: 'Choose from our selections',
    buttonText: 'View Menu',
    sections: [
        [
            'title' => 'Drinks',
            'rows' => [
                ['title' => 'Teh Tarik', 'description' => 'RM 3.00', 'rowId' => 'teh_tarik'],
                ['title' => 'Kopi O', 'description' => 'RM 2.50', 'rowId' => 'kopi_o'],
            ],
        ],
    ]
);
```

Instance Management
-------------------

[](#instance-management)

### Basic Operations

[](#basic-operations)

```
// Check connection status
$info = WhatsApp::instanceInfo();
echo $info->status;        // 'open', 'close', etc.
echo $info->phoneNumber;
echo $info->isConnected(); // true/false

// Get QR code for pairing
$qrCode = WhatsApp::qrCode(); // base64 image

// Check if number exists on WhatsApp
$exists = WhatsApp::isOnWhatsApp('60123456789'); // true/false

// Logout
WhatsApp::logout();
```

### Full Instance CRUD

[](#full-instance-crud)

```
// Create a new instance on Evolution API
WhatsApp::createInstance([
    'name' => 'marketing',
    'reject_call' => true,
    'msg_call' => 'Sorry, we cannot take calls.',
    'groups_ignore' => true,
    'always_online' => true,
    'read_messages' => true,
]);

// Delete instance
WhatsApp::instance('marketing')->deleteInstance();

// Restart instance
WhatsApp::instance('marketing')->restartInstance();

// Fetch all instances from Evolution API
$instances = WhatsApp::fetchInstances();

// Get connected instances from database
$connected = WhatsApp::getConnectedInstances();
```

### Webhook Management

[](#webhook-management)

```
// Set webhook URL for current instance
WhatsApp::setWebhook('https://your-app.com/whatsapp/webhook');

// Set with specific events
WhatsApp::setWebhook('https://your-app.com/whatsapp/webhook', [
    'MESSAGES_UPSERT',
    'MESSAGES_UPDATE',
    'CONNECTION_UPDATE',
]);

// Get current webhook configuration
$config = WhatsApp::getWebhook();
```

### Additional API Methods

[](#additional-api-methods)

```
// Get profile picture
$url = WhatsApp::getProfilePicture('60123456789');

// Fetch messages from a chat
$messages = WhatsApp::fetchMessages('60123456789@s.whatsapp.net', 50);

// Update instance settings
WhatsApp::updateSettings([
    'rejectCall' => true,
    'alwaysOnline' => true,
]);
```

### Multi-Instance Support

[](#multi-instance-support)

```
// Switch instance at runtime
WhatsApp::instance('marketing')->to('60123456789')->text('Promo!');
WhatsApp::instance('support')->to('60123456789')->text('Ticket resolved');

// Each call is immutable — won't affect other calls
$marketing = WhatsApp::instance('marketing');
$support = WhatsApp::instance('support');

$marketing->to('60123456789')->text('From marketing');
$support->to('60123456789')->text('From support');
```

Receiving Messages (Webhooks)
-----------------------------

[](#receiving-messages-webhooks)

The package automatically registers a webhook route at `/whatsapp/webhook` (configurable).

### 1. Point Evolution API to your webhook

[](#1-point-evolution-api-to-your-webhook)

In your Evolution API instance settings, set the webhook URL to:

```
https://your-app.com/whatsapp/webhook

```

Or set it programmatically:

```
WhatsApp::setWebhook('https://your-app.com/whatsapp/webhook');
```

### 2. Listen to events

[](#2-listen-to-events)

Create a listener in your app:

```
// app/Listeners/HandleWhatsAppMessage.php
namespace App\Listeners;

use IzzuddinMohsin\LaravelWhatsApp\Events\WhatsAppMessageReceived;
use IzzuddinMohsin\LaravelWhatsApp\Facades\WhatsApp;

class HandleWhatsAppMessage
{
    public function handle(WhatsAppMessageReceived $event): void
    {
        $message = $event->message;

        // Access message properties
        echo $message->from;        // '60123456789'
        echo $message->text;        // 'Hello!'
        echo $message->type;        // 'conversation', 'imageMessage', etc.
        echo $message->pushName;    // Sender's name
        echo $message->isGroup;     // true/false
        echo $message->isText();    // true/false
        echo $message->isMedia();   // true/false

        // Auto-reply example
        if ($message->isText() && str_contains(strtolower($message->text), 'hello')) {
            WhatsApp::to($message->from)->text("Hi {$message->pushName}!");
        }
    }
}
```

### 3. Register the listener

[](#3-register-the-listener)

```
// app/Providers/EventServiceProvider.php (Laravel 10)
// or bootstrap/app.php (Laravel 11+)

use IzzuddinMohsin\LaravelWhatsApp\Events\WhatsAppMessageReceived;
use IzzuddinMohsin\LaravelWhatsApp\Events\WhatsAppMessageStatusUpdated;
use IzzuddinMohsin\LaravelWhatsApp\Events\WhatsAppConnectionStatusChanged;
use IzzuddinMohsin\LaravelWhatsApp\Events\InstanceConnected;
use IzzuddinMohsin\LaravelWhatsApp\Events\InstanceDisconnected;
use IzzuddinMohsin\LaravelWhatsApp\Events\QrCodeUpdated;

// Laravel 11+
Event::listen(WhatsAppMessageReceived::class, HandleWhatsAppMessage::class);
Event::listen(WhatsAppMessageStatusUpdated::class, HandleStatusUpdate::class);
Event::listen(WhatsAppConnectionStatusChanged::class, HandleConnectionChange::class);
Event::listen(InstanceConnected::class, HandleInstanceConnected::class);
Event::listen(InstanceDisconnected::class, HandleInstanceDisconnected::class);
Event::listen(QrCodeUpdated::class, HandleQrCodeUpdated::class);
```

### Available Events

[](#available-events)

EventDescriptionPayload`WhatsAppMessageReceived`New message received`$message` (IncomingMessage), `$rawPayload``WhatsAppMessageStatusUpdated`Status changed (sent/delivered/read)`$messageId`, `$status`, `$from`, `$instanceName``WhatsAppConnectionStatusChanged`Instance connected/disconnected`$status`, `$instanceName`, `$rawPayload``InstanceConnected`Instance successfully connected`$instance` (WhatsappInstance model)`InstanceDisconnected`Instance disconnected`$instance`, `$reason``QrCodeUpdated`New QR code generated`$instance`, `$qrCodeData`Queue Support
-------------

[](#queue-support)

Enable async message sending and webhook processing:

```
WHATSAPP_QUEUE_ENABLED=true
WHATSAPP_QUEUE_CONNECTION=redis
WHATSAPP_QUEUE_NAME=whatsapp
```

When enabled:

- **Outgoing messages** are dispatched via `SendMessageJob` (3 retries, 10s backoff)
- **Incoming webhooks** are processed via `ProcessWebhookJob` (3 retries, 30s backoff)
- Messages return immediately with `status: 'queued'`

Run the queue worker:

```
php artisan queue:work --queue=whatsapp
```

Database Storage
----------------

[](#database-storage)

When migrations are published and run, the package stores:

### `whatsapp_instances` table

[](#whatsapp_instances-table)

Tracks all WhatsApp instances with their connection status, settings, and QR codes.

### `whatsapp_messages` table

[](#whatsapp_messages-table)

Logs all incoming and outgoing messages with status tracking (`sent_at`, `delivered_at`, `read_at`).

### `whatsapp_webhooks` table

[](#whatsapp_webhooks-table)

Logs all webhook events with processing status and error tracking.

### Disabling Storage

[](#disabling-storage)

For lightweight usage without database:

```
WHATSAPP_STORE_MESSAGES=false
WHATSAPP_STORE_WEBHOOKS=false
```

Using the Trait
---------------

[](#using-the-trait)

Add WhatsApp messaging to any class:

```
use IzzuddinMohsin\LaravelWhatsApp\Concerns\CanSendWhatsappMessage;

class OrderService
{
    use CanSendWhatsappMessage;

    public function notifyCustomer(Order $order): void
    {
        $this->sendWhatsappText(
            to: $order->customer_phone,
            message: "Your order #{$order->id} is ready!",
        );

        $this->sendWhatsappDocument(
            to: $order->customer_phone,
            url: $order->invoice_url,
            filename: "invoice-{$order->id}.pdf",
            caption: 'Here is your invoice',
        );
    }

    public function sendPromo(): void
    {
        // Send via specific instance
        $this->sendWhatsappImage(
            to: '60123456789',
            url: 'https://example.com/promo.jpg',
            caption: 'Special offer!',
            instanceName: 'marketing',
        );
    }
}
```

Available trait methods:

- `sendWhatsappText($to, $message, $instanceName)`
- `sendWhatsappImage($to, $url, $caption, $instanceName)`
- `sendWhatsappVideo($to, $url, $caption, $instanceName)`
- `sendWhatsappAudio($to, $url, $instanceName)`
- `sendWhatsappDocument($to, $url, $filename, $caption, $instanceName)`
- `sendWhatsappLocation($to, $lat, $lng, $name, $address, $instanceName)`
- `sendWhatsappContact($to, $fullName, $phone, $org, $instanceName)`
- `hasWhatsappInstance()` — check if any instance is connected
- `getConnectedWhatsappInstances()` — get all connected instances

Laravel Notifications
---------------------

[](#laravel-notifications)

Use WhatsApp as a Laravel notification channel:

```
// app/Notifications/OrderShipped.php
namespace App\Notifications;

use Illuminate\Notifications\Notification;
use IzzuddinMohsin\LaravelWhatsApp\Notifications\WhatsAppChannel;
use IzzuddinMohsin\LaravelWhatsApp\Notifications\WhatsAppMessage;

class OrderShipped extends Notification
{
    public function via($notifiable): array
    {
        return [WhatsAppChannel::class];
    }

    public function toWhatsApp($notifiable): WhatsAppMessage
    {
        return WhatsAppMessage::create()
            ->text("Hi {$notifiable->name}! Your order #{$this->order->id} has been shipped!");
    }
}
```

### Notification Message Types

[](#notification-message-types)

```
// Text
WhatsAppMessage::create()->text('Hello!');

// Image
WhatsAppMessage::create()->image('https://example.com/photo.jpg', 'Caption');

// Video
WhatsAppMessage::create()->video('https://example.com/video.mp4', 'Caption');

// Audio
WhatsAppMessage::create()->audio('https://example.com/audio.mp3');

// Document
WhatsAppMessage::create()->document('https://example.com/file.pdf', 'file.pdf', 'Your document');

// Location
WhatsAppMessage::create()->location(3.1390, 101.6869, 'KL Tower', 'Kuala Lumpur');

// Contact
WhatsAppMessage::create()->contact('Ali Ahmad', '60198765432', 'Syarikat ABC');
```

Add the route to your User model (or any notifiable):

```
// app/Models/User.php
public function routeNotificationForWhatsapp(): ?string
{
    return $this->phone_number; // e.g., '60123456789'
}
```

Send it:

```
$user->notify(new OrderShipped($order));
```

Data Cleanup
------------

[](#data-cleanup)

Clean up old webhooks and messages:

```
# Use config defaults (30 days webhooks, 90 days messages)
php artisan whatsapp:cleanup

# Custom retention
php artisan whatsapp:cleanup --webhooks-days=7 --messages-days=30

# Preview what would be deleted
php artisan whatsapp:cleanup --dry-run
```

Schedule it in your `routes/console.php` or `app/Console/Kernel.php`:

```
// Laravel 11+
Schedule::command('whatsapp:cleanup')->daily();
```

Configuration
-------------

[](#configuration)

Full configuration reference:

```
# Driver
WHATSAPP_DRIVER=evolution

# Evolution API Connection
EVOLUTION_API_URL=http://localhost:8080
EVOLUTION_API_KEY=your-api-key
EVOLUTION_INSTANCE=default
EVOLUTION_API_TIMEOUT=30
EVOLUTION_API_RETRY=3
EVOLUTION_API_RETRY_SLEEP=100

# Webhook
WHATSAPP_WEBHOOK_URL=              # Auto-detected from APP_URL if empty
WHATSAPP_WEBHOOK_PATH=/whatsapp/webhook
WHATSAPP_WEBHOOK_SECRET=           # Optional webhook secret
WHATSAPP_WEBHOOK_BASE64=true

# Instance Defaults
WHATSAPP_DEFAULT_INSTANCE=         # Default instance ID
WHATSAPP_INTEGRATION=WHATSAPP-BAILEYS
WHATSAPP_REJECT_CALL=false
WHATSAPP_MSG_CALL=
WHATSAPP_GROUPS_IGNORE=false
WHATSAPP_ALWAYS_ONLINE=false
WHATSAPP_READ_MESSAGES=false
WHATSAPP_READ_STATUS=false
WHATSAPP_SYNC_FULL_HISTORY=false

# Queue
WHATSAPP_QUEUE_ENABLED=false
WHATSAPP_QUEUE_CONNECTION=         # null = default connection
WHATSAPP_QUEUE_NAME=whatsapp

# Storage
WHATSAPP_STORE_MESSAGES=true
WHATSAPP_STORE_WEBHOOKS=true

# Cleanup Retention
WHATSAPP_CLEANUP_WEBHOOKS_DAYS=30
WHATSAPP_CLEANUP_MESSAGES_DAYS=90

# Media
WHATSAPP_MEDIA_DISK=public
WHATSAPP_MEDIA_DIRECTORY=whatsapp-media
WHATSAPP_MEDIA_MAX_SIZE=16384      # 16MB in KB

# Cache
WHATSAPP_CACHE_ENABLED=true
WHATSAPP_CACHE_TTL=60
```

Enums
-----

[](#enums)

The package provides enums for type-safe usage:

```
use IzzuddinMohsin\LaravelWhatsApp\Enums\MessageTypeEnum;
use IzzuddinMohsin\LaravelWhatsApp\Enums\MessageStatusEnum;
use IzzuddinMohsin\LaravelWhatsApp\Enums\MessageDirectionEnum;
use IzzuddinMohsin\LaravelWhatsApp\Enums\ConnectionStatusEnum;

// Message types
MessageTypeEnum::TEXT;      // 'text'
MessageTypeEnum::IMAGE;     // 'image'
MessageTypeEnum::VIDEO;     // 'video'
MessageTypeEnum::AUDIO;     // 'audio'
MessageTypeEnum::DOCUMENT;  // 'document'
MessageTypeEnum::LOCATION;  // 'location'
MessageTypeEnum::CONTACT;   // 'contact'

// Message statuses
MessageStatusEnum::PENDING;   // 'pending'
MessageStatusEnum::SENT;      // 'sent'
MessageStatusEnum::DELIVERED;  // 'delivered'
MessageStatusEnum::READ;      // 'read'
MessageStatusEnum::FAILED;    // 'failed'

// Directions
MessageDirectionEnum::INCOMING;  // 'incoming'
MessageDirectionEnum::OUTGOING;  // 'outgoing'

// Connection status
ConnectionStatusEnum::OPEN;        // 'open'
ConnectionStatusEnum::CLOSE;       // 'close'
ConnectionStatusEnum::CONNECTING;  // 'connecting'
```

Models
------

[](#models)

Access stored data via Eloquent models:

```
use IzzuddinMohsin\LaravelWhatsApp\Models\WhatsappInstance;
use IzzuddinMohsin\LaravelWhatsApp\Models\WhatsappMessage;
use IzzuddinMohsin\LaravelWhatsApp\Models\WhatsappWebhook;

// Instances
$instance = WhatsappInstance::where('name', 'default')->first();
$instance->isConnected();    // true/false
$instance->messages;         // HasMany relationship
$instance->webhooks;         // HasMany relationship

// Messages
$messages = WhatsappMessage::where('phone', '60123456789')
    ->where('direction', 'incoming')
    ->latest()
    ->get();

// Update message status
$message->markAsSent();
$message->markAsDelivered();
$message->markAsRead();

// Webhooks
$pending = WhatsappWebhook::pending()->get();
$failed = WhatsappWebhook::failed()->get();
$messageEvents = WhatsappWebhook::byEvent('messages.upsert')->get();
```

Error Handling
--------------

[](#error-handling)

```
use IzzuddinMohsin\LaravelWhatsApp\Exceptions\WhatsAppException;

try {
    WhatsApp::to('60123456789')->text('Hello!');
} catch (WhatsAppException $e) {
    Log::error('WhatsApp send failed: ' . $e->getMessage());
}
```

Architecture
------------

[](#architecture)

```
Your App
  -> WhatsApp Facade
    -> WhatsAppManager (fluent API, queue support, storage)
      -> EvolutionApiDriver (HTTP client, retry logic)
        -> Evolution API Server -> WhatsApp

Evolution API Server
  -> POST /whatsapp/webhook
    -> WebhookController (verify secret, store webhook)
      -> ProcessWebhookJob (queue or sync)
        -> Store messages, update statuses
        -> Fire Laravel events
          -> Your listeners

```

Roadmap
-------

[](#roadmap)

This package is built with a **driver-based architecture**, making it easy to swap or add new WhatsApp providers without changing your application code.

### Planned Drivers

[](#planned-drivers)

DriverStatusDescription`evolution`Available[Evolution API](https://github.com/EvolutionAPI/evolution-api) (unofficial, self-hosted)`meta`Planned[WhatsApp Cloud API](https://developers.facebook.com/docs/whatsapp/cloud-api) (official, Meta-hosted)### Switching Drivers (Future)

[](#switching-drivers-future)

When the Meta driver is available, switching will be as simple as:

```
# .env
WHATSAPP_DRIVER=meta

META_WHATSAPP_TOKEN=your-token
META_PHONE_NUMBER_ID=your-phone-id
META_BUSINESS_ID=your-business-id
META_API_VERSION=v21.0
```

Your application code stays the same — `WhatsApp::to('...')->text('...')` works regardless of which driver is active.

### Planned Features

[](#planned-features)

- Meta WhatsApp Cloud API driver
- Template message support (for Meta Cloud API)
- Media upload to local storage with base64 conversion
- Rate limiting for outgoing messages
- Message scheduling (send later)
- Conversation/thread tracking
- Bulk messaging with progress tracking

Contributions for any of these are welcome!

Testing
-------

[](#testing)

```
composer test
```

Contributing
------------

[](#contributing)

Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.

Security
--------

[](#security)

If you discover a security vulnerability, please email  instead of opening an issue.

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE) for more information.

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance82

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

91d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f15353f2f7ec69d95003d7a9edfb2b1b47381c639f8e147de82ecc1af837622c?d=identicon)[izzuddinmohsin](/maintainers/izzuddinmohsin)

---

Top Contributors

[![izzuddinmohsin](https://avatars.githubusercontent.com/u/134830784?v=4)](https://github.com/izzuddinmohsin "izzuddinmohsin (1 commits)")

---

Tags

laravelsdkconnectorwhatsappevolution-api

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/izzuddinmohsin-laravel-whatsapp/health.svg)

```
[![Health](https://phpackages.com/badges/izzuddinmohsin-laravel-whatsapp/health.svg)](https://phpackages.com/packages/izzuddinmohsin-laravel-whatsapp)
```

###  Alternatives

[resend/resend-laravel

Resend for Laravel

1191.4M6](/packages/resend-resend-laravel)[flat3/lodata

OData v4.01 Producer for Laravel

96320.9k](/packages/flat3-lodata)[missael-anda/laravel-whatsapp

A Whatsapp Business Cloud API wrapper for Laravel.

677.5k](/packages/missael-anda-laravel-whatsapp)[simplestats-io/laravel-client

Client for SimpleStats!

4515.5k](/packages/simplestats-io-laravel-client)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
