Consultar el estado de una campaña
curl --request GET \
--url https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id} \
--header 'Authorization: <authorization>'import requests
url = "https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"launch_request_id": "59d7ef01-4518-444f-816e-1c45c1748974",
"status": "DONE",
"poll_id": 1251072,
"deployments": [
{
"conversation_id": "671a1a2e2e2e2e2e2e2e2e2e",
"treble_id": "abc123",
"cellphone": "3051234567",
"business_scope_id": null,
"username": null,
"status": "SENT"
}
]
}{
"detail": "No existe una solicitud de lanzamiento con este id para esta empresa"
}API
Consultar el estado de una campaña
Revisa cómo va una campaña enviada a POST /v2/send-campaign: si sigue pendiente, ya fue tomada para procesarse, o terminó, junto con el estado de cada despliegue individual en el que se expandió.
GET
/
v2
/
send-campaign
/
{launch_request_id}
Consultar el estado de una campaña
curl --request GET \
--url https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id} \
--header 'Authorization: <authorization>'import requests
url = "https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://campaign-orchestration.treble.ai/v2/send-campaign/{launch_request_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"launch_request_id": "59d7ef01-4518-444f-816e-1c45c1748974",
"status": "DONE",
"poll_id": 1251072,
"deployments": [
{
"conversation_id": "671a1a2e2e2e2e2e2e2e2e2e",
"treble_id": "abc123",
"cellphone": "3051234567",
"business_scope_id": null,
"username": null,
"status": "SENT"
}
]
}{
"detail": "No existe una solicitud de lanzamiento con este id para esta empresa"
}Recuerda que para usar este endpoint, debes haber obtenido tu llave de API en la sección de Desarrolladores de la plataforma Treble.
launch_request_id que devuelve Enviar una campaña para saber si sigue PENDING, ya fue tomada para procesarse (CLAIMED), o terminó (DONE) — junto con el estado de cada despliegue individual en el que se expandió.
Valores del estado del despliegue
Cada elemento dedeployments tiene su propio status, que es null hasta que el Conversation Runtime lo toma. De ahí en adelante, pasa por uno de estos valores:
| Estado | Significado |
|---|---|
RECEIVED | El Conversation Runtime recibió el despliegue y está a punto de enviarlo. |
RECEIVED_BY_WORKER | Un worker lo tomó y lo está procesando. |
RETRY | Ocurrió una falla transitoria y el despliegue se está reintentando. |
SUCCESS | El mensaje se envió correctamente (la entrega todavía no ha sido confirmada por WhatsApp). |
DELIVERED | WhatsApp confirmó que el mensaje fue entregado al dispositivo del usuario. |
PUSH_NOTIFICATION (también se ve con el typo PUSH_NOTIFATION) | Se envió como notificación push en lugar de un mensaje de WhatsApp. |
REVOKED | El despliegue fue cancelado antes de enviarse. |
VALIDATION_ERROR | Los datos del despliegue no pasaron la validación antes de enviarse. |
INVALID_PHONE | El celular no es válido o no tiene WhatsApp. |
INVALID_POLL | Se intentó enviar una conversación eliminada o desactivada. |
MISSING_PARAMETER | Faltó una variable requerida en la plantilla HSM. |
PARAMETER_MISMATCH | El número de variables enviadas no coincide con las de la plantilla HSM. |
CHARACTER_LIMIT_HEADER | El encabezado de la plantilla HSM excede el límite de caracteres permitido por WhatsApp. |
CHARACTER_LIMIT_BODY | El cuerpo de la plantilla HSM excede el límite de caracteres permitido por WhatsApp. |
FAILURE | El despliegue falló después de 3 reintentos. |
FAILURE_BY_HUMAN_HANDOVER | El usuario se encuentra hablando con un agente, así que no se envió el mensaje automático. |
FAILURE_BY_RATE_LIMIT | Enviar el mensaje habría superado el límite de envíos permitido por WhatsApp. |
COMPANY_RATE_LIMIT | Superó el límite de sesiones configurado por la empresa. |
FAILURE_BY_TIER_CAPACITY | Ninguna línea de WhatsApp tenía capacidad suficiente para hacer el despliegue. |
FAILURE_BY_BLOCKED_CONTACT | El contacto ha sido bloqueado por la empresa. |
FAILURE_BY_OPTOUT_CONTACT | El contacto optó por no recibir más comunicaciones de la empresa. |
FAILURE_BY_DISABLED_HSM | Meta deshabilitó la plantilla HSM que se envió. |
FAILURE_BY_SPAM_RATE_LIMIT | WhatsApp restringió la línea por spam; no puede enviar más mensajes por ahora. |
FAILURE_BY_EXPERIMENT_NUMBER | WhatsApp está usando ese número para experimentos internos, así que el despliegue no pudo realizarse. |
FAILURE_BY_META_CHOSE_NOT_DELIVER | Las heurísticas internas de Meta decidieron no entregar el mensaje. |
FAILURE_BY_TEST_CHANNEL | La línea es un canal de prueba y no puede enviar despliegues reales. |
FAILURE_BY_MEDIA_UPLOAD_ERROR | El archivo multimedia adjunto falló al subirse a WhatsApp. |
FAILURE_BY_DEPLOYMENT_LIMIT_REACHED | La empresa alcanzó su límite de despliegues. |
FAILURE_BY_UNABLE_TO_CONTACT | WhatsApp no pudo contactar al dispositivo del usuario en ese momento — generalmente es temporal. Mira la explicación completa. |
FAILURE_BY_PAYMENT_ISSUE | Meta rechazó el envío de la plantilla por un problema de pago en la cuenta de WhatsApp Business. Mira la explicación completa. |
Encabezados
Llave de API de autorización
Parámetros de ruta
El launch_request_id que se devolvió al enviar la campaña
¿Esta página le ayudó?