technologicalsharks/omnichannel

Libreria para interactuar Omnicanal (WhatsApp, Instagram, Telegram, Messenger, Thread) en Laravel.

Maintainers

Package info

bitbucket.org/tls-programacion/omnichannel

pkg:composer/technologicalsharks/omnichannel

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

v1.0.3 2026-07-27 22:29 UTC

This package is auto-updated.

Last update: 2026-07-27 22:31:09 UTC


README

Insignias

License: MIT PHP Version Laravel

Índice

🌐 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.0 o ^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:

  1. 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/).