Saltar al contenido principal

Envío a través de Joinotify Cloud

El plugin entrega los mensajes por un canal. Hay dos canales de WhatsApp, y conviven en el mismo sitio:

CanalCómo conectaTipos de mensaje
WhatsApp (Cloud API)token de Joinotify Cloudtexto, multimedia, audio y plantilla
WhatsApp (Evolution)código QR, por el relay antiguotexto, multimedia y audio

El canal Cloud habla con la API de Joinotify Cloud — la misma que usa cualquier integración externa — y detrás de ella está la Cloud API oficial de Meta. Es el camino recomendado: el número es oficial, el envío va firmado por Meta y no depende de una sesión de WhatsApp Web viva en el servidor.

Configuración​

Ve a Joinotify → Configuración → General, en la tarjeta WhatsApp Cloud API.

CampoQué hace
Transporte de mensajesAutomático, Cloud API (oficial) o Evolution (heredado)
Token de la APItu token de Joinotify Cloud (sk_live_…)
ID del número de teléfonoel phone_number_id usado como origen
ID de la cuenta de empresael waba_id dueño de las plantillas

En modo Automático — el predeterminado — el plugin usa la Cloud API siempre que haya un token disponible y recurre a Evolution cuando no lo hay. Los otros dos valores fuerzan un transporte concreto, útil para probar o para retener la migración.

Probablemente no tengas que rellenar nada

Cuando tu licencia ya tiene un número de Joinotify Cloud aprovisionado, el token, el phone_number_id y el waba_id llegan con la licencia. Los campos anteriores son sobrescrituras manuales: rellénalos solo para apuntar el sitio a otro número o a otra cuenta. En blanco, vale lo que vino con la licencia.

Dónde encontrar cada identificador en el panel de Joinotify Cloud está descrito en Inicio rápido.

La ventana de 24 horas cambia lo que puedes enviar​

Esta es la diferencia que más se nota en el día a día. En el relay antiguo, el texto libre salía en cualquier momento. En la Cloud API oficial, fuera de la ventana de 24 horas desde el último mensaje del cliente, solo se entrega una plantilla aprobada — el texto libre es rechazado por Meta.

En la práctica:

  • Los flujos que responden a una conversación en curso siguen funcionando igual.
  • Los flujos que inician la conversación — "tu pedido salió para entrega", "valora tu compra a los 7 días" — caen fuera de la ventana y necesitan plantilla.

El concepto completo, con las categorías de plantilla y el coste de cada una, está en La ventana de 24 horas y en Plantillas.

Todavía no hay una acción "Enviar plantilla" en el constructor

El constructor ofrece WhatsApp: mensaje de texto y WhatsApp: mensaje multimedia. El envío de plantillas existe en el canal, pero aún no como nodo del flujo — por ahora se alcanza desde código (más abajo) o directamente por la API de Cloud.

Enviar una plantilla desde código​

El envío pasa por la capa de notificaciones, que resuelve el canal activo:

functions.php o un plugin propio
$resultado = joinotify_dispatch_notification( array(
'channel' => 'whatsapp_cloud',
'type' => 'template',
'sender' => joinotify_get_first_sender(),
'receiver' => '5541987111527',
'meta' => array(
'template_name' => 'pedido_enviado',
'language' => 'es_ES',
'components' => array(
array(
'type' => 'body',
'parameters' => array(
array( 'type' => 'text', 'text' => '1042' ),
),
),
),
),
) );

if ( ! $resultado->is_success() ) {
error_log( 'Fallo al enviar la plantilla: ' . $resultado->error );
}

El formato de components es el mismo de la API — consulta Enviar mensajes.

Cómo elige el plugin el número de origen​

El phone_number_id se resuelve a partir del remitente del flujo. Cuando ese número no tiene un phone_number_id propio mapeado, se aplica el predeterminado de la cuenta — el campo ID del número de teléfono de la configuración, o el valor aprovisionado con la licencia.

Errores y reenvío​

Un envío fallido no se descarta: el mensaje va a la cola de procesamiento (Joinotify → Cola de procesamiento) y se reintenta. Los errores de configuración — token inválido, plantilla inexistente, ventana cerrada — no se reintentan, porque insistir no cambiaría el resultado; quedan registrados en el historial y en los logs.

El error más común en producción es la ventana cerrada, registrado como window_closed_requires_template. La tabla completa de códigos está en Errores.

Apuntar a otro entorno​

Para probar contra algo que no sea producción, define la constante en wp-config.php:

wp-config.php
define( 'JOINOTIFY_CLOUD_API_BASE_URL', 'https://api.ejemplo.com' );

Sin la constante, el plugin habla con https://api.joinotify.com.