feat: add queue and storage configuration options

- Add queue configuration:
  - EVOLUTION_QUEUE_ENABLED - enable/disable queue processing
  - EVOLUTION_QUEUE_CONNECTION - custom queue connection
  - EVOLUTION_QUEUE_NAME - custom queue name (default: 'default')

- Add storage configuration:
  - EVOLUTION_STORE_WEBHOOKS - enable/disable webhook storage (default: true)
  - EVOLUTION_STORE_MESSAGES - enable/disable message storage (default: true)

- Update WebhookController to use storage.webhooks config
- Update ProcessWebhookJob to use storage.messages config
- Update README with new configuration options
This commit is contained in:
Wallace Martins
2025-12-07 12:59:19 -03:00
parent aa606930d2
commit 722c73cb3e
4 changed files with 75 additions and 24 deletions

View File

@@ -126,8 +126,34 @@ EVOLUTION_SYNC_HISTORY=false
EVOLUTION_MEDIA_DISK=public
EVOLUTION_MEDIA_DIRECTORY=whatsapp-media
EVOLUTION_MEDIA_MAX_SIZE=16384
# Queue Configuration
EVOLUTION_QUEUE_ENABLED=true
EVOLUTION_QUEUE_CONNECTION=redis
EVOLUTION_QUEUE_NAME=whatsapp
# Storage (save webhooks and messages to database)
EVOLUTION_STORE_WEBHOOKS=true
EVOLUTION_STORE_MESSAGES=true
```
### Queue Settings
| Variable | Default | Description |
|----------|---------|-------------|
| `EVOLUTION_QUEUE_ENABLED` | `true` | Enable/disable queue processing |
| `EVOLUTION_QUEUE_CONNECTION` | `null` | Queue connection (null = default) |
| `EVOLUTION_QUEUE_NAME` | `default` | Queue name for processing webhooks |
### Storage Settings
| Variable | Default | Description |
|----------|---------|-------------|
| `EVOLUTION_STORE_WEBHOOKS` | `true` | Save webhook events to database |
| `EVOLUTION_STORE_MESSAGES` | `true` | Save messages to database |
> **Note:** Disabling storage improves performance but you lose history and the Message/Webhook resources will be empty.
### Multi-Tenancy Settings
```env

View File

@@ -98,11 +98,29 @@ return [
|--------------------------------------------------------------------------
| Queue Configuration
|--------------------------------------------------------------------------
|
| Configure which queue connection and queue name to use for processing
| webhooks and sending messages. Set to null to use the default queue.
|
*/
'queue' => [
'enabled' => env('EVOLUTION_QUEUE_ENABLED', true),
'connection' => env('EVOLUTION_QUEUE_CONNECTION'),
'messages' => env('EVOLUTION_QUEUE_MESSAGES', 'whatsapp'),
'webhooks' => env('EVOLUTION_QUEUE_WEBHOOKS', 'default'),
'name' => env('EVOLUTION_QUEUE_NAME', 'default'),
],
/*
|--------------------------------------------------------------------------
| Storage Configuration
|--------------------------------------------------------------------------
|
| Configure whether to store webhook events and messages in the database.
| Disabling these can improve performance but you'll lose history.
|
*/
'storage' => [
'webhooks' => env('EVOLUTION_STORE_WEBHOOKS', true),
'messages' => env('EVOLUTION_STORE_MESSAGES', true),
],
/*

View File

@@ -32,9 +32,9 @@ class WebhookController extends Controller
]);
}
// Store webhook in database
// Store webhook in database if enabled
$webhook = null;
if (config('filament-evolution.webhook.store_logs', true)) {
if (config('filament-evolution.storage.webhooks', true)) {
$webhook = $this->storeWebhook($event, $payload);
}

View File

@@ -130,33 +130,40 @@ class ProcessWebhookJob implements ShouldQueue
{
$data = MessageUpsertData::fromWebhook($this->payload);
// Extract remoteJid from payload
$messageData = $this->payload['data'] ?? $this->payload;
$key = $messageData['key'] ?? [];
$remoteJid = $key['remoteJid'] ?? $data->message->phone;
// Store message in database if enabled
if (config('filament-evolution.storage.messages', true)) {
// Extract remoteJid from payload
$messageData = $this->payload['data'] ?? $this->payload;
$key = $messageData['key'] ?? [];
$remoteJid = $key['remoteJid'] ?? $data->message->phone;
// Store message in database
$instance->messages()->create([
'message_id' => $data->message->messageId,
'remote_jid' => $remoteJid,
'phone' => $data->message->phone,
'direction' => $data->message->direction,
'type' => $data->message->type,
'content' => json_encode([
'text' => $data->message->text,
'media_url' => $data->message->mediaUrl,
'media_caption' => $data->message->mediaCaption,
'latitude' => $data->message->latitude,
'longitude' => $data->message->longitude,
]),
'status' => $data->message->status,
]);
$instance->messages()->create([
'message_id' => $data->message->messageId,
'remote_jid' => $remoteJid,
'phone' => $data->message->phone,
'direction' => $data->message->direction,
'type' => $data->message->type,
'content' => json_encode([
'text' => $data->message->text,
'media_url' => $data->message->mediaUrl,
'media_caption' => $data->message->mediaCaption,
'latitude' => $data->message->latitude,
'longitude' => $data->message->longitude,
]),
'status' => $data->message->status,
]);
}
event(new MessageReceived($instance, $data->message));
}
protected function handleMessageUpdate(WhatsappInstance $instance): void
{
// Only update if message storage is enabled
if (! config('filament-evolution.storage.messages', true)) {
return;
}
$messageData = $this->payload['data'] ?? $this->payload;
$key = $messageData['key'] ?? [];
$update = $messageData['update'] ?? [];