Miira · leads y WhatsApp v1 vigente
miira. broadcast_ quoted
Presupuesta mandar el MISMO mensaje de WhatsApp a varios clientes dichos por su nombre (hasta 50). NO envía nada: dice, por cliente, si le llega el texto tal cual (ventana de 24 h abierta, gratis), si hace falta una plantilla aprobada y cuánto cuesta, o por qué no se le puede escribir. Devuelve un presupuesto firmado que vale 15 minutos; para enviar, llama a miira.broadcast_sent con él. Enséñale el presupuesto a la persona antes. `purpose` opcional: `notice` (por omisión) es el aviso de siempre; `promotion` NUNCA manda texto libre, ni con la ventana abierta, y exige una plantilla aprobada de MARKETING (si no, plantilla_invalida): solo llega a quien dio su consentimiento de marketing (si no, no_marketing_consent) y deja fuera los números de EE. UU. (us_moratorium). En una promoción `message` no se envía nunca: sale la plantilla con sus `templateValues`. Usa `promotion` para ofertas y campañas, nunca para una respuesta ni un aviso.
Última actualización
POST /api/v1/actions/miira.broadcast_quoted- Alcance de la llave
miira.broadcast_quoted@1- Permiso del workspace
api.miira.broadcast_quotedapagado por defecto
Hacen falta las dos cosas: una llave con ese alcance, y que el dueño del workspace haya encendido el permiso. Tener la llave no basta — son dos decisiones de personas distintas.
Petición
| campo | tipo | reglas | |
|---|---|---|---|
clients | string[] | obligatorio | |
message | string | obligatorio | min 1 · max 4096 |
template | string | opcional | min 1 · max 512 |
templateValues | string[] | opcional | |
purpose | "notice" | "promotion" | opcional |
Respuesta — output cuando status es done
| campo | tipo | reglas | |
|---|---|---|---|
rows | object[] | obligatorio | |
totals | object | obligatorio | |
quote | string | null | obligatorio | |
expiresAt | string | null | obligatorio |
rows[]
| campo | tipo | reglas | |
|---|---|---|---|
client | string | obligatorio | |
clientId | string | null | obligatorio | |
clientName | string | null | obligatorio | |
outcome | "free_text" | "template" | "needs_template" | "no_phone" | "suppressed" | "consent_revoked" | "no_marketing_consent" | "quiet_hours" | "not_found" | "ambiguous" | "too_many" | "us_moratorium" | obligatorio | |
costUsd | string | null | obligatorio | |
candidates | string[] | opcional |
totals
| campo | tipo | reglas | |
|---|---|---|---|
freeText | integer | obligatorio | |
template | integer | obligatorio | |
skipped | integer | obligatorio | |
costUsd | string | obligatorio |
Ejemplo
# One request, one idempotency key: retrying with the same key never runs twice.
curl -X POST https://niiko.org/api/v1/actions/miira.broadcast_quoted \
-H "Authorization: Bearer nk_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"clients": [
"…"
],
"message": "…"
}'
# 200 → done · 202 → pending_approval (a person signs later) · 4xx → refused, with a named reasonPor qué puede negarse
Cada motivo dice quién puede arreglarlo y cómo. Con motivo stale, detail.message dice qué hacer.
plantilla_invalidatarifas_vencidassin_permiso
En los clientes
| @vorluno/niiko-sdk | niiko.quotedBroadcast() |
| niiko (Python) | niiko.quoted_broadcast() |
| niiko-cli | niiko run miira.broadcast_quoted |
| n8n-nodes-niiko | miiraBroadcastQuoted |
| niiko-mcp-server | miira_broadcast_quoted |
Historial
- Una difusión puede declararse promoción
miira.broadcast_quotedacepta unpurposeopcional:notice(el de siempre, sin cambios) opromotion. Una promoción nunca sale como texto libre, ni con la ventana de 24 horas abierta: exige una plantilla de marketing aprobada (si no,plantilla_invalida) y solo llega a quien dio su consentimiento de marketing (si no,no_marketing_consent). Los números de EE. UU. quedan fuera con el nuevo desenlace de filaus_moratorium, que solo se emite en una promoción, así que las integraciones existentes nunca lo ven. El propósito va firmado en el presupuesto. - Las difusiones ya no esperan a las horas de silencioniiko ya no difiere ni excluye envíos por la hora del día. Las filas de una difusión dejan de salir como
quiet_hours(el valor sigue en el enum de desenlaces, pero nunca se emite), y los mensajes que encolamiira.broadcast_sentsalen enseguida, a cualquier hora. La ventana de servicio de 24 horas de Meta y las reglas de consentimiento no cambian. - Difusión por WhatsApp, en dos pasos
miira.broadcast_quotedcotiza el mismo mensaje a hasta 50 clientes (gratis dentro de la ventana de 24 horas, plantilla aprobada y tarifa fuera de ella) y devuelve una cotización firmada válida 15 minutos;miira.broadcast_sentmanda exactamente lo cotizado, o se niega con una cotización nueva si algo cambió.