diff --git a/README.md b/README.md
index c62f349..d106b03 100644
--- a/README.md
+++ b/README.md
@@ -93,75 +93,100 @@ FilamentEvolutionPlugin::make()
## Configuration
-Add these variables to your `.env` file:
+### Environment Variables (.env)
-### Required Settings
+Only API credentials should be in your `.env` file:
```env
-# Evolution API Connection
+# Evolution API Connection (Required)
EVOLUTION_URL=https://your-evolution-api.com
EVOLUTION_API_KEY=your_api_key
-# Webhook (Required for receiving events)
-EVOLUTION_URL_WEBHOOK=https://your-app.com/api/webhooks/evolution
-EVOLUTION_WEBHOOK_ENABLED=true
+# Webhook URL (Required for receiving events)
+EVOLUTION_WEBHOOK_URL=https://your-app.com/api/evolution/webhook
+
+# Webhook Secret (Optional - for security)
+EVOLUTION_WEBHOOK_SECRET=your_secret_key
+
+# Default Instance (Optional - for single instance setups)
+EVOLUTION_DEFAULT_INSTANCE=your_instance_id
```
-### Optional Settings
+### Config File
-```env
-# QR Code Settings
-EVOLUTION_QRCODE_EXPIRES=30
+All other settings are in `config/filament-evolution.php`. Publish and customize:
-# Instance Defaults
-EVOLUTION_REJECT_CALL=false
-EVOLUTION_MSG_CALL="I can't answer calls right now"
-EVOLUTION_GROUPS_IGNORE=false
-EVOLUTION_ALWAYS_ONLINE=false
-EVOLUTION_READ_MESSAGES=false
-EVOLUTION_READ_STATUS=false
-EVOLUTION_SYNC_HISTORY=false
-
-# Media Storage
-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
+```bash
+php artisan vendor:publish --tag="filament-evolution-config"
```
-### Queue Settings
+Key configuration options:
-| 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 |
+```php
+// config/filament-evolution.php
-### Storage Settings
+return [
+ // Queue settings
+ 'queue' => [
+ 'enabled' => true,
+ 'connection' => null, // null = default connection
+ 'name' => 'default', // queue name
+ ],
-| Variable | Default | Description |
-|----------|---------|-------------|
-| `EVOLUTION_STORE_WEBHOOKS` | `true` | Save webhook events to database |
-| `EVOLUTION_STORE_MESSAGES` | `true` | Save messages to database |
+ // Storage settings
+ 'storage' => [
+ 'webhooks' => true, // save webhooks to database
+ 'messages' => true, // save messages to database
+ ],
-> **Note:** Disabling storage improves performance but you lose history and the Message/Webhook resources will be empty.
+ // Cleanup policy (automatic deletion of old records)
+ 'cleanup' => [
+ 'webhooks_days' => 30, // delete webhooks older than 30 days
+ 'messages_days' => 90, // delete messages older than 90 days
+ ],
-### Multi-Tenancy Settings
+ // Instance defaults
+ 'instance' => [
+ 'reject_call' => false,
+ 'always_online' => false,
+ // ...
+ ],
-```env
-EVOLUTION_TENANCY_ENABLED=true
-EVOLUTION_TENANT_COLUMN=team_id
-EVOLUTION_TENANT_TABLE=teams
-EVOLUTION_TENANT_MODEL=App\Models\Team
-EVOLUTION_TENANT_COLUMN_TYPE=uuid
+ // Multi-tenancy
+ 'tenancy' => [
+ 'enabled' => false,
+ 'column' => 'team_id',
+ 'table' => 'teams',
+ 'model' => 'App\\Models\\Team',
+ ],
+];
+```
+
+---
+
+## Cleanup Command
+
+The plugin includes a cleanup command to remove old records:
+
+```bash
+# Run cleanup with config settings
+php artisan evolution:cleanup
+
+# Preview what would be deleted (dry run)
+php artisan evolution:cleanup --dry-run
+
+# Override config settings
+php artisan evolution:cleanup --webhooks-days=7 --messages-days=30
+```
+
+### Scheduling Cleanup
+
+Add to your `routes/console.php`:
+
+```php
+use Illuminate\Support\Facades\Schedule;
+
+Schedule::command('evolution:cleanup')->daily();
```
---
diff --git a/config/filament-evolution.php b/config/filament-evolution.php
index 591dfee..729c47a 100644
--- a/config/filament-evolution.php
+++ b/config/filament-evolution.php
@@ -5,20 +5,20 @@ declare(strict_types=1);
return [
/*
|--------------------------------------------------------------------------
- | Evolution API Connection
+ | Evolution API Connection (Required - .env)
|--------------------------------------------------------------------------
|
- | These settings are required and must be defined in your .env file.
- | NEVER store these credentials in the database!
+ | These are the only settings that MUST be in your .env file.
+ | All other settings can be customized directly in this config file.
|
*/
'api' => [
- 'base_url' => env('EVOLUTION_URL', env('EVOLUTION_API_URL', 'http://localhost:8080')),
+ 'base_url' => env('EVOLUTION_URL'),
'api_key' => env('EVOLUTION_API_KEY'),
- 'timeout' => env('EVOLUTION_TIMEOUT', 30),
+ 'timeout' => 30,
'retry' => [
'times' => 3,
- 'sleep' => 100, // ms
+ 'sleep' => 100, // milliseconds
],
],
@@ -27,18 +27,13 @@ return [
| Webhook Configuration
|--------------------------------------------------------------------------
|
- | The secret is used to validate that webhooks come from Evolution API.
+ | URL and secret should be in .env, other settings are optional.
|
*/
'webhook' => [
- 'enabled' => env('EVOLUTION_WEBHOOK_ENABLED', true),
- 'url' => env('EVOLUTION_URL_WEBHOOK'),
- 'path' => env('EVOLUTION_WEBHOOK_PATH', 'api/evolution/webhook'),
+ 'url' => env('EVOLUTION_WEBHOOK_URL'),
'secret' => env('EVOLUTION_WEBHOOK_SECRET'),
- 'verify_signature' => env('EVOLUTION_VERIFY_SIGNATURE', true),
- 'by_events' => env('EVOLUTION_WEBHOOK_BY_EVENTS', false),
- 'base64' => env('EVOLUTION_WEBHOOK_BASE64', false),
- 'queue' => env('EVOLUTION_WEBHOOK_QUEUE', 'default'),
+ 'path' => 'api/evolution/webhook',
'events' => [
'APPLICATION_STARTUP',
'QRCODE_UPDATED',
@@ -47,6 +42,7 @@ return [
'SEND_MESSAGE',
'PRESENCE_UPDATE',
'MESSAGES_UPSERT',
+ 'MESSAGES_UPDATE',
],
],
@@ -59,39 +55,15 @@ return [
|
*/
'instance' => [
- 'integration' => env('EVOLUTION_INTEGRATION', 'WHATSAPP-BAILEYS'),
- 'qrcode_expires_in' => env('EVOLUTION_QRCODE_EXPIRES', 30), // seconds
- 'reject_call' => env('EVOLUTION_REJECT_CALL', false),
- 'msg_call' => env('EVOLUTION_MSG_CALL', ''),
- 'groups_ignore' => env('EVOLUTION_GROUPS_IGNORE', false),
- 'always_online' => env('EVOLUTION_ALWAYS_ONLINE', false),
- 'read_messages' => env('EVOLUTION_READ_MESSAGES', false),
- 'read_status' => env('EVOLUTION_READ_STATUS', false),
- 'sync_full_history' => env('EVOLUTION_SYNC_HISTORY', false),
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Filament Configuration
- |--------------------------------------------------------------------------
- |
- | UI settings for Filament panel integration.
- | Labels and translations are handled via lang files.
- |
- */
- 'filament' => [
- 'navigation_sort' => 100,
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Cache Configuration
- |--------------------------------------------------------------------------
- */
- 'cache' => [
- 'enabled' => env('EVOLUTION_CACHE_ENABLED', true),
- 'ttl' => env('EVOLUTION_CACHE_TTL', 60), // seconds
- 'prefix' => 'evolution_',
+ 'integration' => 'WHATSAPP-BAILEYS',
+ 'qrcode_expires_in' => 30, // seconds
+ 'reject_call' => false,
+ 'msg_call' => '',
+ 'groups_ignore' => false,
+ 'always_online' => false,
+ 'read_messages' => false,
+ 'read_status' => false,
+ 'sync_full_history' => false,
],
/*
@@ -99,14 +71,13 @@ 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.
+ | Configure queue for processing webhooks and sending messages.
|
*/
'queue' => [
- 'enabled' => env('EVOLUTION_QUEUE_ENABLED', true),
- 'connection' => env('EVOLUTION_QUEUE_CONNECTION'),
- 'name' => env('EVOLUTION_QUEUE_NAME', 'default'),
+ 'enabled' => true,
+ 'connection' => null, // null = use default connection
+ 'name' => 'default',
],
/*
@@ -119,22 +90,37 @@ return [
|
*/
'storage' => [
- 'webhooks' => env('EVOLUTION_STORE_WEBHOOKS', true),
- 'messages' => env('EVOLUTION_STORE_MESSAGES', true),
+ 'webhooks' => true,
+ 'messages' => true,
],
/*
|--------------------------------------------------------------------------
- | Media Storage Configuration
+ | Cleanup Policy
+ |--------------------------------------------------------------------------
+ |
+ | Automatic cleanup of old records. Set days to null to disable cleanup.
+ | Run the cleanup command: php artisan evolution:cleanup
+ | Schedule it in your app/Console/Kernel.php or routes/console.php
+ |
+ */
+ 'cleanup' => [
+ 'webhooks_days' => 30, // Delete webhooks older than X days (null = never)
+ 'messages_days' => 90, // Delete messages older than X days (null = never)
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Media Configuration
|--------------------------------------------------------------------------
|
| Configuration for media file uploads when sending messages.
|
*/
'media' => [
- 'disk' => env('EVOLUTION_MEDIA_DISK', 'public'),
- 'directory' => env('EVOLUTION_MEDIA_DIRECTORY', 'whatsapp-media'),
- 'max_size' => env('EVOLUTION_MEDIA_MAX_SIZE', 16384), // KB (16MB default)
+ 'disk' => 'public',
+ 'directory' => 'whatsapp-media',
+ 'max_size' => 16384, // KB (16MB default)
],
/*
@@ -143,20 +129,44 @@ return [
|--------------------------------------------------------------------------
|
| The default instance ID to use when sending messages without specifying one.
- | Useful for simple use cases with a single WhatsApp instance.
|
*/
'default_instance' => env('EVOLUTION_DEFAULT_INSTANCE'),
+ /*
+ |--------------------------------------------------------------------------
+ | Filament Configuration
+ |--------------------------------------------------------------------------
+ |
+ | UI settings for Filament panel integration.
+ |
+ */
+ 'filament' => [
+ 'navigation_sort' => 100,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cache Configuration
+ |--------------------------------------------------------------------------
+ */
+ 'cache' => [
+ 'enabled' => true,
+ 'ttl' => 60, // seconds
+ 'prefix' => 'evolution_',
+ ],
+
/*
|--------------------------------------------------------------------------
| Logging
|--------------------------------------------------------------------------
*/
'logging' => [
- 'enabled' => env('EVOLUTION_LOGGING', true),
- 'channel' => env('EVOLUTION_LOG_CHANNEL'),
- 'log_payloads' => env('EVOLUTION_LOG_PAYLOADS', false),
+ 'enabled' => true,
+ 'channel' => null, // null = use default channel
+ 'webhook_events' => false,
+ 'webhook_errors' => true,
+ 'log_payloads' => false,
],
/*
@@ -165,23 +175,13 @@ return [
|--------------------------------------------------------------------------
|
| Configuration for Filament multi-tenancy support.
- | When enabled, migrations will include the tenant foreign key
- | and models will automatically scope queries by tenant.
|
*/
'tenancy' => [
- 'enabled' => env('EVOLUTION_TENANCY_ENABLED', false),
-
- // Tenant column name (e.g., 'team_id', 'company_id', 'tenant_id')
- 'column' => env('EVOLUTION_TENANT_COLUMN', 'team_id'),
-
- // Tenant table for foreign key (e.g., 'teams', 'companies', 'tenants')
- 'table' => env('EVOLUTION_TENANT_TABLE', 'teams'),
-
- // Tenant model class (e.g., App\Models\Team::class)
- 'model' => env('EVOLUTION_TENANT_MODEL', 'App\\Models\\Team'),
-
- // Tenant column type ('uuid' or 'id')
- 'column_type' => env('EVOLUTION_TENANT_COLUMN_TYPE', 'uuid'),
+ 'enabled' => false,
+ 'column' => 'team_id',
+ 'table' => 'teams',
+ 'model' => 'App\\Models\\Team',
+ 'column_type' => 'uuid', // 'uuid' or 'id'
],
];
diff --git a/resources/lang/ar/action.php b/resources/lang/ar/action.php
new file mode 100644
index 0000000..7ce0a89
--- /dev/null
+++ b/resources/lang/ar/action.php
@@ -0,0 +1,42 @@
+ 'إرسال رسالة واتساب',
+ 'modal_heading' => 'إرسال رسالة واتساب',
+ 'modal_description' => 'إرسال رسالة إلى رقم واتساب.',
+ 'send' => 'إرسال الرسالة',
+
+ // Form fields
+ 'instance' => 'المثيل',
+ 'instance_helper' => 'اختر مثيل واتساب لإرسال الرسالة منه.',
+ 'number' => 'رقم الهاتف',
+ 'number_helper' => 'أدخل رقم الهاتف مع رمز البلد (مثال: 5511999999999).',
+ 'type' => 'نوع الرسالة',
+ 'message' => 'الرسالة',
+ 'message_placeholder' => 'اكتب رسالتك هنا...',
+ 'caption' => 'التعليق',
+ 'caption_placeholder' => 'تعليق اختياري للوسائط...',
+ 'media' => 'ملف الوسائط',
+ 'media_helper' => 'قم بتحميل الملف المراد إرساله.',
+
+ // Location fields
+ 'latitude' => 'خط العرض',
+ 'longitude' => 'خط الطول',
+ 'location_name' => 'اسم الموقع',
+ 'location_name_placeholder' => 'مثال: مكتبي',
+ 'location_address' => 'العنوان',
+ 'location_address_placeholder' => 'مثال: 123 الشارع الرئيسي، المدينة',
+
+ // Contact fields
+ 'contact_name' => 'اسم جهة الاتصال',
+ 'contact_number' => 'هاتف جهة الاتصال',
+
+ // Notifications
+ 'success_title' => 'تم إرسال الرسالة!',
+ 'success_body' => 'تم إرسال رسالة واتساب الخاصة بك بنجاح.',
+ 'error_title' => 'فشل الإرسال',
+ 'missing_required_fields' => 'معرف المثيل ورقم الهاتف مطلوبان.',
+ 'unsupported_type' => 'نوع رسالة غير مدعوم.',
+];
diff --git a/resources/lang/ar/enums.php b/resources/lang/ar/enums.php
new file mode 100644
index 0000000..ebbf392
--- /dev/null
+++ b/resources/lang/ar/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'متصل',
+ 'connecting' => 'جاري الاتصال',
+ 'close' => 'غير متصل',
+ 'refused' => 'مرفوض',
+ ],
+
+ 'message_type' => [
+ 'text' => 'نص',
+ 'image' => 'صورة',
+ 'audio' => 'صوت',
+ 'video' => 'فيديو',
+ 'document' => 'مستند',
+ 'location' => 'موقع',
+ 'contact' => 'جهة اتصال',
+ 'sticker' => 'ملصق',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'وارد',
+ 'outgoing' => 'صادر',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'قيد الانتظار',
+ 'sent' => 'مرسل',
+ 'delivered' => 'تم التسليم',
+ 'read' => 'مقروء',
+ 'failed' => 'فشل',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'بدء التطبيق',
+ 'qrcode_updated' => 'تم تحديث رمز QR',
+ 'connection_update' => 'تحديث الاتصال',
+ 'messages_set' => 'تعيين الرسائل',
+ 'messages_upsert' => 'رسالة مستلمة',
+ 'messages_update' => 'تحديث الرسالة',
+ 'messages_delete' => 'حذف الرسالة',
+ 'send_message' => 'رسالة مرسلة',
+ 'presence_update' => 'تحديث التواجد',
+ 'new_token' => 'رمز جديد',
+ 'logout_instance' => 'تسجيل خروج المثيل',
+ 'remove_instance' => 'إزالة المثيل',
+ ],
+];
diff --git a/resources/lang/ar/message.php b/resources/lang/ar/message.php
new file mode 100644
index 0000000..aa303e1
--- /dev/null
+++ b/resources/lang/ar/message.php
@@ -0,0 +1,34 @@
+ 'الرسائل',
+ 'model_label' => 'رسالة',
+ 'plural_model_label' => 'الرسائل',
+
+ 'sections' => [
+ 'message_info' => 'معلومات الرسالة',
+ 'content' => 'المحتوى',
+ 'timestamps' => 'الطوابع الزمنية',
+ 'raw_payload' => 'البيانات الخام',
+ ],
+
+ 'fields' => [
+ 'instance' => 'المثيل',
+ 'direction' => 'الاتجاه',
+ 'phone' => 'الهاتف',
+ 'type' => 'النوع',
+ 'content' => 'المحتوى',
+ 'status' => 'الحالة',
+ 'message_id' => 'معرف الرسالة',
+ 'media' => 'الوسائط',
+ 'media_caption' => 'تعليق الوسائط',
+ 'media_url' => 'رابط الوسائط',
+ 'location' => 'الموقع',
+ 'sent_at' => 'تاريخ الإرسال',
+ 'delivered_at' => 'تاريخ التسليم',
+ 'read_at' => 'تاريخ القراءة',
+ 'created_at' => 'تاريخ الإنشاء',
+ ],
+];
diff --git a/resources/lang/ar/qrcode.php b/resources/lang/ar/qrcode.php
new file mode 100644
index 0000000..b0d67f6
--- /dev/null
+++ b/resources/lang/ar/qrcode.php
@@ -0,0 +1,21 @@
+ 'اتصال :instance',
+ 'loading' => 'جاري التحميل...',
+ 'connected' => 'متصل',
+ 'waiting_scan' => 'في انتظار المسح',
+ 'error' => 'خطأ في الاتصال',
+ 'expires_in' => 'ينتهي في',
+ 'connected_title' => 'تم اتصال واتساب!',
+ 'connected_description' => 'مثيل واتساب الخاص بك متصل وجاهز لإرسال واستقبال الرسائل.',
+ 'error_title' => 'خطأ في الاتصال',
+ 'try_again' => 'حاول مرة أخرى',
+ 'scan_instructions' => 'افتح واتساب على هاتفك، اذهب إلى الإعدادات > الأجهزة المرتبطة > ربط جهاز، وامسح رمز QR هذا.',
+ 'or_use_code' => 'أو أدخل هذا الرمز على هاتفك:',
+ 'copied' => 'تم النسخ!',
+ 'refresh' => 'تحديث رمز QR',
+ 'generate' => 'إنشاء رمز QR',
+];
diff --git a/resources/lang/ar/resource.php b/resources/lang/ar/resource.php
new file mode 100644
index 0000000..3add586
--- /dev/null
+++ b/resources/lang/ar/resource.php
@@ -0,0 +1,60 @@
+ 'المثيلات',
+ 'navigation_group' => 'واتساب',
+ 'model_label' => 'مثيل',
+ 'plural_model_label' => 'المثيلات',
+
+ 'sections' => [
+ 'instance_info' => 'معلومات المثيل',
+ 'settings' => 'الإعدادات',
+ 'connection' => 'الاتصال',
+ ],
+
+ 'fields' => [
+ 'name' => 'اسم المثيل',
+ 'name_helper' => 'اسم فريد لتحديد هذا المثيل',
+ 'number' => 'رقم الهاتف',
+ 'number_helper' => 'رقم هاتف واتساب مع رمز البلد',
+ 'status' => 'الحالة',
+ 'profile_picture' => 'صورة الملف الشخصي',
+ 'reject_call' => 'رفض المكالمات',
+ 'reject_call_helper' => 'رفض المكالمات الواردة تلقائيًا',
+ 'msg_call' => 'رسالة الرفض',
+ 'msg_call_helper' => 'الرسالة المرسلة عند رفض المكالمة',
+ 'groups_ignore' => 'تجاهل المجموعات',
+ 'groups_ignore_helper' => 'عدم معالجة الرسائل من المجموعات',
+ 'always_online' => 'متصل دائمًا',
+ 'always_online_helper' => 'إبقاء الحالة كمتصل',
+ 'read_messages' => 'قراءة الرسائل',
+ 'read_messages_helper' => 'وضع علامة مقروء على الرسائل تلقائيًا',
+ 'read_status' => 'قراءة الحالة',
+ 'read_status_helper' => 'عرض تحديثات الحالة تلقائيًا',
+ 'sync_full_history' => 'مزامنة السجل الكامل',
+ 'sync_full_history_helper' => 'مزامنة جميع سجل الرسائل عند الاتصال',
+ 'created_at' => 'تاريخ الإنشاء',
+ 'updated_at' => 'تاريخ التحديث',
+ ],
+
+ 'actions' => [
+ 'connect' => 'اتصال',
+ 'disconnect' => 'قطع الاتصال',
+ 'delete' => 'حذف',
+ 'refresh' => 'تحديث',
+ 'view_qrcode' => 'عرض رمز QR',
+ 'close' => 'إغلاق',
+ 'back' => 'العودة للقائمة',
+ ],
+
+ 'messages' => [
+ 'created' => 'تم إنشاء المثيل بنجاح',
+ 'updated' => 'تم تحديث المثيل بنجاح',
+ 'deleted' => 'تم حذف المثيل بنجاح',
+ 'connected' => 'تم الاتصال بالمثيل بنجاح',
+ 'disconnected' => 'تم قطع اتصال المثيل بنجاح',
+ 'connection_failed' => 'فشل الاتصال بالمثيل',
+ ],
+];
diff --git a/resources/lang/ar/webhook.php b/resources/lang/ar/webhook.php
new file mode 100644
index 0000000..43bcbe1
--- /dev/null
+++ b/resources/lang/ar/webhook.php
@@ -0,0 +1,31 @@
+ 'سجلات Webhook',
+ 'model_label' => 'سجل Webhook',
+ 'plural_model_label' => 'سجلات Webhook',
+
+ 'sections' => [
+ 'webhook_info' => 'معلومات Webhook',
+ 'payload' => 'البيانات',
+ 'error' => 'الخطأ',
+ ],
+
+ 'fields' => [
+ 'instance' => 'المثيل',
+ 'event' => 'الحدث',
+ 'processed' => 'تمت المعالجة',
+ 'has_error' => 'يوجد خطأ',
+ 'error' => 'الخطأ',
+ 'processing_time' => 'وقت المعالجة',
+ 'created_at' => 'تاريخ الإنشاء',
+ 'updated_at' => 'تاريخ التحديث',
+ ],
+
+ 'status' => [
+ 'yes' => 'نعم',
+ 'no' => 'لا',
+ ],
+];
diff --git a/resources/lang/de/action.php b/resources/lang/de/action.php
new file mode 100644
index 0000000..91045e7
--- /dev/null
+++ b/resources/lang/de/action.php
@@ -0,0 +1,42 @@
+ 'WhatsApp-Nachricht senden',
+ 'modal_heading' => 'WhatsApp-Nachricht senden',
+ 'modal_description' => 'Senden Sie eine Nachricht an eine WhatsApp-Nummer.',
+ 'send' => 'Nachricht senden',
+
+ // Form fields
+ 'instance' => 'Instanz',
+ 'instance_helper' => 'Wählen Sie die WhatsApp-Instanz zum Senden der Nachricht.',
+ 'number' => 'Telefonnummer',
+ 'number_helper' => 'Geben Sie die Telefonnummer mit Ländervorwahl ein (z.B. 4915123456789).',
+ 'type' => 'Nachrichtentyp',
+ 'message' => 'Nachricht',
+ 'message_placeholder' => 'Geben Sie hier Ihre Nachricht ein...',
+ 'caption' => 'Beschriftung',
+ 'caption_placeholder' => 'Optionale Beschriftung für die Medien...',
+ 'media' => 'Mediendatei',
+ 'media_helper' => 'Laden Sie die zu sendende Datei hoch.',
+
+ // Location fields
+ 'latitude' => 'Breitengrad',
+ 'longitude' => 'Längengrad',
+ 'location_name' => 'Ortsname',
+ 'location_name_placeholder' => 'z.B. Mein Büro',
+ 'location_address' => 'Adresse',
+ 'location_address_placeholder' => 'z.B. Hauptstraße 123, Stadt',
+
+ // Contact fields
+ 'contact_name' => 'Kontaktname',
+ 'contact_number' => 'Kontakttelefon',
+
+ // Notifications
+ 'success_title' => 'Nachricht gesendet!',
+ 'success_body' => 'Ihre WhatsApp-Nachricht wurde erfolgreich gesendet.',
+ 'error_title' => 'Senden fehlgeschlagen',
+ 'missing_required_fields' => 'Instanz-ID und Telefonnummer sind erforderlich.',
+ 'unsupported_type' => 'Nicht unterstützter Nachrichtentyp.',
+];
diff --git a/resources/lang/de/enums.php b/resources/lang/de/enums.php
new file mode 100644
index 0000000..4c26dfc
--- /dev/null
+++ b/resources/lang/de/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Verbunden',
+ 'connecting' => 'Verbinden',
+ 'close' => 'Getrennt',
+ 'refused' => 'Abgelehnt',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Text',
+ 'image' => 'Bild',
+ 'audio' => 'Audio',
+ 'video' => 'Video',
+ 'document' => 'Dokument',
+ 'location' => 'Standort',
+ 'contact' => 'Kontakt',
+ 'sticker' => 'Sticker',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Eingehend',
+ 'outgoing' => 'Ausgehend',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'Ausstehend',
+ 'sent' => 'Gesendet',
+ 'delivered' => 'Zugestellt',
+ 'read' => 'Gelesen',
+ 'failed' => 'Fehlgeschlagen',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Anwendungsstart',
+ 'qrcode_updated' => 'QR-Code aktualisiert',
+ 'connection_update' => 'Verbindungsaktualisierung',
+ 'messages_set' => 'Nachrichten gesetzt',
+ 'messages_upsert' => 'Nachricht empfangen',
+ 'messages_update' => 'Nachricht aktualisiert',
+ 'messages_delete' => 'Nachricht gelöscht',
+ 'send_message' => 'Nachricht gesendet',
+ 'presence_update' => 'Präsenzaktualisierung',
+ 'new_token' => 'Neuer Token',
+ 'logout_instance' => 'Instanz-Abmeldung',
+ 'remove_instance' => 'Instanz entfernt',
+ ],
+];
diff --git a/resources/lang/de/message.php b/resources/lang/de/message.php
new file mode 100644
index 0000000..323431d
--- /dev/null
+++ b/resources/lang/de/message.php
@@ -0,0 +1,34 @@
+ 'Nachrichten',
+ 'model_label' => 'Nachricht',
+ 'plural_model_label' => 'Nachrichten',
+
+ 'sections' => [
+ 'message_info' => 'Nachrichteninformationen',
+ 'content' => 'Inhalt',
+ 'timestamps' => 'Zeitstempel',
+ 'raw_payload' => 'Rohdaten',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instanz',
+ 'direction' => 'Richtung',
+ 'phone' => 'Telefon',
+ 'type' => 'Typ',
+ 'content' => 'Inhalt',
+ 'status' => 'Status',
+ 'message_id' => 'Nachrichten-ID',
+ 'media' => 'Medien',
+ 'media_caption' => 'Medienbeschriftung',
+ 'media_url' => 'Medien-URL',
+ 'location' => 'Standort',
+ 'sent_at' => 'Gesendet am',
+ 'delivered_at' => 'Zugestellt am',
+ 'read_at' => 'Gelesen am',
+ 'created_at' => 'Erstellt am',
+ ],
+];
diff --git a/resources/lang/de/qrcode.php b/resources/lang/de/qrcode.php
new file mode 100644
index 0000000..85a7eb6
--- /dev/null
+++ b/resources/lang/de/qrcode.php
@@ -0,0 +1,21 @@
+ 'Verbinden :instance',
+ 'loading' => 'Laden...',
+ 'connected' => 'Verbunden',
+ 'waiting_scan' => 'Warten auf Scan',
+ 'error' => 'Verbindungsfehler',
+ 'expires_in' => 'Läuft ab in',
+ 'connected_title' => 'WhatsApp verbunden!',
+ 'connected_description' => 'Ihre WhatsApp-Instanz ist verbunden und bereit zum Senden und Empfangen von Nachrichten.',
+ 'error_title' => 'Verbindungsfehler',
+ 'try_again' => 'Erneut versuchen',
+ 'scan_instructions' => 'Öffnen Sie WhatsApp auf Ihrem Telefon, gehen Sie zu Einstellungen > Verknüpfte Geräte > Gerät verknüpfen und scannen Sie diesen QR-Code.',
+ 'or_use_code' => 'Oder geben Sie diesen Code auf Ihrem Telefon ein:',
+ 'copied' => 'Kopiert!',
+ 'refresh' => 'QR-Code aktualisieren',
+ 'generate' => 'QR-Code generieren',
+];
diff --git a/resources/lang/de/resource.php b/resources/lang/de/resource.php
new file mode 100644
index 0000000..cf72605
--- /dev/null
+++ b/resources/lang/de/resource.php
@@ -0,0 +1,60 @@
+ 'Instanzen',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Instanz',
+ 'plural_model_label' => 'Instanzen',
+
+ 'sections' => [
+ 'instance_info' => 'Instanzinformationen',
+ 'settings' => 'Einstellungen',
+ 'connection' => 'Verbindung',
+ ],
+
+ 'fields' => [
+ 'name' => 'Instanzname',
+ 'name_helper' => 'Ein eindeutiger Name zur Identifizierung dieser Instanz',
+ 'number' => 'Telefonnummer',
+ 'number_helper' => 'Die WhatsApp-Telefonnummer mit Ländervorwahl',
+ 'status' => 'Status',
+ 'profile_picture' => 'Profilbild',
+ 'reject_call' => 'Anrufe ablehnen',
+ 'reject_call_helper' => 'Eingehende Anrufe automatisch ablehnen',
+ 'msg_call' => 'Ablehnungsnachricht',
+ 'msg_call_helper' => 'Nachricht, die beim Ablehnen eines Anrufs gesendet wird',
+ 'groups_ignore' => 'Gruppen ignorieren',
+ 'groups_ignore_helper' => 'Nachrichten aus Gruppen nicht verarbeiten',
+ 'always_online' => 'Immer online',
+ 'always_online_helper' => 'Status als online halten',
+ 'read_messages' => 'Nachrichten lesen',
+ 'read_messages_helper' => 'Nachrichten automatisch als gelesen markieren',
+ 'read_status' => 'Status lesen',
+ 'read_status_helper' => 'Statusaktualisierungen automatisch anzeigen',
+ 'sync_full_history' => 'Vollständigen Verlauf synchronisieren',
+ 'sync_full_history_helper' => 'Gesamten Nachrichtenverlauf bei Verbindung synchronisieren',
+ 'created_at' => 'Erstellt am',
+ 'updated_at' => 'Aktualisiert am',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Verbinden',
+ 'disconnect' => 'Trennen',
+ 'delete' => 'Löschen',
+ 'refresh' => 'Aktualisieren',
+ 'view_qrcode' => 'QR-Code anzeigen',
+ 'close' => 'Schließen',
+ 'back' => 'Zurück zur Liste',
+ ],
+
+ 'messages' => [
+ 'created' => 'Instanz erfolgreich erstellt',
+ 'updated' => 'Instanz erfolgreich aktualisiert',
+ 'deleted' => 'Instanz erfolgreich gelöscht',
+ 'connected' => 'Instanz erfolgreich verbunden',
+ 'disconnected' => 'Instanz erfolgreich getrennt',
+ 'connection_failed' => 'Verbindung zur Instanz fehlgeschlagen',
+ ],
+];
diff --git a/resources/lang/de/webhook.php b/resources/lang/de/webhook.php
new file mode 100644
index 0000000..fa3966a
--- /dev/null
+++ b/resources/lang/de/webhook.php
@@ -0,0 +1,31 @@
+ 'Webhook-Protokolle',
+ 'model_label' => 'Webhook-Protokoll',
+ 'plural_model_label' => 'Webhook-Protokolle',
+
+ 'sections' => [
+ 'webhook_info' => 'Webhook-Informationen',
+ 'payload' => 'Nutzlast',
+ 'error' => 'Fehler',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instanz',
+ 'event' => 'Ereignis',
+ 'processed' => 'Verarbeitet',
+ 'has_error' => 'Hat Fehler',
+ 'error' => 'Fehler',
+ 'processing_time' => 'Verarbeitungszeit',
+ 'created_at' => 'Erstellt am',
+ 'updated_at' => 'Aktualisiert am',
+ ],
+
+ 'status' => [
+ 'yes' => 'Ja',
+ 'no' => 'Nein',
+ ],
+];
diff --git a/resources/lang/es/action.php b/resources/lang/es/action.php
new file mode 100644
index 0000000..b6df94b
--- /dev/null
+++ b/resources/lang/es/action.php
@@ -0,0 +1,42 @@
+ 'Enviar Mensaje de WhatsApp',
+ 'modal_heading' => 'Enviar Mensaje de WhatsApp',
+ 'modal_description' => 'Enviar un mensaje a un número de WhatsApp.',
+ 'send' => 'Enviar Mensaje',
+
+ // Form fields
+ 'instance' => 'Instancia',
+ 'instance_helper' => 'Seleccione la instancia de WhatsApp para enviar el mensaje.',
+ 'number' => 'Número de Teléfono',
+ 'number_helper' => 'Ingrese el número de teléfono con código de país (ej: 5491155555555).',
+ 'type' => 'Tipo de Mensaje',
+ 'message' => 'Mensaje',
+ 'message_placeholder' => 'Escriba su mensaje aquí...',
+ 'caption' => 'Leyenda',
+ 'caption_placeholder' => 'Leyenda opcional para el archivo...',
+ 'media' => 'Archivo Multimedia',
+ 'media_helper' => 'Suba el archivo a enviar.',
+
+ // Location fields
+ 'latitude' => 'Latitud',
+ 'longitude' => 'Longitud',
+ 'location_name' => 'Nombre del Lugar',
+ 'location_name_placeholder' => 'ej: Mi Oficina',
+ 'location_address' => 'Dirección',
+ 'location_address_placeholder' => 'ej: Calle Principal 123, Ciudad',
+
+ // Contact fields
+ 'contact_name' => 'Nombre del Contacto',
+ 'contact_number' => 'Teléfono del Contacto',
+
+ // Notifications
+ 'success_title' => '¡Mensaje Enviado!',
+ 'success_body' => 'Su mensaje de WhatsApp ha sido enviado exitosamente.',
+ 'error_title' => 'Error al Enviar',
+ 'missing_required_fields' => 'El ID de instancia y el número de teléfono son requeridos.',
+ 'unsupported_type' => 'Tipo de mensaje no soportado.',
+];
diff --git a/resources/lang/es/enums.php b/resources/lang/es/enums.php
new file mode 100644
index 0000000..cb3bd70
--- /dev/null
+++ b/resources/lang/es/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Conectado',
+ 'connecting' => 'Conectando',
+ 'close' => 'Desconectado',
+ 'refused' => 'Rechazado',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Texto',
+ 'image' => 'Imagen',
+ 'audio' => 'Audio',
+ 'video' => 'Video',
+ 'document' => 'Documento',
+ 'location' => 'Ubicación',
+ 'contact' => 'Contacto',
+ 'sticker' => 'Sticker',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Entrante',
+ 'outgoing' => 'Saliente',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'Pendiente',
+ 'sent' => 'Enviado',
+ 'delivered' => 'Entregado',
+ 'read' => 'Leído',
+ 'failed' => 'Fallido',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Inicio de Aplicación',
+ 'qrcode_updated' => 'Código QR Actualizado',
+ 'connection_update' => 'Actualización de Conexión',
+ 'messages_set' => 'Mensajes Establecidos',
+ 'messages_upsert' => 'Mensaje Recibido',
+ 'messages_update' => 'Mensaje Actualizado',
+ 'messages_delete' => 'Mensaje Eliminado',
+ 'send_message' => 'Mensaje Enviado',
+ 'presence_update' => 'Actualización de Presencia',
+ 'new_token' => 'Nuevo Token',
+ 'logout_instance' => 'Cierre de Sesión de Instancia',
+ 'remove_instance' => 'Instancia Eliminada',
+ ],
+];
diff --git a/resources/lang/es/message.php b/resources/lang/es/message.php
new file mode 100644
index 0000000..ed43f2f
--- /dev/null
+++ b/resources/lang/es/message.php
@@ -0,0 +1,34 @@
+ 'Mensajes',
+ 'model_label' => 'Mensaje',
+ 'plural_model_label' => 'Mensajes',
+
+ 'sections' => [
+ 'message_info' => 'Información del Mensaje',
+ 'content' => 'Contenido',
+ 'timestamps' => 'Marcas de Tiempo',
+ 'raw_payload' => 'Datos Crudos',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instancia',
+ 'direction' => 'Dirección',
+ 'phone' => 'Teléfono',
+ 'type' => 'Tipo',
+ 'content' => 'Contenido',
+ 'status' => 'Estado',
+ 'message_id' => 'ID del Mensaje',
+ 'media' => 'Multimedia',
+ 'media_caption' => 'Leyenda del Archivo',
+ 'media_url' => 'URL del Archivo',
+ 'location' => 'Ubicación',
+ 'sent_at' => 'Enviado el',
+ 'delivered_at' => 'Entregado el',
+ 'read_at' => 'Leído el',
+ 'created_at' => 'Creado el',
+ ],
+];
diff --git a/resources/lang/es/qrcode.php b/resources/lang/es/qrcode.php
new file mode 100644
index 0000000..9593cf8
--- /dev/null
+++ b/resources/lang/es/qrcode.php
@@ -0,0 +1,21 @@
+ 'Conectar :instance',
+ 'loading' => 'Cargando...',
+ 'connected' => 'Conectado',
+ 'waiting_scan' => 'Esperando escaneo',
+ 'error' => 'Error de conexión',
+ 'expires_in' => 'Expira en',
+ 'connected_title' => '¡WhatsApp Conectado!',
+ 'connected_description' => 'Su instancia de WhatsApp está conectada y lista para enviar y recibir mensajes.',
+ 'error_title' => 'Error de Conexión',
+ 'try_again' => 'Intentar de Nuevo',
+ 'scan_instructions' => 'Abra WhatsApp en su teléfono, vaya a Configuración > Dispositivos Vinculados > Vincular un Dispositivo, y escanee este código QR.',
+ 'or_use_code' => 'O ingrese este código en su teléfono:',
+ 'copied' => '¡Copiado!',
+ 'refresh' => 'Actualizar Código QR',
+ 'generate' => 'Generar Código QR',
+];
diff --git a/resources/lang/es/resource.php b/resources/lang/es/resource.php
new file mode 100644
index 0000000..cd99603
--- /dev/null
+++ b/resources/lang/es/resource.php
@@ -0,0 +1,60 @@
+ 'Instancias',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Instancia',
+ 'plural_model_label' => 'Instancias',
+
+ 'sections' => [
+ 'instance_info' => 'Información de la Instancia',
+ 'settings' => 'Configuración',
+ 'connection' => 'Conexión',
+ ],
+
+ 'fields' => [
+ 'name' => 'Nombre de la Instancia',
+ 'name_helper' => 'Un nombre único para identificar esta instancia',
+ 'number' => 'Número de Teléfono',
+ 'number_helper' => 'El número de teléfono de WhatsApp con código de país',
+ 'status' => 'Estado',
+ 'profile_picture' => 'Foto de Perfil',
+ 'reject_call' => 'Rechazar Llamadas',
+ 'reject_call_helper' => 'Rechazar automáticamente las llamadas entrantes',
+ 'msg_call' => 'Mensaje de Rechazo',
+ 'msg_call_helper' => 'Mensaje enviado al rechazar una llamada',
+ 'groups_ignore' => 'Ignorar Grupos',
+ 'groups_ignore_helper' => 'No procesar mensajes de grupos',
+ 'always_online' => 'Siempre en Línea',
+ 'always_online_helper' => 'Mantener el estado como en línea',
+ 'read_messages' => 'Leer Mensajes',
+ 'read_messages_helper' => 'Marcar automáticamente los mensajes como leídos',
+ 'read_status' => 'Leer Estado',
+ 'read_status_helper' => 'Ver automáticamente las actualizaciones de estado',
+ 'sync_full_history' => 'Sincronizar Historial Completo',
+ 'sync_full_history_helper' => 'Sincronizar todo el historial de mensajes al conectar',
+ 'created_at' => 'Creado el',
+ 'updated_at' => 'Actualizado el',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Conectar',
+ 'disconnect' => 'Desconectar',
+ 'delete' => 'Eliminar',
+ 'refresh' => 'Actualizar',
+ 'view_qrcode' => 'Ver Código QR',
+ 'close' => 'Cerrar',
+ 'back' => 'Volver a la Lista',
+ ],
+
+ 'messages' => [
+ 'created' => 'Instancia creada exitosamente',
+ 'updated' => 'Instancia actualizada exitosamente',
+ 'deleted' => 'Instancia eliminada exitosamente',
+ 'connected' => 'Instancia conectada exitosamente',
+ 'disconnected' => 'Instancia desconectada exitosamente',
+ 'connection_failed' => 'Error al conectar la instancia',
+ ],
+];
diff --git a/resources/lang/es/webhook.php b/resources/lang/es/webhook.php
new file mode 100644
index 0000000..8fa56ff
--- /dev/null
+++ b/resources/lang/es/webhook.php
@@ -0,0 +1,31 @@
+ 'Registros de Webhook',
+ 'model_label' => 'Registro de Webhook',
+ 'plural_model_label' => 'Registros de Webhook',
+
+ 'sections' => [
+ 'webhook_info' => 'Información del Webhook',
+ 'payload' => 'Carga Útil',
+ 'error' => 'Error',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instancia',
+ 'event' => 'Evento',
+ 'processed' => 'Procesado',
+ 'has_error' => 'Tiene Error',
+ 'error' => 'Error',
+ 'processing_time' => 'Tiempo de Procesamiento',
+ 'created_at' => 'Creado el',
+ 'updated_at' => 'Actualizado el',
+ ],
+
+ 'status' => [
+ 'yes' => 'Sí',
+ 'no' => 'No',
+ ],
+];
diff --git a/resources/lang/fr/action.php b/resources/lang/fr/action.php
new file mode 100644
index 0000000..4056fda
--- /dev/null
+++ b/resources/lang/fr/action.php
@@ -0,0 +1,42 @@
+ 'Envoyer un Message WhatsApp',
+ 'modal_heading' => 'Envoyer un Message WhatsApp',
+ 'modal_description' => 'Envoyer un message à un numéro WhatsApp.',
+ 'send' => 'Envoyer le Message',
+
+ // Form fields
+ 'instance' => 'Instance',
+ 'instance_helper' => 'Sélectionnez l\'instance WhatsApp pour envoyer le message.',
+ 'number' => 'Numéro de Téléphone',
+ 'number_helper' => 'Entrez le numéro de téléphone avec l\'indicatif du pays (ex: 33612345678).',
+ 'type' => 'Type de Message',
+ 'message' => 'Message',
+ 'message_placeholder' => 'Tapez votre message ici...',
+ 'caption' => 'Légende',
+ 'caption_placeholder' => 'Légende optionnelle pour le média...',
+ 'media' => 'Fichier Média',
+ 'media_helper' => 'Téléchargez le fichier à envoyer.',
+
+ // Location fields
+ 'latitude' => 'Latitude',
+ 'longitude' => 'Longitude',
+ 'location_name' => 'Nom du Lieu',
+ 'location_name_placeholder' => 'ex: Mon Bureau',
+ 'location_address' => 'Adresse',
+ 'location_address_placeholder' => 'ex: 123 Rue Principale, Ville',
+
+ // Contact fields
+ 'contact_name' => 'Nom du Contact',
+ 'contact_number' => 'Téléphone du Contact',
+
+ // Notifications
+ 'success_title' => 'Message Envoyé !',
+ 'success_body' => 'Votre message WhatsApp a été envoyé avec succès.',
+ 'error_title' => 'Échec de l\'Envoi',
+ 'missing_required_fields' => 'L\'ID de l\'instance et le numéro de téléphone sont requis.',
+ 'unsupported_type' => 'Type de message non supporté.',
+];
diff --git a/resources/lang/fr/enums.php b/resources/lang/fr/enums.php
new file mode 100644
index 0000000..a0d031a
--- /dev/null
+++ b/resources/lang/fr/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Connecté',
+ 'connecting' => 'Connexion',
+ 'close' => 'Déconnecté',
+ 'refused' => 'Refusé',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Texte',
+ 'image' => 'Image',
+ 'audio' => 'Audio',
+ 'video' => 'Vidéo',
+ 'document' => 'Document',
+ 'location' => 'Localisation',
+ 'contact' => 'Contact',
+ 'sticker' => 'Autocollant',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Entrant',
+ 'outgoing' => 'Sortant',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'En attente',
+ 'sent' => 'Envoyé',
+ 'delivered' => 'Livré',
+ 'read' => 'Lu',
+ 'failed' => 'Échoué',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Démarrage de l\'Application',
+ 'qrcode_updated' => 'Code QR Mis à Jour',
+ 'connection_update' => 'Mise à Jour de Connexion',
+ 'messages_set' => 'Messages Définis',
+ 'messages_upsert' => 'Message Reçu',
+ 'messages_update' => 'Message Mis à Jour',
+ 'messages_delete' => 'Message Supprimé',
+ 'send_message' => 'Message Envoyé',
+ 'presence_update' => 'Mise à Jour de Présence',
+ 'new_token' => 'Nouveau Jeton',
+ 'logout_instance' => 'Déconnexion de l\'Instance',
+ 'remove_instance' => 'Instance Supprimée',
+ ],
+];
diff --git a/resources/lang/fr/message.php b/resources/lang/fr/message.php
new file mode 100644
index 0000000..9c27a5d
--- /dev/null
+++ b/resources/lang/fr/message.php
@@ -0,0 +1,34 @@
+ 'Messages',
+ 'model_label' => 'Message',
+ 'plural_model_label' => 'Messages',
+
+ 'sections' => [
+ 'message_info' => 'Informations du Message',
+ 'content' => 'Contenu',
+ 'timestamps' => 'Horodatages',
+ 'raw_payload' => 'Données Brutes',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instance',
+ 'direction' => 'Direction',
+ 'phone' => 'Téléphone',
+ 'type' => 'Type',
+ 'content' => 'Contenu',
+ 'status' => 'Statut',
+ 'message_id' => 'ID du Message',
+ 'media' => 'Média',
+ 'media_caption' => 'Légende du Média',
+ 'media_url' => 'URL du Média',
+ 'location' => 'Localisation',
+ 'sent_at' => 'Envoyé le',
+ 'delivered_at' => 'Livré le',
+ 'read_at' => 'Lu le',
+ 'created_at' => 'Créé le',
+ ],
+];
diff --git a/resources/lang/fr/qrcode.php b/resources/lang/fr/qrcode.php
new file mode 100644
index 0000000..1e5a5a8
--- /dev/null
+++ b/resources/lang/fr/qrcode.php
@@ -0,0 +1,21 @@
+ 'Connecter :instance',
+ 'loading' => 'Chargement...',
+ 'connected' => 'Connecté',
+ 'waiting_scan' => 'En attente du scan',
+ 'error' => 'Erreur de connexion',
+ 'expires_in' => 'Expire dans',
+ 'connected_title' => 'WhatsApp Connecté !',
+ 'connected_description' => 'Votre instance WhatsApp est connectée et prête à envoyer et recevoir des messages.',
+ 'error_title' => 'Erreur de Connexion',
+ 'try_again' => 'Réessayer',
+ 'scan_instructions' => 'Ouvrez WhatsApp sur votre téléphone, allez dans Paramètres > Appareils Liés > Lier un Appareil, et scannez ce code QR.',
+ 'or_use_code' => 'Ou entrez ce code sur votre téléphone :',
+ 'copied' => 'Copié !',
+ 'refresh' => 'Actualiser le Code QR',
+ 'generate' => 'Générer le Code QR',
+];
diff --git a/resources/lang/fr/resource.php b/resources/lang/fr/resource.php
new file mode 100644
index 0000000..a2ab21e
--- /dev/null
+++ b/resources/lang/fr/resource.php
@@ -0,0 +1,60 @@
+ 'Instances',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Instance',
+ 'plural_model_label' => 'Instances',
+
+ 'sections' => [
+ 'instance_info' => 'Informations de l\'Instance',
+ 'settings' => 'Paramètres',
+ 'connection' => 'Connexion',
+ ],
+
+ 'fields' => [
+ 'name' => 'Nom de l\'Instance',
+ 'name_helper' => 'Un nom unique pour identifier cette instance',
+ 'number' => 'Numéro de Téléphone',
+ 'number_helper' => 'Le numéro de téléphone WhatsApp avec l\'indicatif du pays',
+ 'status' => 'Statut',
+ 'profile_picture' => 'Photo de Profil',
+ 'reject_call' => 'Rejeter les Appels',
+ 'reject_call_helper' => 'Rejeter automatiquement les appels entrants',
+ 'msg_call' => 'Message de Rejet',
+ 'msg_call_helper' => 'Message envoyé lors du rejet d\'un appel',
+ 'groups_ignore' => 'Ignorer les Groupes',
+ 'groups_ignore_helper' => 'Ne pas traiter les messages des groupes',
+ 'always_online' => 'Toujours en Ligne',
+ 'always_online_helper' => 'Garder le statut comme en ligne',
+ 'read_messages' => 'Lire les Messages',
+ 'read_messages_helper' => 'Marquer automatiquement les messages comme lus',
+ 'read_status' => 'Lire le Statut',
+ 'read_status_helper' => 'Voir automatiquement les mises à jour de statut',
+ 'sync_full_history' => 'Synchroniser l\'Historique Complet',
+ 'sync_full_history_helper' => 'Synchroniser tout l\'historique des messages lors de la connexion',
+ 'created_at' => 'Créé le',
+ 'updated_at' => 'Mis à jour le',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Connecter',
+ 'disconnect' => 'Déconnecter',
+ 'delete' => 'Supprimer',
+ 'refresh' => 'Actualiser',
+ 'view_qrcode' => 'Voir le Code QR',
+ 'close' => 'Fermer',
+ 'back' => 'Retour à la Liste',
+ ],
+
+ 'messages' => [
+ 'created' => 'Instance créée avec succès',
+ 'updated' => 'Instance mise à jour avec succès',
+ 'deleted' => 'Instance supprimée avec succès',
+ 'connected' => 'Instance connectée avec succès',
+ 'disconnected' => 'Instance déconnectée avec succès',
+ 'connection_failed' => 'Échec de la connexion de l\'instance',
+ ],
+];
diff --git a/resources/lang/fr/webhook.php b/resources/lang/fr/webhook.php
new file mode 100644
index 0000000..f55b30e
--- /dev/null
+++ b/resources/lang/fr/webhook.php
@@ -0,0 +1,31 @@
+ 'Journaux Webhook',
+ 'model_label' => 'Journal Webhook',
+ 'plural_model_label' => 'Journaux Webhook',
+
+ 'sections' => [
+ 'webhook_info' => 'Informations du Webhook',
+ 'payload' => 'Charge Utile',
+ 'error' => 'Erreur',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instance',
+ 'event' => 'Événement',
+ 'processed' => 'Traité',
+ 'has_error' => 'A une Erreur',
+ 'error' => 'Erreur',
+ 'processing_time' => 'Temps de Traitement',
+ 'created_at' => 'Créé le',
+ 'updated_at' => 'Mis à jour le',
+ ],
+
+ 'status' => [
+ 'yes' => 'Oui',
+ 'no' => 'Non',
+ ],
+];
diff --git a/resources/lang/it/action.php b/resources/lang/it/action.php
new file mode 100644
index 0000000..34466ba
--- /dev/null
+++ b/resources/lang/it/action.php
@@ -0,0 +1,42 @@
+ 'Invia Messaggio WhatsApp',
+ 'modal_heading' => 'Invia Messaggio WhatsApp',
+ 'modal_description' => 'Invia un messaggio a un numero WhatsApp.',
+ 'send' => 'Invia Messaggio',
+
+ // Form fields
+ 'instance' => 'Istanza',
+ 'instance_helper' => 'Seleziona l\'istanza WhatsApp da cui inviare il messaggio.',
+ 'number' => 'Numero di Telefono',
+ 'number_helper' => 'Inserisci il numero di telefono con prefisso internazionale (es: 393331234567).',
+ 'type' => 'Tipo di Messaggio',
+ 'message' => 'Messaggio',
+ 'message_placeholder' => 'Scrivi il tuo messaggio qui...',
+ 'caption' => 'Didascalia',
+ 'caption_placeholder' => 'Didascalia opzionale per il media...',
+ 'media' => 'File Media',
+ 'media_helper' => 'Carica il file da inviare.',
+
+ // Location fields
+ 'latitude' => 'Latitudine',
+ 'longitude' => 'Longitudine',
+ 'location_name' => 'Nome Posizione',
+ 'location_name_placeholder' => 'es: Il Mio Ufficio',
+ 'location_address' => 'Indirizzo',
+ 'location_address_placeholder' => 'es: Via Principale 123, Città',
+
+ // Contact fields
+ 'contact_name' => 'Nome Contatto',
+ 'contact_number' => 'Telefono Contatto',
+
+ // Notifications
+ 'success_title' => 'Messaggio Inviato!',
+ 'success_body' => 'Il tuo messaggio WhatsApp è stato inviato con successo.',
+ 'error_title' => 'Invio Fallito',
+ 'missing_required_fields' => 'ID istanza e numero di telefono sono obbligatori.',
+ 'unsupported_type' => 'Tipo di messaggio non supportato.',
+];
diff --git a/resources/lang/it/enums.php b/resources/lang/it/enums.php
new file mode 100644
index 0000000..7f42852
--- /dev/null
+++ b/resources/lang/it/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Connesso',
+ 'connecting' => 'Connessione',
+ 'close' => 'Disconnesso',
+ 'refused' => 'Rifiutato',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Testo',
+ 'image' => 'Immagine',
+ 'audio' => 'Audio',
+ 'video' => 'Video',
+ 'document' => 'Documento',
+ 'location' => 'Posizione',
+ 'contact' => 'Contatto',
+ 'sticker' => 'Sticker',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'In Arrivo',
+ 'outgoing' => 'In Uscita',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'In Attesa',
+ 'sent' => 'Inviato',
+ 'delivered' => 'Consegnato',
+ 'read' => 'Letto',
+ 'failed' => 'Fallito',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Avvio Applicazione',
+ 'qrcode_updated' => 'Codice QR Aggiornato',
+ 'connection_update' => 'Aggiornamento Connessione',
+ 'messages_set' => 'Messaggi Impostati',
+ 'messages_upsert' => 'Messaggio Ricevuto',
+ 'messages_update' => 'Messaggio Aggiornato',
+ 'messages_delete' => 'Messaggio Eliminato',
+ 'send_message' => 'Messaggio Inviato',
+ 'presence_update' => 'Aggiornamento Presenza',
+ 'new_token' => 'Nuovo Token',
+ 'logout_instance' => 'Logout Istanza',
+ 'remove_instance' => 'Istanza Rimossa',
+ ],
+];
diff --git a/resources/lang/it/message.php b/resources/lang/it/message.php
new file mode 100644
index 0000000..3e3fe56
--- /dev/null
+++ b/resources/lang/it/message.php
@@ -0,0 +1,34 @@
+ 'Messaggi',
+ 'model_label' => 'Messaggio',
+ 'plural_model_label' => 'Messaggi',
+
+ 'sections' => [
+ 'message_info' => 'Informazioni Messaggio',
+ 'content' => 'Contenuto',
+ 'timestamps' => 'Timestamp',
+ 'raw_payload' => 'Dati Grezzi',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Istanza',
+ 'direction' => 'Direzione',
+ 'phone' => 'Telefono',
+ 'type' => 'Tipo',
+ 'content' => 'Contenuto',
+ 'status' => 'Stato',
+ 'message_id' => 'ID Messaggio',
+ 'media' => 'Media',
+ 'media_caption' => 'Didascalia Media',
+ 'media_url' => 'URL Media',
+ 'location' => 'Posizione',
+ 'sent_at' => 'Inviato il',
+ 'delivered_at' => 'Consegnato il',
+ 'read_at' => 'Letto il',
+ 'created_at' => 'Creato il',
+ ],
+];
diff --git a/resources/lang/it/qrcode.php b/resources/lang/it/qrcode.php
new file mode 100644
index 0000000..151180b
--- /dev/null
+++ b/resources/lang/it/qrcode.php
@@ -0,0 +1,21 @@
+ 'Connetti :instance',
+ 'loading' => 'Caricamento...',
+ 'connected' => 'Connesso',
+ 'waiting_scan' => 'In attesa della scansione',
+ 'error' => 'Errore di connessione',
+ 'expires_in' => 'Scade tra',
+ 'connected_title' => 'WhatsApp Connesso!',
+ 'connected_description' => 'La tua istanza WhatsApp è connessa e pronta per inviare e ricevere messaggi.',
+ 'error_title' => 'Errore di Connessione',
+ 'try_again' => 'Riprova',
+ 'scan_instructions' => 'Apri WhatsApp sul tuo telefono, vai su Impostazioni > Dispositivi Collegati > Collega un Dispositivo, e scansiona questo codice QR.',
+ 'or_use_code' => 'Oppure inserisci questo codice sul tuo telefono:',
+ 'copied' => 'Copiato!',
+ 'refresh' => 'Aggiorna Codice QR',
+ 'generate' => 'Genera Codice QR',
+];
diff --git a/resources/lang/it/resource.php b/resources/lang/it/resource.php
new file mode 100644
index 0000000..6eb4e57
--- /dev/null
+++ b/resources/lang/it/resource.php
@@ -0,0 +1,60 @@
+ 'Istanze',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Istanza',
+ 'plural_model_label' => 'Istanze',
+
+ 'sections' => [
+ 'instance_info' => 'Informazioni Istanza',
+ 'settings' => 'Impostazioni',
+ 'connection' => 'Connessione',
+ ],
+
+ 'fields' => [
+ 'name' => 'Nome Istanza',
+ 'name_helper' => 'Un nome univoco per identificare questa istanza',
+ 'number' => 'Numero di Telefono',
+ 'number_helper' => 'Il numero di telefono WhatsApp con prefisso internazionale',
+ 'status' => 'Stato',
+ 'profile_picture' => 'Foto Profilo',
+ 'reject_call' => 'Rifiuta Chiamate',
+ 'reject_call_helper' => 'Rifiuta automaticamente le chiamate in arrivo',
+ 'msg_call' => 'Messaggio di Rifiuto',
+ 'msg_call_helper' => 'Messaggio inviato quando si rifiuta una chiamata',
+ 'groups_ignore' => 'Ignora Gruppi',
+ 'groups_ignore_helper' => 'Non elaborare messaggi dai gruppi',
+ 'always_online' => 'Sempre Online',
+ 'always_online_helper' => 'Mantieni lo stato come online',
+ 'read_messages' => 'Leggi Messaggi',
+ 'read_messages_helper' => 'Segna automaticamente i messaggi come letti',
+ 'read_status' => 'Leggi Stato',
+ 'read_status_helper' => 'Visualizza automaticamente gli aggiornamenti di stato',
+ 'sync_full_history' => 'Sincronizza Cronologia Completa',
+ 'sync_full_history_helper' => 'Sincronizza tutta la cronologia messaggi alla connessione',
+ 'created_at' => 'Creato il',
+ 'updated_at' => 'Aggiornato il',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Connetti',
+ 'disconnect' => 'Disconnetti',
+ 'delete' => 'Elimina',
+ 'refresh' => 'Aggiorna',
+ 'view_qrcode' => 'Visualizza Codice QR',
+ 'close' => 'Chiudi',
+ 'back' => 'Torna alla Lista',
+ ],
+
+ 'messages' => [
+ 'created' => 'Istanza creata con successo',
+ 'updated' => 'Istanza aggiornata con successo',
+ 'deleted' => 'Istanza eliminata con successo',
+ 'connected' => 'Istanza connessa con successo',
+ 'disconnected' => 'Istanza disconnessa con successo',
+ 'connection_failed' => 'Connessione istanza fallita',
+ ],
+];
diff --git a/resources/lang/it/webhook.php b/resources/lang/it/webhook.php
new file mode 100644
index 0000000..d5dcc55
--- /dev/null
+++ b/resources/lang/it/webhook.php
@@ -0,0 +1,31 @@
+ 'Log Webhook',
+ 'model_label' => 'Log Webhook',
+ 'plural_model_label' => 'Log Webhook',
+
+ 'sections' => [
+ 'webhook_info' => 'Informazioni Webhook',
+ 'payload' => 'Payload',
+ 'error' => 'Errore',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Istanza',
+ 'event' => 'Evento',
+ 'processed' => 'Elaborato',
+ 'has_error' => 'Ha Errore',
+ 'error' => 'Errore',
+ 'processing_time' => 'Tempo di Elaborazione',
+ 'created_at' => 'Creato il',
+ 'updated_at' => 'Aggiornato il',
+ ],
+
+ 'status' => [
+ 'yes' => 'Sì',
+ 'no' => 'No',
+ ],
+];
diff --git a/resources/lang/ja/action.php b/resources/lang/ja/action.php
new file mode 100644
index 0000000..96f60f0
--- /dev/null
+++ b/resources/lang/ja/action.php
@@ -0,0 +1,42 @@
+ 'WhatsAppメッセージを送信',
+ 'modal_heading' => 'WhatsAppメッセージを送信',
+ 'modal_description' => 'WhatsApp番号にメッセージを送信します。',
+ 'send' => 'メッセージを送信',
+
+ // Form fields
+ 'instance' => 'インスタンス',
+ 'instance_helper' => 'メッセージを送信するWhatsAppインスタンスを選択してください。',
+ 'number' => '電話番号',
+ 'number_helper' => '国番号付きの電話番号を入力してください(例:819012345678)。',
+ 'type' => 'メッセージタイプ',
+ 'message' => 'メッセージ',
+ 'message_placeholder' => 'ここにメッセージを入力...',
+ 'caption' => 'キャプション',
+ 'caption_placeholder' => 'メディアのオプションキャプション...',
+ 'media' => 'メディアファイル',
+ 'media_helper' => '送信するファイルをアップロードしてください。',
+
+ // Location fields
+ 'latitude' => '緯度',
+ 'longitude' => '経度',
+ 'location_name' => '場所名',
+ 'location_name_placeholder' => '例:私のオフィス',
+ 'location_address' => '住所',
+ 'location_address_placeholder' => '例:東京都渋谷区1-2-3',
+
+ // Contact fields
+ 'contact_name' => '連絡先名',
+ 'contact_number' => '連絡先電話番号',
+
+ // Notifications
+ 'success_title' => 'メッセージ送信完了!',
+ 'success_body' => 'WhatsAppメッセージが正常に送信されました。',
+ 'error_title' => '送信失敗',
+ 'missing_required_fields' => 'インスタンスIDと電話番号は必須です。',
+ 'unsupported_type' => 'サポートされていないメッセージタイプです。',
+];
diff --git a/resources/lang/ja/enums.php b/resources/lang/ja/enums.php
new file mode 100644
index 0000000..668eb11
--- /dev/null
+++ b/resources/lang/ja/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => '接続済み',
+ 'connecting' => '接続中',
+ 'close' => '切断済み',
+ 'refused' => '拒否済み',
+ ],
+
+ 'message_type' => [
+ 'text' => 'テキスト',
+ 'image' => '画像',
+ 'audio' => '音声',
+ 'video' => '動画',
+ 'document' => 'ドキュメント',
+ 'location' => '位置情報',
+ 'contact' => '連絡先',
+ 'sticker' => 'ステッカー',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => '受信',
+ 'outgoing' => '送信',
+ ],
+
+ 'message_status' => [
+ 'pending' => '保留中',
+ 'sent' => '送信済み',
+ 'delivered' => '配信済み',
+ 'read' => '既読',
+ 'failed' => '失敗',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'アプリケーション起動',
+ 'qrcode_updated' => 'QRコード更新',
+ 'connection_update' => '接続更新',
+ 'messages_set' => 'メッセージ設定',
+ 'messages_upsert' => 'メッセージ受信',
+ 'messages_update' => 'メッセージ更新',
+ 'messages_delete' => 'メッセージ削除',
+ 'send_message' => 'メッセージ送信',
+ 'presence_update' => 'プレゼンス更新',
+ 'new_token' => '新しいトークン',
+ 'logout_instance' => 'インスタンスログアウト',
+ 'remove_instance' => 'インスタンス削除',
+ ],
+];
diff --git a/resources/lang/ja/message.php b/resources/lang/ja/message.php
new file mode 100644
index 0000000..c9f7b50
--- /dev/null
+++ b/resources/lang/ja/message.php
@@ -0,0 +1,34 @@
+ 'メッセージ',
+ 'model_label' => 'メッセージ',
+ 'plural_model_label' => 'メッセージ',
+
+ 'sections' => [
+ 'message_info' => 'メッセージ情報',
+ 'content' => 'コンテンツ',
+ 'timestamps' => 'タイムスタンプ',
+ 'raw_payload' => '生データ',
+ ],
+
+ 'fields' => [
+ 'instance' => 'インスタンス',
+ 'direction' => '方向',
+ 'phone' => '電話番号',
+ 'type' => 'タイプ',
+ 'content' => 'コンテンツ',
+ 'status' => 'ステータス',
+ 'message_id' => 'メッセージID',
+ 'media' => 'メディア',
+ 'media_caption' => 'メディアキャプション',
+ 'media_url' => 'メディアURL',
+ 'location' => '位置情報',
+ 'sent_at' => '送信日時',
+ 'delivered_at' => '配信日時',
+ 'read_at' => '既読日時',
+ 'created_at' => '作成日時',
+ ],
+];
diff --git a/resources/lang/ja/qrcode.php b/resources/lang/ja/qrcode.php
new file mode 100644
index 0000000..e282769
--- /dev/null
+++ b/resources/lang/ja/qrcode.php
@@ -0,0 +1,21 @@
+ ':instance に接続',
+ 'loading' => '読み込み中...',
+ 'connected' => '接続済み',
+ 'waiting_scan' => 'スキャン待ち',
+ 'error' => '接続エラー',
+ 'expires_in' => '有効期限',
+ 'connected_title' => 'WhatsApp接続完了!',
+ 'connected_description' => 'WhatsAppインスタンスが接続され、メッセージの送受信が可能です。',
+ 'error_title' => '接続エラー',
+ 'try_again' => '再試行',
+ 'scan_instructions' => 'お使いの携帯電話でWhatsAppを開き、設定 > リンクされたデバイス > デバイスをリンク に進み、このQRコードをスキャンしてください。',
+ 'or_use_code' => 'または携帯電話でこのコードを入力してください:',
+ 'copied' => 'コピーしました!',
+ 'refresh' => 'QRコードを更新',
+ 'generate' => 'QRコードを生成',
+];
diff --git a/resources/lang/ja/resource.php b/resources/lang/ja/resource.php
new file mode 100644
index 0000000..9f0b564
--- /dev/null
+++ b/resources/lang/ja/resource.php
@@ -0,0 +1,60 @@
+ 'インスタンス',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'インスタンス',
+ 'plural_model_label' => 'インスタンス',
+
+ 'sections' => [
+ 'instance_info' => 'インスタンス情報',
+ 'settings' => '設定',
+ 'connection' => '接続',
+ ],
+
+ 'fields' => [
+ 'name' => 'インスタンス名',
+ 'name_helper' => 'このインスタンスを識別するための一意の名前',
+ 'number' => '電話番号',
+ 'number_helper' => '国番号付きのWhatsApp電話番号',
+ 'status' => 'ステータス',
+ 'profile_picture' => 'プロフィール画像',
+ 'reject_call' => '通話を拒否',
+ 'reject_call_helper' => '着信を自動的に拒否する',
+ 'msg_call' => '拒否メッセージ',
+ 'msg_call_helper' => '通話を拒否する際に送信されるメッセージ',
+ 'groups_ignore' => 'グループを無視',
+ 'groups_ignore_helper' => 'グループからのメッセージを処理しない',
+ 'always_online' => '常にオンライン',
+ 'always_online_helper' => 'ステータスをオンラインに保つ',
+ 'read_messages' => 'メッセージを既読',
+ 'read_messages_helper' => 'メッセージを自動的に既読にする',
+ 'read_status' => 'ステータスを表示',
+ 'read_status_helper' => 'ステータス更新を自動的に表示する',
+ 'sync_full_history' => '完全な履歴を同期',
+ 'sync_full_history_helper' => '接続時にすべてのメッセージ履歴を同期する',
+ 'created_at' => '作成日時',
+ 'updated_at' => '更新日時',
+ ],
+
+ 'actions' => [
+ 'connect' => '接続',
+ 'disconnect' => '切断',
+ 'delete' => '削除',
+ 'refresh' => '更新',
+ 'view_qrcode' => 'QRコードを表示',
+ 'close' => '閉じる',
+ 'back' => 'リストに戻る',
+ ],
+
+ 'messages' => [
+ 'created' => 'インスタンスが正常に作成されました',
+ 'updated' => 'インスタンスが正常に更新されました',
+ 'deleted' => 'インスタンスが正常に削除されました',
+ 'connected' => 'インスタンスが正常に接続されました',
+ 'disconnected' => 'インスタンスが正常に切断されました',
+ 'connection_failed' => 'インスタンスの接続に失敗しました',
+ ],
+];
diff --git a/resources/lang/ja/webhook.php b/resources/lang/ja/webhook.php
new file mode 100644
index 0000000..5bee032
--- /dev/null
+++ b/resources/lang/ja/webhook.php
@@ -0,0 +1,31 @@
+ 'Webhookログ',
+ 'model_label' => 'Webhookログ',
+ 'plural_model_label' => 'Webhookログ',
+
+ 'sections' => [
+ 'webhook_info' => 'Webhook情報',
+ 'payload' => 'ペイロード',
+ 'error' => 'エラー',
+ ],
+
+ 'fields' => [
+ 'instance' => 'インスタンス',
+ 'event' => 'イベント',
+ 'processed' => '処理済み',
+ 'has_error' => 'エラーあり',
+ 'error' => 'エラー',
+ 'processing_time' => '処理時間',
+ 'created_at' => '作成日時',
+ 'updated_at' => '更新日時',
+ ],
+
+ 'status' => [
+ 'yes' => 'はい',
+ 'no' => 'いいえ',
+ ],
+];
diff --git a/resources/lang/ko/action.php b/resources/lang/ko/action.php
new file mode 100644
index 0000000..0d20dcc
--- /dev/null
+++ b/resources/lang/ko/action.php
@@ -0,0 +1,42 @@
+ 'WhatsApp 메시지 보내기',
+ 'modal_heading' => 'WhatsApp 메시지 보내기',
+ 'modal_description' => 'WhatsApp 번호로 메시지를 보냅니다.',
+ 'send' => '메시지 보내기',
+
+ // Form fields
+ 'instance' => '인스턴스',
+ 'instance_helper' => '메시지를 보낼 WhatsApp 인스턴스를 선택하세요.',
+ 'number' => '전화번호',
+ 'number_helper' => '국가 코드가 포함된 전화번호를 입력하세요 (예: 821012345678).',
+ 'type' => '메시지 유형',
+ 'message' => '메시지',
+ 'message_placeholder' => '여기에 메시지를 입력하세요...',
+ 'caption' => '캡션',
+ 'caption_placeholder' => '미디어의 선택적 캡션...',
+ 'media' => '미디어 파일',
+ 'media_helper' => '보낼 파일을 업로드하세요.',
+
+ // Location fields
+ 'latitude' => '위도',
+ 'longitude' => '경도',
+ 'location_name' => '장소 이름',
+ 'location_name_placeholder' => '예: 내 사무실',
+ 'location_address' => '주소',
+ 'location_address_placeholder' => '예: 서울시 강남구 123',
+
+ // Contact fields
+ 'contact_name' => '연락처 이름',
+ 'contact_number' => '연락처 전화번호',
+
+ // Notifications
+ 'success_title' => '메시지 전송 완료!',
+ 'success_body' => 'WhatsApp 메시지가 성공적으로 전송되었습니다.',
+ 'error_title' => '전송 실패',
+ 'missing_required_fields' => '인스턴스 ID와 전화번호가 필요합니다.',
+ 'unsupported_type' => '지원되지 않는 메시지 유형입니다.',
+];
diff --git a/resources/lang/ko/enums.php b/resources/lang/ko/enums.php
new file mode 100644
index 0000000..1a74985
--- /dev/null
+++ b/resources/lang/ko/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => '연결됨',
+ 'connecting' => '연결 중',
+ 'close' => '연결 해제됨',
+ 'refused' => '거부됨',
+ ],
+
+ 'message_type' => [
+ 'text' => '텍스트',
+ 'image' => '이미지',
+ 'audio' => '오디오',
+ 'video' => '비디오',
+ 'document' => '문서',
+ 'location' => '위치',
+ 'contact' => '연락처',
+ 'sticker' => '스티커',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => '수신',
+ 'outgoing' => '발신',
+ ],
+
+ 'message_status' => [
+ 'pending' => '대기 중',
+ 'sent' => '전송됨',
+ 'delivered' => '전달됨',
+ 'read' => '읽음',
+ 'failed' => '실패',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => '애플리케이션 시작',
+ 'qrcode_updated' => 'QR 코드 업데이트',
+ 'connection_update' => '연결 업데이트',
+ 'messages_set' => '메시지 설정',
+ 'messages_upsert' => '메시지 수신',
+ 'messages_update' => '메시지 업데이트',
+ 'messages_delete' => '메시지 삭제',
+ 'send_message' => '메시지 전송',
+ 'presence_update' => '상태 업데이트',
+ 'new_token' => '새 토큰',
+ 'logout_instance' => '인스턴스 로그아웃',
+ 'remove_instance' => '인스턴스 제거',
+ ],
+];
diff --git a/resources/lang/ko/message.php b/resources/lang/ko/message.php
new file mode 100644
index 0000000..1be58f0
--- /dev/null
+++ b/resources/lang/ko/message.php
@@ -0,0 +1,34 @@
+ '메시지',
+ 'model_label' => '메시지',
+ 'plural_model_label' => '메시지',
+
+ 'sections' => [
+ 'message_info' => '메시지 정보',
+ 'content' => '내용',
+ 'timestamps' => '타임스탬프',
+ 'raw_payload' => '원시 데이터',
+ ],
+
+ 'fields' => [
+ 'instance' => '인스턴스',
+ 'direction' => '방향',
+ 'phone' => '전화번호',
+ 'type' => '유형',
+ 'content' => '내용',
+ 'status' => '상태',
+ 'message_id' => '메시지 ID',
+ 'media' => '미디어',
+ 'media_caption' => '미디어 캡션',
+ 'media_url' => '미디어 URL',
+ 'location' => '위치',
+ 'sent_at' => '전송일',
+ 'delivered_at' => '전달일',
+ 'read_at' => '읽은 날짜',
+ 'created_at' => '생성일',
+ ],
+];
diff --git a/resources/lang/ko/qrcode.php b/resources/lang/ko/qrcode.php
new file mode 100644
index 0000000..2f40024
--- /dev/null
+++ b/resources/lang/ko/qrcode.php
@@ -0,0 +1,21 @@
+ ':instance 연결',
+ 'loading' => '로딩 중...',
+ 'connected' => '연결됨',
+ 'waiting_scan' => '스캔 대기 중',
+ 'error' => '연결 오류',
+ 'expires_in' => '만료 시간',
+ 'connected_title' => 'WhatsApp 연결됨!',
+ 'connected_description' => 'WhatsApp 인스턴스가 연결되어 메시지를 보내고 받을 준비가 되었습니다.',
+ 'error_title' => '연결 오류',
+ 'try_again' => '다시 시도',
+ 'scan_instructions' => '휴대폰에서 WhatsApp을 열고 설정 > 연결된 기기 > 기기 연결로 이동하여 이 QR 코드를 스캔하세요.',
+ 'or_use_code' => '또는 휴대폰에 이 코드를 입력하세요:',
+ 'copied' => '복사됨!',
+ 'refresh' => 'QR 코드 새로고침',
+ 'generate' => 'QR 코드 생성',
+];
diff --git a/resources/lang/ko/resource.php b/resources/lang/ko/resource.php
new file mode 100644
index 0000000..2abc8f3
--- /dev/null
+++ b/resources/lang/ko/resource.php
@@ -0,0 +1,60 @@
+ '인스턴스',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => '인스턴스',
+ 'plural_model_label' => '인스턴스',
+
+ 'sections' => [
+ 'instance_info' => '인스턴스 정보',
+ 'settings' => '설정',
+ 'connection' => '연결',
+ ],
+
+ 'fields' => [
+ 'name' => '인스턴스 이름',
+ 'name_helper' => '이 인스턴스를 식별하기 위한 고유한 이름',
+ 'number' => '전화번호',
+ 'number_helper' => '국가 코드가 포함된 WhatsApp 전화번호',
+ 'status' => '상태',
+ 'profile_picture' => '프로필 사진',
+ 'reject_call' => '통화 거부',
+ 'reject_call_helper' => '수신 전화 자동 거부',
+ 'msg_call' => '거부 메시지',
+ 'msg_call_helper' => '통화 거부 시 전송되는 메시지',
+ 'groups_ignore' => '그룹 무시',
+ 'groups_ignore_helper' => '그룹의 메시지를 처리하지 않음',
+ 'always_online' => '항상 온라인',
+ 'always_online_helper' => '상태를 온라인으로 유지',
+ 'read_messages' => '메시지 읽기',
+ 'read_messages_helper' => '메시지를 자동으로 읽음으로 표시',
+ 'read_status' => '상태 읽기',
+ 'read_status_helper' => '상태 업데이트를 자동으로 표시',
+ 'sync_full_history' => '전체 기록 동기화',
+ 'sync_full_history_helper' => '연결 시 모든 메시지 기록 동기화',
+ 'created_at' => '생성일',
+ 'updated_at' => '수정일',
+ ],
+
+ 'actions' => [
+ 'connect' => '연결',
+ 'disconnect' => '연결 해제',
+ 'delete' => '삭제',
+ 'refresh' => '새로고침',
+ 'view_qrcode' => 'QR 코드 보기',
+ 'close' => '닫기',
+ 'back' => '목록으로 돌아가기',
+ ],
+
+ 'messages' => [
+ 'created' => '인스턴스가 성공적으로 생성되었습니다',
+ 'updated' => '인스턴스가 성공적으로 업데이트되었습니다',
+ 'deleted' => '인스턴스가 성공적으로 삭제되었습니다',
+ 'connected' => '인스턴스가 성공적으로 연결되었습니다',
+ 'disconnected' => '인스턴스 연결이 성공적으로 해제되었습니다',
+ 'connection_failed' => '인스턴스 연결에 실패했습니다',
+ ],
+];
diff --git a/resources/lang/ko/webhook.php b/resources/lang/ko/webhook.php
new file mode 100644
index 0000000..93d6767
--- /dev/null
+++ b/resources/lang/ko/webhook.php
@@ -0,0 +1,31 @@
+ 'Webhook 로그',
+ 'model_label' => 'Webhook 로그',
+ 'plural_model_label' => 'Webhook 로그',
+
+ 'sections' => [
+ 'webhook_info' => 'Webhook 정보',
+ 'payload' => '페이로드',
+ 'error' => '오류',
+ ],
+
+ 'fields' => [
+ 'instance' => '인스턴스',
+ 'event' => '이벤트',
+ 'processed' => '처리됨',
+ 'has_error' => '오류 있음',
+ 'error' => '오류',
+ 'processing_time' => '처리 시간',
+ 'created_at' => '생성일',
+ 'updated_at' => '수정일',
+ ],
+
+ 'status' => [
+ 'yes' => '예',
+ 'no' => '아니오',
+ ],
+];
diff --git a/resources/lang/nl/action.php b/resources/lang/nl/action.php
new file mode 100644
index 0000000..ee0d7f2
--- /dev/null
+++ b/resources/lang/nl/action.php
@@ -0,0 +1,42 @@
+ 'WhatsApp Bericht Versturen',
+ 'modal_heading' => 'WhatsApp Bericht Versturen',
+ 'modal_description' => 'Stuur een bericht naar een WhatsApp nummer.',
+ 'send' => 'Bericht Versturen',
+
+ // Form fields
+ 'instance' => 'Instantie',
+ 'instance_helper' => 'Selecteer de WhatsApp instantie om het bericht vanaf te versturen.',
+ 'number' => 'Telefoonnummer',
+ 'number_helper' => 'Voer het telefoonnummer met landcode in (bijv. 31612345678).',
+ 'type' => 'Berichttype',
+ 'message' => 'Bericht',
+ 'message_placeholder' => 'Typ hier uw bericht...',
+ 'caption' => 'Onderschrift',
+ 'caption_placeholder' => 'Optioneel onderschrift voor de media...',
+ 'media' => 'Mediabestand',
+ 'media_helper' => 'Upload het te versturen bestand.',
+
+ // Location fields
+ 'latitude' => 'Breedtegraad',
+ 'longitude' => 'Lengtegraad',
+ 'location_name' => 'Locatienaam',
+ 'location_name_placeholder' => 'bijv. Mijn Kantoor',
+ 'location_address' => 'Adres',
+ 'location_address_placeholder' => 'bijv. Hoofdstraat 123, Stad',
+
+ // Contact fields
+ 'contact_name' => 'Contactnaam',
+ 'contact_number' => 'Contacttelefoon',
+
+ // Notifications
+ 'success_title' => 'Bericht Verzonden!',
+ 'success_body' => 'Uw WhatsApp bericht is succesvol verzonden.',
+ 'error_title' => 'Verzenden Mislukt',
+ 'missing_required_fields' => 'Instantie ID en telefoonnummer zijn verplicht.',
+ 'unsupported_type' => 'Niet-ondersteund berichttype.',
+];
diff --git a/resources/lang/nl/enums.php b/resources/lang/nl/enums.php
new file mode 100644
index 0000000..d084226
--- /dev/null
+++ b/resources/lang/nl/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Verbonden',
+ 'connecting' => 'Verbinden',
+ 'close' => 'Losgekoppeld',
+ 'refused' => 'Geweigerd',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Tekst',
+ 'image' => 'Afbeelding',
+ 'audio' => 'Audio',
+ 'video' => 'Video',
+ 'document' => 'Document',
+ 'location' => 'Locatie',
+ 'contact' => 'Contact',
+ 'sticker' => 'Sticker',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Inkomend',
+ 'outgoing' => 'Uitgaand',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'In Afwachting',
+ 'sent' => 'Verzonden',
+ 'delivered' => 'Afgeleverd',
+ 'read' => 'Gelezen',
+ 'failed' => 'Mislukt',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Applicatie Opstart',
+ 'qrcode_updated' => 'QR-code Bijgewerkt',
+ 'connection_update' => 'Verbinding Update',
+ 'messages_set' => 'Berichten Ingesteld',
+ 'messages_upsert' => 'Bericht Ontvangen',
+ 'messages_update' => 'Bericht Bijgewerkt',
+ 'messages_delete' => 'Bericht Verwijderd',
+ 'send_message' => 'Bericht Verzonden',
+ 'presence_update' => 'Aanwezigheid Update',
+ 'new_token' => 'Nieuwe Token',
+ 'logout_instance' => 'Instantie Uitloggen',
+ 'remove_instance' => 'Instantie Verwijderd',
+ ],
+];
diff --git a/resources/lang/nl/message.php b/resources/lang/nl/message.php
new file mode 100644
index 0000000..41c43cf
--- /dev/null
+++ b/resources/lang/nl/message.php
@@ -0,0 +1,34 @@
+ 'Berichten',
+ 'model_label' => 'Bericht',
+ 'plural_model_label' => 'Berichten',
+
+ 'sections' => [
+ 'message_info' => 'Berichtinformatie',
+ 'content' => 'Inhoud',
+ 'timestamps' => 'Tijdstempels',
+ 'raw_payload' => 'Ruwe Data',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instantie',
+ 'direction' => 'Richting',
+ 'phone' => 'Telefoon',
+ 'type' => 'Type',
+ 'content' => 'Inhoud',
+ 'status' => 'Status',
+ 'message_id' => 'Bericht ID',
+ 'media' => 'Media',
+ 'media_caption' => 'Media Onderschrift',
+ 'media_url' => 'Media URL',
+ 'location' => 'Locatie',
+ 'sent_at' => 'Verzonden op',
+ 'delivered_at' => 'Afgeleverd op',
+ 'read_at' => 'Gelezen op',
+ 'created_at' => 'Aangemaakt op',
+ ],
+];
diff --git a/resources/lang/nl/qrcode.php b/resources/lang/nl/qrcode.php
new file mode 100644
index 0000000..447aea1
--- /dev/null
+++ b/resources/lang/nl/qrcode.php
@@ -0,0 +1,21 @@
+ 'Verbinden :instance',
+ 'loading' => 'Laden...',
+ 'connected' => 'Verbonden',
+ 'waiting_scan' => 'Wachten op scan',
+ 'error' => 'Verbindingsfout',
+ 'expires_in' => 'Verloopt over',
+ 'connected_title' => 'WhatsApp Verbonden!',
+ 'connected_description' => 'Uw WhatsApp instantie is verbonden en klaar om berichten te verzenden en ontvangen.',
+ 'error_title' => 'Verbindingsfout',
+ 'try_again' => 'Opnieuw Proberen',
+ 'scan_instructions' => 'Open WhatsApp op uw telefoon, ga naar Instellingen > Gekoppelde Apparaten > Apparaat Koppelen, en scan deze QR-code.',
+ 'or_use_code' => 'Of voer deze code in op uw telefoon:',
+ 'copied' => 'Gekopieerd!',
+ 'refresh' => 'QR-code Vernieuwen',
+ 'generate' => 'QR-code Genereren',
+];
diff --git a/resources/lang/nl/resource.php b/resources/lang/nl/resource.php
new file mode 100644
index 0000000..bb21156
--- /dev/null
+++ b/resources/lang/nl/resource.php
@@ -0,0 +1,60 @@
+ 'Instanties',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Instantie',
+ 'plural_model_label' => 'Instanties',
+
+ 'sections' => [
+ 'instance_info' => 'Instantie Informatie',
+ 'settings' => 'Instellingen',
+ 'connection' => 'Verbinding',
+ ],
+
+ 'fields' => [
+ 'name' => 'Instantie Naam',
+ 'name_helper' => 'Een unieke naam om deze instantie te identificeren',
+ 'number' => 'Telefoonnummer',
+ 'number_helper' => 'Het WhatsApp telefoonnummer met landcode',
+ 'status' => 'Status',
+ 'profile_picture' => 'Profielfoto',
+ 'reject_call' => 'Oproepen Weigeren',
+ 'reject_call_helper' => 'Automatisch inkomende oproepen weigeren',
+ 'msg_call' => 'Weigeringsbericht',
+ 'msg_call_helper' => 'Bericht dat wordt verzonden bij het weigeren van een oproep',
+ 'groups_ignore' => 'Groepen Negeren',
+ 'groups_ignore_helper' => 'Berichten van groepen niet verwerken',
+ 'always_online' => 'Altijd Online',
+ 'always_online_helper' => 'Status als online houden',
+ 'read_messages' => 'Berichten Lezen',
+ 'read_messages_helper' => 'Berichten automatisch als gelezen markeren',
+ 'read_status' => 'Status Lezen',
+ 'read_status_helper' => 'Statusupdates automatisch bekijken',
+ 'sync_full_history' => 'Volledige Geschiedenis Synchroniseren',
+ 'sync_full_history_helper' => 'Alle berichtengeschiedenis synchroniseren bij verbinding',
+ 'created_at' => 'Aangemaakt op',
+ 'updated_at' => 'Bijgewerkt op',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Verbinden',
+ 'disconnect' => 'Verbinding Verbreken',
+ 'delete' => 'Verwijderen',
+ 'refresh' => 'Vernieuwen',
+ 'view_qrcode' => 'QR-code Bekijken',
+ 'close' => 'Sluiten',
+ 'back' => 'Terug naar Lijst',
+ ],
+
+ 'messages' => [
+ 'created' => 'Instantie succesvol aangemaakt',
+ 'updated' => 'Instantie succesvol bijgewerkt',
+ 'deleted' => 'Instantie succesvol verwijderd',
+ 'connected' => 'Instantie succesvol verbonden',
+ 'disconnected' => 'Instantie succesvol losgekoppeld',
+ 'connection_failed' => 'Verbinding met instantie mislukt',
+ ],
+];
diff --git a/resources/lang/nl/webhook.php b/resources/lang/nl/webhook.php
new file mode 100644
index 0000000..aa6e731
--- /dev/null
+++ b/resources/lang/nl/webhook.php
@@ -0,0 +1,31 @@
+ 'Webhook Logs',
+ 'model_label' => 'Webhook Log',
+ 'plural_model_label' => 'Webhook Logs',
+
+ 'sections' => [
+ 'webhook_info' => 'Webhook Informatie',
+ 'payload' => 'Payload',
+ 'error' => 'Fout',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instantie',
+ 'event' => 'Gebeurtenis',
+ 'processed' => 'Verwerkt',
+ 'has_error' => 'Heeft Fout',
+ 'error' => 'Fout',
+ 'processing_time' => 'Verwerkingstijd',
+ 'created_at' => 'Aangemaakt op',
+ 'updated_at' => 'Bijgewerkt op',
+ ],
+
+ 'status' => [
+ 'yes' => 'Ja',
+ 'no' => 'Nee',
+ ],
+];
diff --git a/resources/lang/pl/action.php b/resources/lang/pl/action.php
new file mode 100644
index 0000000..bca6b05
--- /dev/null
+++ b/resources/lang/pl/action.php
@@ -0,0 +1,42 @@
+ 'Wyślij Wiadomość WhatsApp',
+ 'modal_heading' => 'Wyślij Wiadomość WhatsApp',
+ 'modal_description' => 'Wyślij wiadomość na numer WhatsApp.',
+ 'send' => 'Wyślij Wiadomość',
+
+ // Form fields
+ 'instance' => 'Instancja',
+ 'instance_helper' => 'Wybierz instancję WhatsApp do wysłania wiadomości.',
+ 'number' => 'Numer Telefonu',
+ 'number_helper' => 'Wprowadź numer telefonu z kodem kraju (np. 48123456789).',
+ 'type' => 'Typ Wiadomości',
+ 'message' => 'Wiadomość',
+ 'message_placeholder' => 'Wpisz tutaj swoją wiadomość...',
+ 'caption' => 'Podpis',
+ 'caption_placeholder' => 'Opcjonalny podpis dla mediów...',
+ 'media' => 'Plik Multimedialny',
+ 'media_helper' => 'Prześlij plik do wysłania.',
+
+ // Location fields
+ 'latitude' => 'Szerokość Geograficzna',
+ 'longitude' => 'Długość Geograficzna',
+ 'location_name' => 'Nazwa Lokalizacji',
+ 'location_name_placeholder' => 'np. Moje Biuro',
+ 'location_address' => 'Adres',
+ 'location_address_placeholder' => 'np. ul. Główna 123, Miasto',
+
+ // Contact fields
+ 'contact_name' => 'Nazwa Kontaktu',
+ 'contact_number' => 'Telefon Kontaktu',
+
+ // Notifications
+ 'success_title' => 'Wiadomość Wysłana!',
+ 'success_body' => 'Twoja wiadomość WhatsApp została wysłana pomyślnie.',
+ 'error_title' => 'Wysyłanie Nie Powiodło Się',
+ 'missing_required_fields' => 'ID instancji i numer telefonu są wymagane.',
+ 'unsupported_type' => 'Nieobsługiwany typ wiadomości.',
+];
diff --git a/resources/lang/pl/enums.php b/resources/lang/pl/enums.php
new file mode 100644
index 0000000..460c0c3
--- /dev/null
+++ b/resources/lang/pl/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Połączony',
+ 'connecting' => 'Łączenie',
+ 'close' => 'Rozłączony',
+ 'refused' => 'Odrzucony',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Tekst',
+ 'image' => 'Obraz',
+ 'audio' => 'Audio',
+ 'video' => 'Wideo',
+ 'document' => 'Dokument',
+ 'location' => 'Lokalizacja',
+ 'contact' => 'Kontakt',
+ 'sticker' => 'Naklejka',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Przychodzące',
+ 'outgoing' => 'Wychodzące',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'Oczekujące',
+ 'sent' => 'Wysłane',
+ 'delivered' => 'Dostarczone',
+ 'read' => 'Przeczytane',
+ 'failed' => 'Nieudane',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Uruchomienie Aplikacji',
+ 'qrcode_updated' => 'Kod QR Zaktualizowany',
+ 'connection_update' => 'Aktualizacja Połączenia',
+ 'messages_set' => 'Wiadomości Ustawione',
+ 'messages_upsert' => 'Wiadomość Odebrana',
+ 'messages_update' => 'Wiadomość Zaktualizowana',
+ 'messages_delete' => 'Wiadomość Usunięta',
+ 'send_message' => 'Wiadomość Wysłana',
+ 'presence_update' => 'Aktualizacja Obecności',
+ 'new_token' => 'Nowy Token',
+ 'logout_instance' => 'Wylogowanie Instancji',
+ 'remove_instance' => 'Instancja Usunięta',
+ ],
+];
diff --git a/resources/lang/pl/message.php b/resources/lang/pl/message.php
new file mode 100644
index 0000000..6b09d3e
--- /dev/null
+++ b/resources/lang/pl/message.php
@@ -0,0 +1,34 @@
+ 'Wiadomości',
+ 'model_label' => 'Wiadomość',
+ 'plural_model_label' => 'Wiadomości',
+
+ 'sections' => [
+ 'message_info' => 'Informacje o Wiadomości',
+ 'content' => 'Treść',
+ 'timestamps' => 'Znaczniki Czasu',
+ 'raw_payload' => 'Surowe Dane',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instancja',
+ 'direction' => 'Kierunek',
+ 'phone' => 'Telefon',
+ 'type' => 'Typ',
+ 'content' => 'Treść',
+ 'status' => 'Status',
+ 'message_id' => 'ID Wiadomości',
+ 'media' => 'Media',
+ 'media_caption' => 'Podpis Mediów',
+ 'media_url' => 'URL Mediów',
+ 'location' => 'Lokalizacja',
+ 'sent_at' => 'Wysłano',
+ 'delivered_at' => 'Dostarczono',
+ 'read_at' => 'Przeczytano',
+ 'created_at' => 'Utworzono',
+ ],
+];
diff --git a/resources/lang/pl/qrcode.php b/resources/lang/pl/qrcode.php
new file mode 100644
index 0000000..a63b540
--- /dev/null
+++ b/resources/lang/pl/qrcode.php
@@ -0,0 +1,21 @@
+ 'Połącz :instance',
+ 'loading' => 'Ładowanie...',
+ 'connected' => 'Połączony',
+ 'waiting_scan' => 'Oczekiwanie na skan',
+ 'error' => 'Błąd połączenia',
+ 'expires_in' => 'Wygasa za',
+ 'connected_title' => 'WhatsApp Połączony!',
+ 'connected_description' => 'Twoja instancja WhatsApp jest połączona i gotowa do wysyłania i odbierania wiadomości.',
+ 'error_title' => 'Błąd Połączenia',
+ 'try_again' => 'Spróbuj Ponownie',
+ 'scan_instructions' => 'Otwórz WhatsApp na telefonie, przejdź do Ustawienia > Połączone Urządzenia > Połącz Urządzenie i zeskanuj ten kod QR.',
+ 'or_use_code' => 'Lub wprowadź ten kod na telefonie:',
+ 'copied' => 'Skopiowano!',
+ 'refresh' => 'Odśwież Kod QR',
+ 'generate' => 'Generuj Kod QR',
+];
diff --git a/resources/lang/pl/resource.php b/resources/lang/pl/resource.php
new file mode 100644
index 0000000..f72a1f6
--- /dev/null
+++ b/resources/lang/pl/resource.php
@@ -0,0 +1,60 @@
+ 'Instancje',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Instancja',
+ 'plural_model_label' => 'Instancje',
+
+ 'sections' => [
+ 'instance_info' => 'Informacje o Instancji',
+ 'settings' => 'Ustawienia',
+ 'connection' => 'Połączenie',
+ ],
+
+ 'fields' => [
+ 'name' => 'Nazwa Instancji',
+ 'name_helper' => 'Unikalna nazwa identyfikująca tę instancję',
+ 'number' => 'Numer Telefonu',
+ 'number_helper' => 'Numer telefonu WhatsApp z kodem kraju',
+ 'status' => 'Status',
+ 'profile_picture' => 'Zdjęcie Profilowe',
+ 'reject_call' => 'Odrzucaj Połączenia',
+ 'reject_call_helper' => 'Automatycznie odrzucaj połączenia przychodzące',
+ 'msg_call' => 'Wiadomość Odrzucenia',
+ 'msg_call_helper' => 'Wiadomość wysyłana przy odrzucaniu połączenia',
+ 'groups_ignore' => 'Ignoruj Grupy',
+ 'groups_ignore_helper' => 'Nie przetwarzaj wiadomości z grup',
+ 'always_online' => 'Zawsze Online',
+ 'always_online_helper' => 'Utrzymuj status jako online',
+ 'read_messages' => 'Czytaj Wiadomości',
+ 'read_messages_helper' => 'Automatycznie oznaczaj wiadomości jako przeczytane',
+ 'read_status' => 'Czytaj Status',
+ 'read_status_helper' => 'Automatycznie wyświetlaj aktualizacje statusu',
+ 'sync_full_history' => 'Synchronizuj Pełną Historię',
+ 'sync_full_history_helper' => 'Synchronizuj całą historię wiadomości przy połączeniu',
+ 'created_at' => 'Utworzono',
+ 'updated_at' => 'Zaktualizowano',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Połącz',
+ 'disconnect' => 'Rozłącz',
+ 'delete' => 'Usuń',
+ 'refresh' => 'Odśwież',
+ 'view_qrcode' => 'Zobacz Kod QR',
+ 'close' => 'Zamknij',
+ 'back' => 'Wróć do Listy',
+ ],
+
+ 'messages' => [
+ 'created' => 'Instancja utworzona pomyślnie',
+ 'updated' => 'Instancja zaktualizowana pomyślnie',
+ 'deleted' => 'Instancja usunięta pomyślnie',
+ 'connected' => 'Instancja połączona pomyślnie',
+ 'disconnected' => 'Instancja rozłączona pomyślnie',
+ 'connection_failed' => 'Nie udało się połączyć z instancją',
+ ],
+];
diff --git a/resources/lang/pl/webhook.php b/resources/lang/pl/webhook.php
new file mode 100644
index 0000000..a3e0e7c
--- /dev/null
+++ b/resources/lang/pl/webhook.php
@@ -0,0 +1,31 @@
+ 'Logi Webhook',
+ 'model_label' => 'Log Webhook',
+ 'plural_model_label' => 'Logi Webhook',
+
+ 'sections' => [
+ 'webhook_info' => 'Informacje o Webhook',
+ 'payload' => 'Ładunek',
+ 'error' => 'Błąd',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Instancja',
+ 'event' => 'Zdarzenie',
+ 'processed' => 'Przetworzono',
+ 'has_error' => 'Ma Błąd',
+ 'error' => 'Błąd',
+ 'processing_time' => 'Czas Przetwarzania',
+ 'created_at' => 'Utworzono',
+ 'updated_at' => 'Zaktualizowano',
+ ],
+
+ 'status' => [
+ 'yes' => 'Tak',
+ 'no' => 'Nie',
+ ],
+];
diff --git a/resources/lang/ru/action.php b/resources/lang/ru/action.php
new file mode 100644
index 0000000..18c58b4
--- /dev/null
+++ b/resources/lang/ru/action.php
@@ -0,0 +1,42 @@
+ 'Отправить Сообщение WhatsApp',
+ 'modal_heading' => 'Отправить Сообщение WhatsApp',
+ 'modal_description' => 'Отправить сообщение на номер WhatsApp.',
+ 'send' => 'Отправить Сообщение',
+
+ // Form fields
+ 'instance' => 'Экземпляр',
+ 'instance_helper' => 'Выберите экземпляр WhatsApp для отправки сообщения.',
+ 'number' => 'Номер Телефона',
+ 'number_helper' => 'Введите номер телефона с кодом страны (например, 79123456789).',
+ 'type' => 'Тип Сообщения',
+ 'message' => 'Сообщение',
+ 'message_placeholder' => 'Введите сообщение здесь...',
+ 'caption' => 'Подпись',
+ 'caption_placeholder' => 'Необязательная подпись для медиа...',
+ 'media' => 'Медиафайл',
+ 'media_helper' => 'Загрузите файл для отправки.',
+
+ // Location fields
+ 'latitude' => 'Широта',
+ 'longitude' => 'Долгота',
+ 'location_name' => 'Название Места',
+ 'location_name_placeholder' => 'например, Мой Офис',
+ 'location_address' => 'Адрес',
+ 'location_address_placeholder' => 'например, ул. Главная 123, Город',
+
+ // Contact fields
+ 'contact_name' => 'Имя Контакта',
+ 'contact_number' => 'Телефон Контакта',
+
+ // Notifications
+ 'success_title' => 'Сообщение Отправлено!',
+ 'success_body' => 'Ваше сообщение WhatsApp успешно отправлено.',
+ 'error_title' => 'Ошибка Отправки',
+ 'missing_required_fields' => 'ID экземпляра и номер телефона обязательны.',
+ 'unsupported_type' => 'Неподдерживаемый тип сообщения.',
+];
diff --git a/resources/lang/ru/enums.php b/resources/lang/ru/enums.php
new file mode 100644
index 0000000..c03618a
--- /dev/null
+++ b/resources/lang/ru/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Подключен',
+ 'connecting' => 'Подключение',
+ 'close' => 'Отключен',
+ 'refused' => 'Отклонен',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Текст',
+ 'image' => 'Изображение',
+ 'audio' => 'Аудио',
+ 'video' => 'Видео',
+ 'document' => 'Документ',
+ 'location' => 'Местоположение',
+ 'contact' => 'Контакт',
+ 'sticker' => 'Стикер',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Входящее',
+ 'outgoing' => 'Исходящее',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'Ожидание',
+ 'sent' => 'Отправлено',
+ 'delivered' => 'Доставлено',
+ 'read' => 'Прочитано',
+ 'failed' => 'Ошибка',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Запуск Приложения',
+ 'qrcode_updated' => 'QR-код Обновлен',
+ 'connection_update' => 'Обновление Подключения',
+ 'messages_set' => 'Сообщения Установлены',
+ 'messages_upsert' => 'Сообщение Получено',
+ 'messages_update' => 'Сообщение Обновлено',
+ 'messages_delete' => 'Сообщение Удалено',
+ 'send_message' => 'Сообщение Отправлено',
+ 'presence_update' => 'Обновление Присутствия',
+ 'new_token' => 'Новый Токен',
+ 'logout_instance' => 'Выход из Экземпляра',
+ 'remove_instance' => 'Экземпляр Удален',
+ ],
+];
diff --git a/resources/lang/ru/message.php b/resources/lang/ru/message.php
new file mode 100644
index 0000000..deab227
--- /dev/null
+++ b/resources/lang/ru/message.php
@@ -0,0 +1,34 @@
+ 'Сообщения',
+ 'model_label' => 'Сообщение',
+ 'plural_model_label' => 'Сообщения',
+
+ 'sections' => [
+ 'message_info' => 'Информация о Сообщении',
+ 'content' => 'Содержимое',
+ 'timestamps' => 'Временные Метки',
+ 'raw_payload' => 'Сырые Данные',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Экземпляр',
+ 'direction' => 'Направление',
+ 'phone' => 'Телефон',
+ 'type' => 'Тип',
+ 'content' => 'Содержимое',
+ 'status' => 'Статус',
+ 'message_id' => 'ID Сообщения',
+ 'media' => 'Медиа',
+ 'media_caption' => 'Подпись Медиа',
+ 'media_url' => 'URL Медиа',
+ 'location' => 'Местоположение',
+ 'sent_at' => 'Отправлено',
+ 'delivered_at' => 'Доставлено',
+ 'read_at' => 'Прочитано',
+ 'created_at' => 'Создано',
+ ],
+];
diff --git a/resources/lang/ru/qrcode.php b/resources/lang/ru/qrcode.php
new file mode 100644
index 0000000..7e0f056
--- /dev/null
+++ b/resources/lang/ru/qrcode.php
@@ -0,0 +1,21 @@
+ 'Подключить :instance',
+ 'loading' => 'Загрузка...',
+ 'connected' => 'Подключен',
+ 'waiting_scan' => 'Ожидание сканирования',
+ 'error' => 'Ошибка подключения',
+ 'expires_in' => 'Истекает через',
+ 'connected_title' => 'WhatsApp Подключен!',
+ 'connected_description' => 'Ваш экземпляр WhatsApp подключен и готов к отправке и получению сообщений.',
+ 'error_title' => 'Ошибка Подключения',
+ 'try_again' => 'Попробовать Снова',
+ 'scan_instructions' => 'Откройте WhatsApp на телефоне, перейдите в Настройки > Связанные устройства > Привязать устройство и отсканируйте этот QR-код.',
+ 'or_use_code' => 'Или введите этот код на телефоне:',
+ 'copied' => 'Скопировано!',
+ 'refresh' => 'Обновить QR-код',
+ 'generate' => 'Сгенерировать QR-код',
+];
diff --git a/resources/lang/ru/resource.php b/resources/lang/ru/resource.php
new file mode 100644
index 0000000..d87d43c
--- /dev/null
+++ b/resources/lang/ru/resource.php
@@ -0,0 +1,60 @@
+ 'Экземпляры',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Экземпляр',
+ 'plural_model_label' => 'Экземпляры',
+
+ 'sections' => [
+ 'instance_info' => 'Информация об Экземпляре',
+ 'settings' => 'Настройки',
+ 'connection' => 'Подключение',
+ ],
+
+ 'fields' => [
+ 'name' => 'Имя Экземпляра',
+ 'name_helper' => 'Уникальное имя для идентификации этого экземпляра',
+ 'number' => 'Номер Телефона',
+ 'number_helper' => 'Номер телефона WhatsApp с кодом страны',
+ 'status' => 'Статус',
+ 'profile_picture' => 'Фото Профиля',
+ 'reject_call' => 'Отклонять Звонки',
+ 'reject_call_helper' => 'Автоматически отклонять входящие звонки',
+ 'msg_call' => 'Сообщение Отклонения',
+ 'msg_call_helper' => 'Сообщение, отправляемое при отклонении звонка',
+ 'groups_ignore' => 'Игнорировать Группы',
+ 'groups_ignore_helper' => 'Не обрабатывать сообщения из групп',
+ 'always_online' => 'Всегда Онлайн',
+ 'always_online_helper' => 'Держать статус онлайн',
+ 'read_messages' => 'Читать Сообщения',
+ 'read_messages_helper' => 'Автоматически отмечать сообщения как прочитанные',
+ 'read_status' => 'Читать Статус',
+ 'read_status_helper' => 'Автоматически просматривать обновления статуса',
+ 'sync_full_history' => 'Синхронизировать Полную Историю',
+ 'sync_full_history_helper' => 'Синхронизировать всю историю сообщений при подключении',
+ 'created_at' => 'Создано',
+ 'updated_at' => 'Обновлено',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Подключить',
+ 'disconnect' => 'Отключить',
+ 'delete' => 'Удалить',
+ 'refresh' => 'Обновить',
+ 'view_qrcode' => 'Показать QR-код',
+ 'close' => 'Закрыть',
+ 'back' => 'Вернуться к Списку',
+ ],
+
+ 'messages' => [
+ 'created' => 'Экземпляр успешно создан',
+ 'updated' => 'Экземпляр успешно обновлен',
+ 'deleted' => 'Экземпляр успешно удален',
+ 'connected' => 'Экземпляр успешно подключен',
+ 'disconnected' => 'Экземпляр успешно отключен',
+ 'connection_failed' => 'Не удалось подключить экземпляр',
+ ],
+];
diff --git a/resources/lang/ru/webhook.php b/resources/lang/ru/webhook.php
new file mode 100644
index 0000000..073fd27
--- /dev/null
+++ b/resources/lang/ru/webhook.php
@@ -0,0 +1,31 @@
+ 'Логи Вебхуков',
+ 'model_label' => 'Лог Вебхука',
+ 'plural_model_label' => 'Логи Вебхуков',
+
+ 'sections' => [
+ 'webhook_info' => 'Информация о Вебхуке',
+ 'payload' => 'Данные',
+ 'error' => 'Ошибка',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Экземпляр',
+ 'event' => 'Событие',
+ 'processed' => 'Обработано',
+ 'has_error' => 'Есть Ошибка',
+ 'error' => 'Ошибка',
+ 'processing_time' => 'Время Обработки',
+ 'created_at' => 'Создано',
+ 'updated_at' => 'Обновлено',
+ ],
+
+ 'status' => [
+ 'yes' => 'Да',
+ 'no' => 'Нет',
+ ],
+];
diff --git a/resources/lang/tr/action.php b/resources/lang/tr/action.php
new file mode 100644
index 0000000..a548bdd
--- /dev/null
+++ b/resources/lang/tr/action.php
@@ -0,0 +1,42 @@
+ 'WhatsApp Mesajı Gönder',
+ 'modal_heading' => 'WhatsApp Mesajı Gönder',
+ 'modal_description' => 'Bir WhatsApp numarasına mesaj gönderin.',
+ 'send' => 'Mesaj Gönder',
+
+ // Form fields
+ 'instance' => 'Örnek',
+ 'instance_helper' => 'Mesaj göndermek için WhatsApp örneğini seçin.',
+ 'number' => 'Telefon Numarası',
+ 'number_helper' => 'Ülke kodu ile telefon numarasını girin (örn: 905551234567).',
+ 'type' => 'Mesaj Türü',
+ 'message' => 'Mesaj',
+ 'message_placeholder' => 'Mesajınızı buraya yazın...',
+ 'caption' => 'Başlık',
+ 'caption_placeholder' => 'Medya için isteğe bağlı başlık...',
+ 'media' => 'Medya Dosyası',
+ 'media_helper' => 'Gönderilecek dosyayı yükleyin.',
+
+ // Location fields
+ 'latitude' => 'Enlem',
+ 'longitude' => 'Boylam',
+ 'location_name' => 'Konum Adı',
+ 'location_name_placeholder' => 'örn: Ofisim',
+ 'location_address' => 'Adres',
+ 'location_address_placeholder' => 'örn: Ana Cadde 123, Şehir',
+
+ // Contact fields
+ 'contact_name' => 'Kişi Adı',
+ 'contact_number' => 'Kişi Telefonu',
+
+ // Notifications
+ 'success_title' => 'Mesaj Gönderildi!',
+ 'success_body' => 'WhatsApp mesajınız başarıyla gönderildi.',
+ 'error_title' => 'Gönderme Başarısız',
+ 'missing_required_fields' => 'Örnek ID ve telefon numarası gereklidir.',
+ 'unsupported_type' => 'Desteklenmeyen mesaj türü.',
+];
diff --git a/resources/lang/tr/enums.php b/resources/lang/tr/enums.php
new file mode 100644
index 0000000..bc39dcc
--- /dev/null
+++ b/resources/lang/tr/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Bağlı',
+ 'connecting' => 'Bağlanıyor',
+ 'close' => 'Bağlantı Kesildi',
+ 'refused' => 'Reddedildi',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Metin',
+ 'image' => 'Resim',
+ 'audio' => 'Ses',
+ 'video' => 'Video',
+ 'document' => 'Belge',
+ 'location' => 'Konum',
+ 'contact' => 'Kişi',
+ 'sticker' => 'Çıkartma',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Gelen',
+ 'outgoing' => 'Giden',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'Beklemede',
+ 'sent' => 'Gönderildi',
+ 'delivered' => 'Teslim Edildi',
+ 'read' => 'Okundu',
+ 'failed' => 'Başarısız',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Uygulama Başlatma',
+ 'qrcode_updated' => 'QR Kodu Güncellendi',
+ 'connection_update' => 'Bağlantı Güncellemesi',
+ 'messages_set' => 'Mesajlar Ayarlandı',
+ 'messages_upsert' => 'Mesaj Alındı',
+ 'messages_update' => 'Mesaj Güncellendi',
+ 'messages_delete' => 'Mesaj Silindi',
+ 'send_message' => 'Mesaj Gönderildi',
+ 'presence_update' => 'Durum Güncellemesi',
+ 'new_token' => 'Yeni Token',
+ 'logout_instance' => 'Örnek Çıkışı',
+ 'remove_instance' => 'Örnek Kaldırıldı',
+ ],
+];
diff --git a/resources/lang/tr/message.php b/resources/lang/tr/message.php
new file mode 100644
index 0000000..a4f7495
--- /dev/null
+++ b/resources/lang/tr/message.php
@@ -0,0 +1,34 @@
+ 'Mesajlar',
+ 'model_label' => 'Mesaj',
+ 'plural_model_label' => 'Mesajlar',
+
+ 'sections' => [
+ 'message_info' => 'Mesaj Bilgisi',
+ 'content' => 'İçerik',
+ 'timestamps' => 'Zaman Damgaları',
+ 'raw_payload' => 'Ham Veri',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Örnek',
+ 'direction' => 'Yön',
+ 'phone' => 'Telefon',
+ 'type' => 'Tür',
+ 'content' => 'İçerik',
+ 'status' => 'Durum',
+ 'message_id' => 'Mesaj ID',
+ 'media' => 'Medya',
+ 'media_caption' => 'Medya Başlığı',
+ 'media_url' => 'Medya URL',
+ 'location' => 'Konum',
+ 'sent_at' => 'Gönderilme',
+ 'delivered_at' => 'Teslim',
+ 'read_at' => 'Okunma',
+ 'created_at' => 'Oluşturulma',
+ ],
+];
diff --git a/resources/lang/tr/qrcode.php b/resources/lang/tr/qrcode.php
new file mode 100644
index 0000000..7c032f8
--- /dev/null
+++ b/resources/lang/tr/qrcode.php
@@ -0,0 +1,21 @@
+ ':instance Bağlan',
+ 'loading' => 'Yükleniyor...',
+ 'connected' => 'Bağlı',
+ 'waiting_scan' => 'Tarama bekleniyor',
+ 'error' => 'Bağlantı hatası',
+ 'expires_in' => 'Süresi doluyor',
+ 'connected_title' => 'WhatsApp Bağlandı!',
+ 'connected_description' => 'WhatsApp örneğiniz bağlı ve mesaj gönderip almaya hazır.',
+ 'error_title' => 'Bağlantı Hatası',
+ 'try_again' => 'Tekrar Dene',
+ 'scan_instructions' => 'Telefonunuzda WhatsApp\'ı açın, Ayarlar > Bağlı Cihazlar > Cihaz Bağla\'ya gidin ve bu QR kodunu tarayın.',
+ 'or_use_code' => 'Veya bu kodu telefonunuza girin:',
+ 'copied' => 'Kopyalandı!',
+ 'refresh' => 'QR Kodunu Yenile',
+ 'generate' => 'QR Kodu Oluştur',
+];
diff --git a/resources/lang/tr/resource.php b/resources/lang/tr/resource.php
new file mode 100644
index 0000000..319ff4c
--- /dev/null
+++ b/resources/lang/tr/resource.php
@@ -0,0 +1,60 @@
+ 'Örnekler',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Örnek',
+ 'plural_model_label' => 'Örnekler',
+
+ 'sections' => [
+ 'instance_info' => 'Örnek Bilgisi',
+ 'settings' => 'Ayarlar',
+ 'connection' => 'Bağlantı',
+ ],
+
+ 'fields' => [
+ 'name' => 'Örnek Adı',
+ 'name_helper' => 'Bu örneği tanımlamak için benzersiz bir ad',
+ 'number' => 'Telefon Numarası',
+ 'number_helper' => 'Ülke kodu ile WhatsApp telefon numarası',
+ 'status' => 'Durum',
+ 'profile_picture' => 'Profil Resmi',
+ 'reject_call' => 'Aramaları Reddet',
+ 'reject_call_helper' => 'Gelen aramaları otomatik olarak reddet',
+ 'msg_call' => 'Reddetme Mesajı',
+ 'msg_call_helper' => 'Arama reddedildiğinde gönderilen mesaj',
+ 'groups_ignore' => 'Grupları Yoksay',
+ 'groups_ignore_helper' => 'Gruplardan gelen mesajları işleme',
+ 'always_online' => 'Her Zaman Çevrimiçi',
+ 'always_online_helper' => 'Durumu çevrimiçi olarak tut',
+ 'read_messages' => 'Mesajları Oku',
+ 'read_messages_helper' => 'Mesajları otomatik olarak okundu işaretle',
+ 'read_status' => 'Durumu Oku',
+ 'read_status_helper' => 'Durum güncellemelerini otomatik olarak görüntüle',
+ 'sync_full_history' => 'Tam Geçmişi Senkronize Et',
+ 'sync_full_history_helper' => 'Bağlantıda tüm mesaj geçmişini senkronize et',
+ 'created_at' => 'Oluşturulma',
+ 'updated_at' => 'Güncellenme',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Bağlan',
+ 'disconnect' => 'Bağlantıyı Kes',
+ 'delete' => 'Sil',
+ 'refresh' => 'Yenile',
+ 'view_qrcode' => 'QR Kodunu Görüntüle',
+ 'close' => 'Kapat',
+ 'back' => 'Listeye Dön',
+ ],
+
+ 'messages' => [
+ 'created' => 'Örnek başarıyla oluşturuldu',
+ 'updated' => 'Örnek başarıyla güncellendi',
+ 'deleted' => 'Örnek başarıyla silindi',
+ 'connected' => 'Örnek başarıyla bağlandı',
+ 'disconnected' => 'Örnek başarıyla bağlantısı kesildi',
+ 'connection_failed' => 'Örnek bağlantısı başarısız',
+ ],
+];
diff --git a/resources/lang/tr/webhook.php b/resources/lang/tr/webhook.php
new file mode 100644
index 0000000..762dfcc
--- /dev/null
+++ b/resources/lang/tr/webhook.php
@@ -0,0 +1,31 @@
+ 'Webhook Kayıtları',
+ 'model_label' => 'Webhook Kaydı',
+ 'plural_model_label' => 'Webhook Kayıtları',
+
+ 'sections' => [
+ 'webhook_info' => 'Webhook Bilgisi',
+ 'payload' => 'Yük',
+ 'error' => 'Hata',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Örnek',
+ 'event' => 'Olay',
+ 'processed' => 'İşlendi',
+ 'has_error' => 'Hata Var',
+ 'error' => 'Hata',
+ 'processing_time' => 'İşleme Süresi',
+ 'created_at' => 'Oluşturulma',
+ 'updated_at' => 'Güncellenme',
+ ],
+
+ 'status' => [
+ 'yes' => 'Evet',
+ 'no' => 'Hayır',
+ ],
+];
diff --git a/resources/lang/uk/action.php b/resources/lang/uk/action.php
new file mode 100644
index 0000000..0531b3d
--- /dev/null
+++ b/resources/lang/uk/action.php
@@ -0,0 +1,42 @@
+ 'Надіслати Повідомлення WhatsApp',
+ 'modal_heading' => 'Надіслати Повідомлення WhatsApp',
+ 'modal_description' => 'Надіслати повідомлення на номер WhatsApp.',
+ 'send' => 'Надіслати Повідомлення',
+
+ // Form fields
+ 'instance' => 'Екземпляр',
+ 'instance_helper' => 'Виберіть екземпляр WhatsApp для надсилання повідомлення.',
+ 'number' => 'Номер Телефону',
+ 'number_helper' => 'Введіть номер телефону з кодом країни (наприклад, 380501234567).',
+ 'type' => 'Тип Повідомлення',
+ 'message' => 'Повідомлення',
+ 'message_placeholder' => 'Введіть повідомлення тут...',
+ 'caption' => 'Підпис',
+ 'caption_placeholder' => 'Необов\'язковий підпис для медіа...',
+ 'media' => 'Медіафайл',
+ 'media_helper' => 'Завантажте файл для надсилання.',
+
+ // Location fields
+ 'latitude' => 'Широта',
+ 'longitude' => 'Довгота',
+ 'location_name' => 'Назва Місця',
+ 'location_name_placeholder' => 'наприклад, Мій Офіс',
+ 'location_address' => 'Адреса',
+ 'location_address_placeholder' => 'наприклад, вул. Головна 123, Місто',
+
+ // Contact fields
+ 'contact_name' => 'Ім\'я Контакту',
+ 'contact_number' => 'Телефон Контакту',
+
+ // Notifications
+ 'success_title' => 'Повідомлення Надіслано!',
+ 'success_body' => 'Ваше повідомлення WhatsApp успішно надіслано.',
+ 'error_title' => 'Помилка Надсилання',
+ 'missing_required_fields' => 'ID екземпляра та номер телефону обов\'язкові.',
+ 'unsupported_type' => 'Непідтримуваний тип повідомлення.',
+];
diff --git a/resources/lang/uk/enums.php b/resources/lang/uk/enums.php
new file mode 100644
index 0000000..190dbd7
--- /dev/null
+++ b/resources/lang/uk/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => 'Підключено',
+ 'connecting' => 'Підключення',
+ 'close' => 'Відключено',
+ 'refused' => 'Відхилено',
+ ],
+
+ 'message_type' => [
+ 'text' => 'Текст',
+ 'image' => 'Зображення',
+ 'audio' => 'Аудіо',
+ 'video' => 'Відео',
+ 'document' => 'Документ',
+ 'location' => 'Місцезнаходження',
+ 'contact' => 'Контакт',
+ 'sticker' => 'Стікер',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => 'Вхідне',
+ 'outgoing' => 'Вихідне',
+ ],
+
+ 'message_status' => [
+ 'pending' => 'Очікування',
+ 'sent' => 'Надіслано',
+ 'delivered' => 'Доставлено',
+ 'read' => 'Прочитано',
+ 'failed' => 'Помилка',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => 'Запуск Додатку',
+ 'qrcode_updated' => 'QR-код Оновлено',
+ 'connection_update' => 'Оновлення Підключення',
+ 'messages_set' => 'Повідомлення Встановлено',
+ 'messages_upsert' => 'Повідомлення Отримано',
+ 'messages_update' => 'Повідомлення Оновлено',
+ 'messages_delete' => 'Повідомлення Видалено',
+ 'send_message' => 'Повідомлення Надіслано',
+ 'presence_update' => 'Оновлення Присутності',
+ 'new_token' => 'Новий Токен',
+ 'logout_instance' => 'Вихід з Екземпляра',
+ 'remove_instance' => 'Екземпляр Видалено',
+ ],
+];
diff --git a/resources/lang/uk/message.php b/resources/lang/uk/message.php
new file mode 100644
index 0000000..6f45cbd
--- /dev/null
+++ b/resources/lang/uk/message.php
@@ -0,0 +1,34 @@
+ 'Повідомлення',
+ 'model_label' => 'Повідомлення',
+ 'plural_model_label' => 'Повідомлення',
+
+ 'sections' => [
+ 'message_info' => 'Інформація про Повідомлення',
+ 'content' => 'Вміст',
+ 'timestamps' => 'Часові Мітки',
+ 'raw_payload' => 'Сирі Дані',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Екземпляр',
+ 'direction' => 'Напрямок',
+ 'phone' => 'Телефон',
+ 'type' => 'Тип',
+ 'content' => 'Вміст',
+ 'status' => 'Статус',
+ 'message_id' => 'ID Повідомлення',
+ 'media' => 'Медіа',
+ 'media_caption' => 'Підпис Медіа',
+ 'media_url' => 'URL Медіа',
+ 'location' => 'Місцезнаходження',
+ 'sent_at' => 'Надіслано',
+ 'delivered_at' => 'Доставлено',
+ 'read_at' => 'Прочитано',
+ 'created_at' => 'Створено',
+ ],
+];
diff --git a/resources/lang/uk/qrcode.php b/resources/lang/uk/qrcode.php
new file mode 100644
index 0000000..1a59292
--- /dev/null
+++ b/resources/lang/uk/qrcode.php
@@ -0,0 +1,21 @@
+ 'Підключити :instance',
+ 'loading' => 'Завантаження...',
+ 'connected' => 'Підключено',
+ 'waiting_scan' => 'Очікування сканування',
+ 'error' => 'Помилка підключення',
+ 'expires_in' => 'Закінчується через',
+ 'connected_title' => 'WhatsApp Підключено!',
+ 'connected_description' => 'Ваш екземпляр WhatsApp підключено і готовий до надсилання та отримання повідомлень.',
+ 'error_title' => 'Помилка Підключення',
+ 'try_again' => 'Спробувати Знову',
+ 'scan_instructions' => 'Відкрийте WhatsApp на телефоні, перейдіть до Налаштування > Пов\'язані пристрої > Прив\'язати пристрій і відскануйте цей QR-код.',
+ 'or_use_code' => 'Або введіть цей код на телефоні:',
+ 'copied' => 'Скопійовано!',
+ 'refresh' => 'Оновити QR-код',
+ 'generate' => 'Згенерувати QR-код',
+];
diff --git a/resources/lang/uk/resource.php b/resources/lang/uk/resource.php
new file mode 100644
index 0000000..8051255
--- /dev/null
+++ b/resources/lang/uk/resource.php
@@ -0,0 +1,60 @@
+ 'Екземпляри',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => 'Екземпляр',
+ 'plural_model_label' => 'Екземпляри',
+
+ 'sections' => [
+ 'instance_info' => 'Інформація про Екземпляр',
+ 'settings' => 'Налаштування',
+ 'connection' => 'Підключення',
+ ],
+
+ 'fields' => [
+ 'name' => 'Назва Екземпляра',
+ 'name_helper' => 'Унікальна назва для ідентифікації цього екземпляра',
+ 'number' => 'Номер Телефону',
+ 'number_helper' => 'Номер телефону WhatsApp з кодом країни',
+ 'status' => 'Статус',
+ 'profile_picture' => 'Фото Профілю',
+ 'reject_call' => 'Відхиляти Дзвінки',
+ 'reject_call_helper' => 'Автоматично відхиляти вхідні дзвінки',
+ 'msg_call' => 'Повідомлення Відхилення',
+ 'msg_call_helper' => 'Повідомлення, що надсилається при відхиленні дзвінка',
+ 'groups_ignore' => 'Ігнорувати Групи',
+ 'groups_ignore_helper' => 'Не обробляти повідомлення з груп',
+ 'always_online' => 'Завжди Онлайн',
+ 'always_online_helper' => 'Тримати статус онлайн',
+ 'read_messages' => 'Читати Повідомлення',
+ 'read_messages_helper' => 'Автоматично позначати повідомлення як прочитані',
+ 'read_status' => 'Читати Статус',
+ 'read_status_helper' => 'Автоматично переглядати оновлення статусу',
+ 'sync_full_history' => 'Синхронізувати Повну Історію',
+ 'sync_full_history_helper' => 'Синхронізувати всю історію повідомлень при підключенні',
+ 'created_at' => 'Створено',
+ 'updated_at' => 'Оновлено',
+ ],
+
+ 'actions' => [
+ 'connect' => 'Підключити',
+ 'disconnect' => 'Відключити',
+ 'delete' => 'Видалити',
+ 'refresh' => 'Оновити',
+ 'view_qrcode' => 'Показати QR-код',
+ 'close' => 'Закрити',
+ 'back' => 'Повернутися до Списку',
+ ],
+
+ 'messages' => [
+ 'created' => 'Екземпляр успішно створено',
+ 'updated' => 'Екземпляр успішно оновлено',
+ 'deleted' => 'Екземпляр успішно видалено',
+ 'connected' => 'Екземпляр успішно підключено',
+ 'disconnected' => 'Екземпляр успішно відключено',
+ 'connection_failed' => 'Не вдалося підключити екземпляр',
+ ],
+];
diff --git a/resources/lang/uk/webhook.php b/resources/lang/uk/webhook.php
new file mode 100644
index 0000000..aba599d
--- /dev/null
+++ b/resources/lang/uk/webhook.php
@@ -0,0 +1,31 @@
+ 'Логи Вебхуків',
+ 'model_label' => 'Лог Вебхука',
+ 'plural_model_label' => 'Логи Вебхуків',
+
+ 'sections' => [
+ 'webhook_info' => 'Інформація про Вебхук',
+ 'payload' => 'Дані',
+ 'error' => 'Помилка',
+ ],
+
+ 'fields' => [
+ 'instance' => 'Екземпляр',
+ 'event' => 'Подія',
+ 'processed' => 'Оброблено',
+ 'has_error' => 'Є Помилка',
+ 'error' => 'Помилка',
+ 'processing_time' => 'Час Обробки',
+ 'created_at' => 'Створено',
+ 'updated_at' => 'Оновлено',
+ ],
+
+ 'status' => [
+ 'yes' => 'Так',
+ 'no' => 'Ні',
+ ],
+];
diff --git a/resources/lang/zh_CN/action.php b/resources/lang/zh_CN/action.php
new file mode 100644
index 0000000..5b80b44
--- /dev/null
+++ b/resources/lang/zh_CN/action.php
@@ -0,0 +1,42 @@
+ '发送WhatsApp消息',
+ 'modal_heading' => '发送WhatsApp消息',
+ 'modal_description' => '向WhatsApp号码发送消息。',
+ 'send' => '发送消息',
+
+ // Form fields
+ 'instance' => '实例',
+ 'instance_helper' => '选择用于发送消息的WhatsApp实例。',
+ 'number' => '电话号码',
+ 'number_helper' => '输入带国家代码的电话号码(例如:8613812345678)。',
+ 'type' => '消息类型',
+ 'message' => '消息',
+ 'message_placeholder' => '在此输入您的消息...',
+ 'caption' => '说明',
+ 'caption_placeholder' => '媒体的可选说明...',
+ 'media' => '媒体文件',
+ 'media_helper' => '上传要发送的文件。',
+
+ // Location fields
+ 'latitude' => '纬度',
+ 'longitude' => '经度',
+ 'location_name' => '位置名称',
+ 'location_name_placeholder' => '例如:我的办公室',
+ 'location_address' => '地址',
+ 'location_address_placeholder' => '例如:主街123号,城市',
+
+ // Contact fields
+ 'contact_name' => '联系人姓名',
+ 'contact_number' => '联系人电话',
+
+ // Notifications
+ 'success_title' => '消息已发送!',
+ 'success_body' => '您的WhatsApp消息已成功发送。',
+ 'error_title' => '发送失败',
+ 'missing_required_fields' => '需要实例ID和电话号码。',
+ 'unsupported_type' => '不支持的消息类型。',
+];
diff --git a/resources/lang/zh_CN/enums.php b/resources/lang/zh_CN/enums.php
new file mode 100644
index 0000000..d59bdbc
--- /dev/null
+++ b/resources/lang/zh_CN/enums.php
@@ -0,0 +1,51 @@
+ [
+ 'open' => '已连接',
+ 'connecting' => '连接中',
+ 'close' => '已断开',
+ 'refused' => '已拒绝',
+ ],
+
+ 'message_type' => [
+ 'text' => '文本',
+ 'image' => '图片',
+ 'audio' => '音频',
+ 'video' => '视频',
+ 'document' => '文档',
+ 'location' => '位置',
+ 'contact' => '联系人',
+ 'sticker' => '贴纸',
+ ],
+
+ 'message_direction' => [
+ 'incoming' => '收到',
+ 'outgoing' => '发出',
+ ],
+
+ 'message_status' => [
+ 'pending' => '待处理',
+ 'sent' => '已发送',
+ 'delivered' => '已送达',
+ 'read' => '已读',
+ 'failed' => '失败',
+ ],
+
+ 'webhook_event' => [
+ 'application_startup' => '应用启动',
+ 'qrcode_updated' => '二维码已更新',
+ 'connection_update' => '连接更新',
+ 'messages_set' => '消息已设置',
+ 'messages_upsert' => '收到消息',
+ 'messages_update' => '消息已更新',
+ 'messages_delete' => '消息已删除',
+ 'send_message' => '消息已发送',
+ 'presence_update' => '状态更新',
+ 'new_token' => '新令牌',
+ 'logout_instance' => '实例登出',
+ 'remove_instance' => '实例已删除',
+ ],
+];
diff --git a/resources/lang/zh_CN/message.php b/resources/lang/zh_CN/message.php
new file mode 100644
index 0000000..347cd8e
--- /dev/null
+++ b/resources/lang/zh_CN/message.php
@@ -0,0 +1,34 @@
+ '消息',
+ 'model_label' => '消息',
+ 'plural_model_label' => '消息',
+
+ 'sections' => [
+ 'message_info' => '消息信息',
+ 'content' => '内容',
+ 'timestamps' => '时间戳',
+ 'raw_payload' => '原始数据',
+ ],
+
+ 'fields' => [
+ 'instance' => '实例',
+ 'direction' => '方向',
+ 'phone' => '电话',
+ 'type' => '类型',
+ 'content' => '内容',
+ 'status' => '状态',
+ 'message_id' => '消息ID',
+ 'media' => '媒体',
+ 'media_caption' => '媒体说明',
+ 'media_url' => '媒体链接',
+ 'location' => '位置',
+ 'sent_at' => '发送时间',
+ 'delivered_at' => '送达时间',
+ 'read_at' => '阅读时间',
+ 'created_at' => '创建时间',
+ ],
+];
diff --git a/resources/lang/zh_CN/qrcode.php b/resources/lang/zh_CN/qrcode.php
new file mode 100644
index 0000000..1540f0a
--- /dev/null
+++ b/resources/lang/zh_CN/qrcode.php
@@ -0,0 +1,21 @@
+ '连接 :instance',
+ 'loading' => '加载中...',
+ 'connected' => '已连接',
+ 'waiting_scan' => '等待扫描',
+ 'error' => '连接错误',
+ 'expires_in' => '过期时间',
+ 'connected_title' => 'WhatsApp已连接!',
+ 'connected_description' => '您的WhatsApp实例已连接,可以发送和接收消息。',
+ 'error_title' => '连接错误',
+ 'try_again' => '重试',
+ 'scan_instructions' => '在手机上打开WhatsApp,进入设置 > 已关联的设备 > 关联设备,然后扫描此二维码。',
+ 'or_use_code' => '或在手机上输入此代码:',
+ 'copied' => '已复制!',
+ 'refresh' => '刷新二维码',
+ 'generate' => '生成二维码',
+];
diff --git a/resources/lang/zh_CN/resource.php b/resources/lang/zh_CN/resource.php
new file mode 100644
index 0000000..12f723b
--- /dev/null
+++ b/resources/lang/zh_CN/resource.php
@@ -0,0 +1,60 @@
+ '实例',
+ 'navigation_group' => 'WhatsApp',
+ 'model_label' => '实例',
+ 'plural_model_label' => '实例',
+
+ 'sections' => [
+ 'instance_info' => '实例信息',
+ 'settings' => '设置',
+ 'connection' => '连接',
+ ],
+
+ 'fields' => [
+ 'name' => '实例名称',
+ 'name_helper' => '用于识别此实例的唯一名称',
+ 'number' => '电话号码',
+ 'number_helper' => '带国家代码的WhatsApp电话号码',
+ 'status' => '状态',
+ 'profile_picture' => '头像',
+ 'reject_call' => '拒绝来电',
+ 'reject_call_helper' => '自动拒绝来电',
+ 'msg_call' => '拒绝消息',
+ 'msg_call_helper' => '拒绝来电时发送的消息',
+ 'groups_ignore' => '忽略群组',
+ 'groups_ignore_helper' => '不处理群组消息',
+ 'always_online' => '始终在线',
+ 'always_online_helper' => '保持在线状态',
+ 'read_messages' => '已读消息',
+ 'read_messages_helper' => '自动将消息标记为已读',
+ 'read_status' => '查看状态',
+ 'read_status_helper' => '自动查看状态更新',
+ 'sync_full_history' => '同步完整历史',
+ 'sync_full_history_helper' => '连接时同步所有消息历史',
+ 'created_at' => '创建时间',
+ 'updated_at' => '更新时间',
+ ],
+
+ 'actions' => [
+ 'connect' => '连接',
+ 'disconnect' => '断开连接',
+ 'delete' => '删除',
+ 'refresh' => '刷新',
+ 'view_qrcode' => '查看二维码',
+ 'close' => '关闭',
+ 'back' => '返回列表',
+ ],
+
+ 'messages' => [
+ 'created' => '实例创建成功',
+ 'updated' => '实例更新成功',
+ 'deleted' => '实例删除成功',
+ 'connected' => '实例连接成功',
+ 'disconnected' => '实例断开连接成功',
+ 'connection_failed' => '实例连接失败',
+ ],
+];
diff --git a/resources/lang/zh_CN/webhook.php b/resources/lang/zh_CN/webhook.php
new file mode 100644
index 0000000..22dba04
--- /dev/null
+++ b/resources/lang/zh_CN/webhook.php
@@ -0,0 +1,31 @@
+ 'Webhook日志',
+ 'model_label' => 'Webhook日志',
+ 'plural_model_label' => 'Webhook日志',
+
+ 'sections' => [
+ 'webhook_info' => 'Webhook信息',
+ 'payload' => '负载',
+ 'error' => '错误',
+ ],
+
+ 'fields' => [
+ 'instance' => '实例',
+ 'event' => '事件',
+ 'processed' => '已处理',
+ 'has_error' => '有错误',
+ 'error' => '错误',
+ 'processing_time' => '处理时间',
+ 'created_at' => '创建时间',
+ 'updated_at' => '更新时间',
+ ],
+
+ 'status' => [
+ 'yes' => '是',
+ 'no' => '否',
+ ],
+];
diff --git a/resources/views/filament/pages/list-whatsapp-instances.blade.php b/resources/views/filament/pages/list-whatsapp-instances.blade.php
index 1119979..ab6e2fc 100644
--- a/resources/views/filament/pages/list-whatsapp-instances.blade.php
+++ b/resources/views/filament/pages/list-whatsapp-instances.blade.php
@@ -4,16 +4,13 @@
{{-- QR Code Modal --}}
{{ __('filament-evolution::qrcode.loading') }}
{{ $error }}
-
{{ __('filament-evolution::qrcode.or_use_code') }}
@@ -132,28 +128,26 @@
@endif
{{-- Refresh Button --}}
-
{}';
+ }
+
+ // Se for string, decodifica
+ if (is_string($payload)) {
+ $decoded = json_decode($payload, true);
+
+ if (json_last_error() === JSON_ERROR_NONE) {
+ $payload = $decoded;
+ }
+ }
+
+ $json = json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+
+ // Aplica syntax highlighting
+ $highlighted = htmlspecialchars($json, ENT_QUOTES, 'UTF-8');
+
+ // Colore keys (strings antes de :)
+ $highlighted = preg_replace('/"([^&]*)"(\s*:)/', '"$1"$2', $highlighted);
+
+ // Colore valores string (após os dois pontos)
+ $highlighted = preg_replace('/:\s*"([^&]*)"/', ': "$1"', $highlighted);
+
+ // Colore números
+ $highlighted = preg_replace('/:\s*(-?\d+\.?\d*)([,\n\r\s])/', ': $1$2', $highlighted);
+
+ // Colore booleanos
+ $highlighted = preg_replace('/:\s*(true|false)/', ': $1', $highlighted);
+
+ // Colore null
+ $highlighted = preg_replace('/:\s*(null)/', ': $1', $highlighted);
+
+ return '' . $highlighted . '';
+ }
+
+ protected function formatPayloadAsText(mixed $payload): string
+ {
+ if (empty($payload)) {
+ return '{}';
+ }
+
+ if (is_string($payload)) {
+ $decoded = json_decode($payload, true);
+
+ if (json_last_error() === JSON_ERROR_NONE) {
+ $payload = $decoded;
+ }
+ }
+
+ return json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+ }
}
diff --git a/src/Filament/Resources/WhatsappWebhookResource.php b/src/Filament/Resources/WhatsappWebhookResource.php
index a034aa8..5dbc0a6 100644
--- a/src/Filament/Resources/WhatsappWebhookResource.php
+++ b/src/Filament/Resources/WhatsappWebhookResource.php
@@ -83,34 +83,22 @@ class WhatsappWebhookResource extends Resource
TextColumn::make('event')
->label(__('filament-evolution::webhook.fields.event'))
->badge()
+ ->alignCenter()
->sortable(),
IconColumn::make('processed')
->label(__('filament-evolution::webhook.fields.processed'))
->boolean()
+ ->alignCenter()
->trueIcon('heroicon-o-check-circle')
->falseIcon('heroicon-o-clock')
->trueColor('success')
->falseColor('warning')
->sortable(),
- IconColumn::make('error')
- ->label(__('filament-evolution::webhook.fields.has_error'))
- ->boolean()
- ->getStateUsing(fn ($record) => ! empty($record->error))
- ->trueIcon('heroicon-o-x-circle')
- ->falseIcon('heroicon-o-check')
- ->trueColor('danger')
- ->falseColor('success'),
-
- TextColumn::make('processing_time_ms')
- ->label(__('filament-evolution::webhook.fields.processing_time'))
- ->suffix(' ms')
- ->sortable()
- ->placeholder('-'),
-
TextColumn::make('created_at')
->label(__('filament-evolution::webhook.fields.created_at'))
+ ->alignCenter()
->dateTime()
->sortable(),
])
@@ -131,12 +119,10 @@ class WhatsappWebhookResource extends Resource
TernaryFilter::make('has_error')
->label(__('filament-evolution::webhook.fields.has_error'))
->queries(
- true: fn ($query) => $query->whereNotNull('error'),
- false: fn ($query) => $query->whereNull('error'),
+ true: fn($query) => $query->whereNotNull('error'),
+ false: fn($query) => $query->whereNull('error'),
),
- ])
- ->actions([])
- ->bulkActions([]);
+ ]);
}
public static function getPages(): array
diff --git a/src/Filament/Resources/WhatsappWebhookResource/Pages/ViewWhatsappWebhook.php b/src/Filament/Resources/WhatsappWebhookResource/Pages/ViewWhatsappWebhook.php
index 82a3596..2a82b78 100644
--- a/src/Filament/Resources/WhatsappWebhookResource/Pages/ViewWhatsappWebhook.php
+++ b/src/Filament/Resources/WhatsappWebhookResource/Pages/ViewWhatsappWebhook.php
@@ -17,6 +17,7 @@ class ViewWhatsappWebhook extends ViewRecord
public function infolist(Schema $infolist): Schema
{
return $infolist
+ ->columns(1)
->schema([
Section::make(__('filament-evolution::webhook.sections.webhook_info'))
->schema([
@@ -31,8 +32,8 @@ class ViewWhatsappWebhook extends ViewRecord
TextEntry::make('processed')
->label(__('filament-evolution::webhook.fields.processed'))
->badge()
- ->formatStateUsing(fn ($state) => $state ? __('filament-evolution::webhook.status.yes') : __('filament-evolution::webhook.status.no'))
- ->color(fn ($state) => $state ? 'success' : 'warning'),
+ ->formatStateUsing(fn($state) => $state ? __('filament-evolution::webhook.status.yes') : __('filament-evolution::webhook.status.no'))
+ ->color(fn($state) => $state ? 'success' : 'warning'),
TextEntry::make('processing_time_ms')
->label(__('filament-evolution::webhook.fields.processing_time'))
@@ -57,17 +58,75 @@ class ViewWhatsappWebhook extends ViewRecord
->prose()
->color('danger'),
])
- ->visible(fn ($record) => ! empty($record->error)),
+ ->visible(fn($record) => ! empty($record->error)),
Section::make(__('filament-evolution::webhook.sections.payload'))
->schema([
- TextEntry::make('payload')
- ->label('')
- ->columnSpanFull()
- ->formatStateUsing(fn ($state) => $state ? json_encode($state, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) : '-')
- ->prose(),
+ TextEntry::make('payload_display')
+ ->hiddenLabel()
+ ->state(fn($record) => $this->formatPayloadAsHtml($record->payload))
+ ->html()
+ ->copyable()
+ ->copyableState(fn($record) => $this->formatPayloadAsText($record->payload))
+ ->copyMessage('Payload copiado!')
+ ->copyMessageDuration(1500),
])
- ->collapsible(),
+ ->icon('heroicon-o-code-bracket')
+ ->collapsible()
+ ->collapsed(false),
]);
}
+
+ protected function formatPayloadAsHtml(mixed $payload): string
+ {
+ if (empty($payload)) {
+ return '{}';
+ }
+
+ // Se for string, decodifica
+ if (is_string($payload)) {
+ $decoded = json_decode($payload, true);
+ if (json_last_error() === JSON_ERROR_NONE) {
+ $payload = $decoded;
+ }
+ }
+
+ $json = json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+
+ // Aplica syntax highlighting
+ $highlighted = htmlspecialchars($json, ENT_QUOTES, 'UTF-8');
+
+ // Colore keys (strings antes de :)
+ $highlighted = preg_replace('/"([^&]*)"(\s*:)/', '"$1"$2', $highlighted);
+
+ // Colore valores string (após os dois pontos)
+ $highlighted = preg_replace('/:\s*"([^&]*)"/', ': "$1"', $highlighted);
+
+ // Colore números
+ $highlighted = preg_replace('/:\s*(-?\d+\.?\d*)([,\n\r\s])/', ': $1$2', $highlighted);
+
+ // Colore booleanos
+ $highlighted = preg_replace('/:\s*(true|false)/', ': $1', $highlighted);
+
+ // Colore null
+ $highlighted = preg_replace('/:\s*(null)/', ': $1', $highlighted);
+
+ return '' . $highlighted . '';
+ }
+
+ protected function formatPayloadAsText(mixed $payload): string
+ {
+ if (empty($payload)) {
+ return '{}';
+ }
+
+ if (is_string($payload)) {
+ $decoded = json_decode($payload, true);
+ if (json_last_error() === JSON_ERROR_NONE) {
+ $payload = $decoded;
+ }
+ }
+
+ return json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+ }
}
diff --git a/src/FilamentEvolutionServiceProvider.php b/src/FilamentEvolutionServiceProvider.php
index 53cb125..1672653 100644
--- a/src/FilamentEvolutionServiceProvider.php
+++ b/src/FilamentEvolutionServiceProvider.php
@@ -8,6 +8,7 @@ use Livewire\Livewire;
use Spatie\LaravelPackageTools\Commands\InstallCommand;
use Spatie\LaravelPackageTools\Package;
use Spatie\LaravelPackageTools\PackageServiceProvider;
+use WallaceMartinss\FilamentEvolution\Console\Commands\CleanupCommand;
use WallaceMartinss\FilamentEvolution\Livewire\QrCodeDisplay;
use WallaceMartinss\FilamentEvolution\Services\EvolutionClient;
use WallaceMartinss\FilamentEvolution\Services\WhatsappService;
@@ -29,6 +30,7 @@ class FilamentEvolutionServiceProvider extends PackageServiceProvider
->hasViews()
->hasTranslations()
->hasRoutes(['api'])
+ ->hasCommand(CleanupCommand::class)
->hasInstallCommand(function (InstallCommand $command) {
$command
->publishConfigFile()
diff --git a/src/Jobs/ProcessWebhookJob.php b/src/Jobs/ProcessWebhookJob.php
index db30999..66cf1b1 100644
--- a/src/Jobs/ProcessWebhookJob.php
+++ b/src/Jobs/ProcessWebhookJob.php
@@ -7,19 +7,12 @@ namespace WallaceMartinss\FilamentEvolution\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
-use Illuminate\Queue\InteractsWithQueue;
-use Illuminate\Queue\SerializesModels;
+use Illuminate\Queue\{InteractsWithQueue, SerializesModels};
use Illuminate\Support\Facades\Log;
-use WallaceMartinss\FilamentEvolution\Data\Webhooks\ConnectionUpdateData;
-use WallaceMartinss\FilamentEvolution\Data\Webhooks\MessageUpsertData;
-use WallaceMartinss\FilamentEvolution\Data\Webhooks\QrCodeUpdatedData;
+use WallaceMartinss\FilamentEvolution\Data\Webhooks\{ConnectionUpdateData, MessageUpsertData, QrCodeUpdatedData};
use WallaceMartinss\FilamentEvolution\Enums\WebhookEventEnum;
-use WallaceMartinss\FilamentEvolution\Events\InstanceConnected;
-use WallaceMartinss\FilamentEvolution\Events\InstanceDisconnected;
-use WallaceMartinss\FilamentEvolution\Events\MessageReceived;
-use WallaceMartinss\FilamentEvolution\Events\QrCodeUpdated;
-use WallaceMartinss\FilamentEvolution\Models\WhatsappInstance;
-use WallaceMartinss\FilamentEvolution\Models\WhatsappWebhook;
+use WallaceMartinss\FilamentEvolution\Events\{InstanceConnected, InstanceDisconnected, MessageReceived, QrCodeUpdated};
+use WallaceMartinss\FilamentEvolution\Models\{WhatsappInstance, WhatsappWebhook};
class ProcessWebhookJob implements ShouldQueue
{
@@ -45,7 +38,7 @@ class ProcessWebhookJob implements ShouldQueue
try {
$instanceName = $this->payload['instance'] ?? $this->payload['instanceName'] ?? null;
- if (! $instanceName) {
+ if (!$instanceName) {
$this->markWebhookFailed('No instance name in payload');
return;
@@ -53,7 +46,7 @@ class ProcessWebhookJob implements ShouldQueue
$instance = WhatsappInstance::where('name', $instanceName)->first();
- if (! $instance) {
+ if (!$instance) {
$this->markWebhookFailed("Instance not found: {$instanceName}");
return;
@@ -61,15 +54,14 @@ class ProcessWebhookJob implements ShouldQueue
$this->processEvent($instance);
$this->markWebhookProcessed();
-
} catch (\Throwable $e) {
$this->markWebhookFailed($e->getMessage());
if (config('filament-evolution.logging.webhook_errors', true)) {
Log::channel(config('filament-evolution.logging.channel', 'stack'))
->error('Webhook processing failed', [
- 'event' => $this->event,
- 'error' => $e->getMessage(),
+ 'event' => $this->event,
+ 'error' => $e->getMessage(),
'payload' => $this->payload,
]);
}
@@ -84,10 +76,10 @@ class ProcessWebhookJob implements ShouldQueue
match ($eventEnum) {
WebhookEventEnum::CONNECTION_UPDATE => $this->handleConnectionUpdate($instance),
- WebhookEventEnum::QRCODE_UPDATED => $this->handleQrCodeUpdated($instance),
- WebhookEventEnum::MESSAGES_UPSERT => $this->handleMessageUpsert($instance),
- WebhookEventEnum::MESSAGES_UPDATE => $this->handleMessageUpdate($instance),
- default => $this->handleUnknownEvent($instance),
+ WebhookEventEnum::QRCODE_UPDATED => $this->handleQrCodeUpdated($instance),
+ WebhookEventEnum::MESSAGES_UPSERT => $this->handleMessageUpsert($instance),
+ WebhookEventEnum::MESSAGES_UPDATE => $this->handleMessageUpdate($instance),
+ default => $this->handleUnknownEvent($instance),
};
}
@@ -111,8 +103,8 @@ class ProcessWebhookJob implements ShouldQueue
$data = QrCodeUpdatedData::fromWebhook($this->payload);
$instance->update([
- 'qr_code' => $data->base64,
- 'pairing_code' => $data->pairingCode,
+ 'qr_code' => $data->base64,
+ 'pairing_code' => $data->pairingCode,
'qr_code_updated_at' => now(),
]);
@@ -134,23 +126,24 @@ class ProcessWebhookJob implements ShouldQueue
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;
+ $key = $messageData['key'] ?? [];
+ $remoteJid = $key['remoteJid'] ?? $data->message->phone;
$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,
+ 'phone' => $data->message->phone,
+ 'direction' => $data->message->direction,
+ 'type' => $data->message->type,
+ 'content' => [
+ '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,
+ 'latitude' => $data->message->latitude,
+ 'longitude' => $data->message->longitude,
+ ],
+ 'status' => $data->message->status,
+ 'raw_payload' => $this->payload,
]);
}
@@ -160,13 +153,13 @@ class ProcessWebhookJob implements ShouldQueue
protected function handleMessageUpdate(WhatsappInstance $instance): void
{
// Only update if message storage is enabled
- if (! config('filament-evolution.storage.messages', true)) {
+ if (!config('filament-evolution.storage.messages', true)) {
return;
}
$messageData = $this->payload['data'] ?? $this->payload;
- $key = $messageData['key'] ?? [];
- $update = $messageData['update'] ?? [];
+ $key = $messageData['key'] ?? [];
+ $update = $messageData['update'] ?? [];
if (isset($key['id']) && isset($update['status'])) {
$instance->messages()
@@ -182,7 +175,7 @@ class ProcessWebhookJob implements ShouldQueue
if (config('filament-evolution.logging.webhook_events', false)) {
Log::channel(config('filament-evolution.logging.channel', 'stack'))
->info('Unknown webhook event received', [
- 'event' => $this->event,
+ 'event' => $this->event,
'instance' => $instance->name,
]);
}
diff --git a/src/Jobs/SendMessageJob.php b/src/Jobs/SendMessageJob.php
index 08c1f45..303b75c 100644
--- a/src/Jobs/SendMessageJob.php
+++ b/src/Jobs/SendMessageJob.php
@@ -46,7 +46,6 @@ class SendMessageJob implements ShouldQueue
if ($this->messageId) {
$this->updateMessageStatus(MessageStatusEnum::SENT, $response);
}
-
} catch (EvolutionApiException $e) {
if ($this->messageId) {
$this->updateMessageStatus(MessageStatusEnum::FAILED);
diff --git a/src/Livewire/QrCodeDisplay.php b/src/Livewire/QrCodeDisplay.php
index 66793b4..6c4be69 100644
--- a/src/Livewire/QrCodeDisplay.php
+++ b/src/Livewire/QrCodeDisplay.php
@@ -56,7 +56,6 @@ class QrCodeDisplay extends Component
$this->instance->update(['status' => StatusConnectionEnum::OPEN]);
$this->dispatch('instance-connected');
}
-
} catch (EvolutionApiException $e) {
// Don't show error during poll - instance might not exist yet
if (! $this->qrCode) {
@@ -87,7 +86,6 @@ class QrCodeDisplay extends Component
// Dispatch event to reset Alpine countdown
$this->dispatch('qrCodeRefreshed');
-
} catch (EvolutionApiException $e) {
$this->error = $e->getMessage();
$this->isLoading = false;
diff --git a/src/Models/WhatsappMessage.php b/src/Models/WhatsappMessage.php
index eb04655..11d3ce6 100644
--- a/src/Models/WhatsappMessage.php
+++ b/src/Models/WhatsappMessage.php
@@ -8,9 +8,7 @@ use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
-use WallaceMartinss\FilamentEvolution\Enums\MessageDirectionEnum;
-use WallaceMartinss\FilamentEvolution\Enums\MessageStatusEnum;
-use WallaceMartinss\FilamentEvolution\Enums\MessageTypeEnum;
+use WallaceMartinss\FilamentEvolution\Enums\{MessageDirectionEnum, MessageStatusEnum, MessageTypeEnum};
use WallaceMartinss\FilamentEvolution\Models\Concerns\HasTenant;
class WhatsappMessage extends Model
@@ -40,14 +38,15 @@ class WhatsappMessage extends Model
protected function casts(): array
{
return [
- 'direction' => MessageDirectionEnum::class,
- 'type' => MessageTypeEnum::class,
- 'status' => MessageStatusEnum::class,
- 'media' => 'array',
- 'raw_payload' => 'array',
- 'sent_at' => 'datetime',
+ 'direction' => MessageDirectionEnum::class,
+ 'type' => MessageTypeEnum::class,
+ 'status' => MessageStatusEnum::class,
+ 'content' => 'array',
+ 'media' => 'array',
+ 'raw_payload' => 'array',
+ 'sent_at' => 'datetime',
'delivered_at' => 'datetime',
- 'read_at' => 'datetime',
+ 'read_at' => 'datetime',
];
}
@@ -94,7 +93,7 @@ class WhatsappMessage extends Model
public function markAsSent(): void
{
$this->update([
- 'status' => MessageStatusEnum::SENT,
+ 'status' => MessageStatusEnum::SENT,
'sent_at' => now(),
]);
}
@@ -102,7 +101,7 @@ class WhatsappMessage extends Model
public function markAsDelivered(): void
{
$this->update([
- 'status' => MessageStatusEnum::DELIVERED,
+ 'status' => MessageStatusEnum::DELIVERED,
'delivered_at' => now(),
]);
}
@@ -110,7 +109,7 @@ class WhatsappMessage extends Model
public function markAsRead(): void
{
$this->update([
- 'status' => MessageStatusEnum::READ,
+ 'status' => MessageStatusEnum::READ,
'read_at' => now(),
]);
}
diff --git a/src/Services/WhatsappService.php b/src/Services/WhatsappService.php
index a9e735b..99a5235 100644
--- a/src/Services/WhatsappService.php
+++ b/src/Services/WhatsappService.php
@@ -47,7 +47,7 @@ class WhatsappService
// If Brazilian number without country code, add it
if (strlen($number) === 10 || strlen($number) === 11) {
- $number = '55'.$number;
+ $number = '55' . $number;
}
return $number;