technologicalsharks / omnichannel
Libreria para interactuar Omnicanal (WhatsApp, Instagram, Telegram, Messenger, Thread) en Laravel.
Package info
bitbucket.org/tls-programacion/omnichannel
pkg:composer/technologicalsharks/omnichannel
Requires
- php: ^8.2
Requires (Dev)
- phpunit/phpunit: ^10.0
README
Insignias
Índice
- 🚀 Laravel OmniChannel SDK
- Insignias
- 🌐 Descripcion del Proyecto
- 🚧 Estado del proyecto (Canales Soportados Actuales y Planificados)
- 🚀 Características
- ✔️ Requisitos
- 📦 Instalación en un Proyecto
- 💡 Demostración de funciones y aplicaciones
- 🛠️ Contribuir
- Personas Desarrolladoras del Proyecto
- Personas Contribuyentes
- 📄 Licencia
🌐 Descripción del Proyecto;
SDK de mensajería omnicanal para Laravel, desarrollado bajo principios SOLID y un patrón Proxy/Delegate, optimizado para interactuar de forma robusta con las diferentes API de Meta y otras RRSS.
🚧 Estado del proyecto (Canales Soportados Actuales y Planificados)
- [x] WhatsApp Cloud API (Completamente implementado)
- [ ] Facebook Messenger (Próximamente)
- [ ] Instagram Direct (Próximamente)
- [ ] Telegram (Próximamente)
- [ ] Threads (Próximamente)
🚀 Características
DEFINE EL ID DEL MENSAJE AL CUAL SE VA A RESPONDER.
- public function replyTo(string $messageId): self;
MÉTODOS DE ENVÍO DE MENSAJES
- public function sendTextMessage(string $to, string $text, bool $previewUrl = false, ?string $recipientBsuid = null);
- public function sendDocument(string $to, string|object $mediaIdOrLink, string $documentName, string $caption = '', ?string $recipientBsuid = null);
- public function sendTemplate(string $to, string $templateName, string $language = 'en_US', $components = null, ?string $recipientBsuid = null);
- public function sendAudio(string $to, string|object $mediaIdOrLink, ?string $recipientBsuid = null);
- public function sendImage(string $to, string|object $mediaIdOrLink, string $caption = '', ?string $recipientBsuid = null);
- public function sendVideo(string $to, string|object $mediaIdOrLink, string $caption = '', ?string $recipientBsuid = null);
- public function sendSticker(string $to, string|object $mediaIdOrLink, ?string $recipientBsuid = null);
- public function sendLocation(string $to, float $longitude, float $latitude, string $name, string $address, ?string $recipientBsuid = null);
- public function sendLocationRequest(string $to, string $body, ?string $recipientBsuid = null);
- public function sendContact(string $to, array $contactsData, ?string $recipientBsuid = null);
- public function sendList(string $to, string $header, string $body, string $footer, array $action, ?string $recipientBsuid = null);
- public function sendButton(string $to, string $body, array $action, string $header = '', string $footer = '', ?string $recipientBsuid = null);
- public function sendMultiProduct(string $to, string $catalogId, array $action, string $header, string $body, string $footer = '', ?string $recipientBsuid = null);
- public function sendSingleProduct(string $to, string $catalogId, string $skuId, string $body = '', string $footer = '', ?string $recipientBsuid = null);
MULTIMEDIA Y ESTADOS
- public function uploadMedia(string $filePath);
- public function downloadMedia(string $mediaId);
- public function markMessageAsRead(string $messageId);
- public function sendTypingIndicator(string $messageId);
- public function sendReaction(string $to, string $messageId, string $emoji = '');
PERFIL Y CONFIGURACIÓN
- public function getBusinessProfile(string $fields = '');
- public function updateBusinessProfile(array $data);
- WEBHOOKS Y PLANTILLAS
- public function verifyWebhook(array $queryParams, string $verifyToken): string;
- public function readWebhookNotification(array $payloadData);
- public function createTemplate(string $name, string $category, string $language, array $components);
- public function updateTemplateById(string $templateId, array $payload);
✔️ Requisitos
- PHP:
^8.2. - Laravel:
^10.0,^11.0o^12.0
📦 Instalación en un Proyecto
Para integrar este paquete en un proyecto de Laravel nuevo o existente, sigue estos pasos:
Instala el paquete a través de Composer:
composer require technologicalsharks/omnichannel:@dev
Configuración
php artisan vendor:publish --tag="omnichannel-config"
Ejecutar Migraciones a través de Composer:
php artisan migrate:fresh
Agrega las siguientes variables de entorno a tu archivo .env:
Fragmento de código
WHATSAPP_TOKEN=tu_token_permanente_o_temporal_de_meta WHATSAPP_PHONE_NUMBER_ID=tu_phone_number_id WHATSAPP_GRAPH_VERSION=v18.0
💡 Demostración de funciones y aplicaciones
Puedes utilizar la Facades OmniChannel para invocar el canal de WhatsApp de forma limpia y directa:
- Enviar un mensaje de texto
use TuNamespace\OmniChannel\Facades\OmniChannel;
$response = OmniChannel::useChannel('whatsapp')
->sendText('584140000000', '¡Hola desde Laravel OmniChannel!');
2. Enviar una Imagen con Leyenda
$response = OmniChannel::useChannel('whatsapp')
->sendImage('584140000000', '[https://tu-sitio.com/imagen.jpg](https://tu-sitio.com/imagen.jpg)', 'Mira este producto');
3. Enviar Botones Interactivos
$response = OmniChannel::useChannel('whatsapp')
->sendButton('584140000000', 'Por favor, selecciona una opción:', [
['id' => 'btn_1', 'title' => 'Aceptar'],
['id' => 'btn_2', 'title' => 'Rechazar']
]);
4. Enviar una Reacción a un Mensaje
$response = OmniChannel::useChannel('whatsapp')
->sendReaction('584140000000', 'wamid.HBgM...', '🔥');
Puedes utilizar de fomra directa las librerias de comunicacion segun el canal que necesites utilizar:
use Technologicalsharks\ApiWhatsapp\Services\WhatsAppApiClient;
protected WhatsAppApiClient $whatsapp;
public function __construct()
{
// Inicializamos el cliente cargando las credenciales desde tu .env o configuración
$this->whatsapp = new WhatsAppApiClient([
'access_token' => env('WHATSAPP_TOKEN'),
'phone_number_id' => env('WHATSAPP_PHONE_NUMBER_ID'),
'graph_version' => env('WHATSAPP_GRAPH_VERSION', 'v17.0'),
'business_id' => env('WHATSAPP_BUSINESS_ID', null),
]);
}
public function sendText()
{
try {
$response = $this->whatsapp->sendTextMessage(
'584140000000',
'Hola, este es un mensaje de prueba desde mi paquete Laravel.'
);
return response()->json([
'success' => true,
'data' => $response
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'error' => $e->getMessage()
], 500);
}
}
## 🛠️ Contribuir
Las contribuciones son bienvenidas. Para cambios importantes, abre primero un issue para discutir qué te gustaría cambiar.
Estructura para Contribuir / Crear Nuevos Drivers
Si deseas extender la librería para soportar un nuevo canal (ej. Telegram o Messenger), simplemente debes:
Crear una clase driver que implemente la interfaz base de contratos en la carpeta Services.
Registrar el driver en el OmniChannelManager mediante el contenedor de servicios de Laravel.
Las pull requests y sugerencias son totalmente bienvenidas.
## Personas Desarrolladoras del Proyecto
## Personas Contribuyentes
## 📄 Licencia
Este proyecto está bajo la licencia [MIT](https://choosealicense.com/licenses/mit/).