Proxy API (descontinuada)
La Proxy API se eliminará en una próxima versión. Existía para exponer la API a través de tu sitio WordPress, en una época en la que no había una API pública que llamar directo. Ahora la hay: la API de Joinotify hace lo mismo sin depender de que tu sitio esté en línea, con más tipos de mensaje, programación y confirmación real de entrega.
Las rutas siguen funcionando por ahora. Si aún las usas, mira cómo migrar más abajo.
La Proxy API expone endpoints REST en tu propio sitio que reenvían el envío a Joinotify. Un sistema externo llama a tu dominio; el plugin resuelve el transporte, la autenticación y la cola.
Resulta útil para:
- Seguridad — tu token de Joinotify no sale de tu servidor; quien llama desde fuera usa una clave propia, que puedes rotar cuando quieras.
- Sencillez — dos endpoints con un cuerpo mínimo, sin necesidad de conocer todo el contrato de la API.
- Control — WordPress queda en medio, así que puedes limitar, filtrar o registrar las peticiones antes de reenviarlas.
Si el sistema que envía ya habla HTTP con autenticación Bearer, llamar a la API de Joinotify directamente es más simple y no depende de que tu sitio esté en línea. La Proxy API existe para los casos en los que WordPress tiene que estar en medio.
Cómo migrar
El destino es la API de Joinotify, llamada directamente por el sistema que envía. La clave es la misma que el plugin ya tiene: cógela en Joinotify → Ajustes → Integraciones, en la tarjeta de WhatsApp, o genera una propia en el panel.
| Antes | Ahora |
|---|---|
POST https://tusitio.com/wp-json/joinotify/v1/send-message/text | POST https://api.joinotify.com/messages con {"type":"text"} |
POST .../send-message/media | POST https://api.joinotify.com/v1/{phone_number_id}/messages |
Cabecera X-API-Key | Cabecera Authorization: Bearer sk_live_… |
receiver / message | to / body |
curl -X POST https://api.joinotify.com/messages \
-H 'Authorization: Bearer sk_live_xxx' \
-H 'Content-Type: application/json' \
-d '{ "type": "text", "to": "5511910203040", "body": "¡Hola!" }'
Lo que ganas: los tipos de mensaje que la Proxy API nunca expuso (plantilla, botones, lista,
carrusel, medios por id), programación con cancelación
y el estado real de entrega — la Proxy API solo
decía que el mensaje había sido aceptado.
Lo que pierdes: WordPress deja de estar en medio, así que los filtros o registros que tengas colgados ahí tienen que mudarse.
Saber si alguien todavía la usa
Toda respuesta del proxy lleva dos cabeceras:
Deprecation: true
X-Joinotify-Deprecation: The Joinotify Proxy API is deprecated and will be removed in an
upcoming release. Migrate to the Joinotify API (official WhatsApp Cloud API).
Y cada llamada se registra en el log de depuración como WARNING. Por ahí se descubre qué
integración sigue apuntando al formato antiguo antes de que las rutas desaparezcan.
Activación
En Joinotify → Configuración → General, en la tarjeta Proxy API:
| Campo | Predeterminado | Qué hace |
|---|---|---|
| Activar Proxy API | desactivado | Registra los endpoints en el sitio |
| Ruta de texto | send-message/text | Ruta de los mensajes de texto |
| Ruta multimedia | send-message/media | Ruta de los mensajes multimedia |
| Clave de API | vacío | Valor esperado en la cabecera X-API-Key |
Las rutas viven bajo el namespace joinotify/v1. Con los valores predeterminados, las
direcciones finales son:
https://tusitio.com/wp-json/joinotify/v1/send-message/text
https://tusitio.com/wp-json/joinotify/v1/send-message/media
Las rutas solo se registran con la Proxy API activada — y, desde la 2.4.0, viene desactivada en instalaciones nuevas. Sin activarla, WordPress responde 404.
Autenticación
Envía la clave configurada en la cabecera X-API-Key. Sin ella — o con otro valor — la respuesta
es 403.
Enviar un mensaje de texto
curl -X POST https://tusitio.com/wp-json/joinotify/v1/send-message/text \
-H 'X-API-Key: cb9sDT9MRjlMnBIQglneN6uEEKxvrcpW' \
-H 'Content-Type: application/json' \
-d '{
"sender": "5541912345678",
"receiver": "5511910203040",
"message": "Tu pedido #1042 está confirmado.",
"delay": 60
}'
| Campo | Obligatorio | Descripción |
|---|---|---|
sender | sí | Teléfono remitente en formato internacional |
receiver | sí | Teléfono del destinatario en formato internacional |
message | sí | Texto del mensaje |
delay | no | Espera en segundos antes de enviar. Sin él, el envío es inmediato |
Enviar un mensaje multimedia
curl -X POST https://tusitio.com/wp-json/joinotify/v1/send-message/media \
-H 'X-API-Key: cb9sDT9MRjlMnBIQglneN6uEEKxvrcpW' \
-H 'Content-Type: application/json' \
-d '{
"sender": "5541912345678",
"receiver": "5511910203040",
"media_type": "document",
"media_url": "https://tusitio.com/wp-content/uploads/2026/07/manual.pdf",
"caption": "Aquí tienes el manual del producto."
}'
| Campo | Obligatorio | Descripción |
|---|---|---|
sender | sí | Teléfono remitente en formato internacional |
receiver | sí | Teléfono del destinatario en formato internacional |
media_type | sí | image, video, document o audio |
media_url | sí | URL del archivo, en tu sitio o externa |
caption | no | Leyenda del archivo |
delay | no | Espera en segundos antes de enviar |
Formatos aceptados por tipo
- Imagen
- Vídeo
- Documento
- Audio
.jpeg · .png · .gif · .bmp · .webp
.mp4 · .3gp · .avi · .mpeg
.pdf · .doc · .docx · .xls · .xlsx · .ppt · .pptx · .txt
.mp3 · .mpeg · .ogg · .oga · .wav · .amr
Para autorizar otros formatos, usa el filtro Joinotify/Validations/Get_Mime_Types — consulta
Recursos para desarrolladores.
Ejemplo: avisar cuando se publica una entrada
El snippet siguiente va en el functions.php del tema o en un plugin de snippets como
WPCode. Llama a la propia Proxy API
del sitio, reutilizando los helpers que resuelven la dirección y la clave.
add_action( 'publish_post', 'meumouse_avisar_entrada_publicada' );
/**
* Envía un mensaje de texto por la Proxy API cuando se publica una entrada.
*
* @param int $post_id | ID de la entrada publicada.
*/
function meumouse_avisar_entrada_publicada( $post_id ) {
if ( get_post_type( $post_id ) !== 'post' ) {
return;
}
$post = get_post( $post_id );
$mensaje = sprintf(
"¡Hola! Se ha publicado una nueva entrada en el sitio.\n\nTítulo: %s\nAutor: %s\nEnlace: %s",
$post->post_title,
get_the_author_meta( 'display_name', $post->post_author ),
get_permalink( $post_id )
);
$response = wp_remote_post( joinotify_proxy_api_text_message_text_endpoint(), array(
'headers' => array(
'Content-Type' => 'application/json',
'X-API-Key' => joinotify_get_proxy_api_key(),
),
'body' => wp_json_encode( array(
'sender' => joinotify_get_first_sender(),
'receiver' => '5511910203040',
'message' => $mensaje,
) ),
'timeout' => 15,
) );
if ( is_wp_error( $response ) ) {
error_log( 'Error al enviar el mensaje de texto: ' . $response->get_error_message() );
}
}
Cuando el código ya se ejecuta en WordPress, puedes saltarte el HTTP y llamar directamente a
joinotify_send_whatsapp_message_text(). La Proxy API es para quien está fuera del sitio.
La ventana de 24 horas también aplica aquí
Con el transporte por Cloud API, un mensaje de texto libre solo se entrega dentro de la ventana de 24 horas. Fuera de ella hace falta una plantilla aprobada — y la Proxy API no expone el envío de plantillas. Consulta Envío a través de Joinotify Cloud.