API de Monkeia Flow

Conectá tu bot de ManyChat (u otro sistema) con Monkeia Flow: respuestas con IA usando tu prompt, eventos de bots de botones para medir embudos y llenar Ventas, tareas de IA y control de las conversaciones.

URL base: https://apikey.monkeia.com

Todas las llamadas son POST con cuerpo JSON (Content-Type: application/json), salvo los enlaces de WhatsApp.

Autenticación

Cada cuenta tiene su clave del API. La ves en el panel, en Integración → Avanzado → Clave del API (dueño o administrador). Mandala en uno de estos encabezados:

Authorization: Bearer TU_CLAVE
# o
X-API-Key: TU_CLAVE

La clave da acceso a tu cuenta: no la publiques en una página web ni en una app. Si se filtró, cambiala en el mismo lugar del panel («Cambiar clave») y actualizá ManyChat.

Respuestas y errores

Las respuestas son JSON con un campo status. Si algo falla, viene error (un código fijo) y a veces detail (texto para entender qué pasó).

HTTPCuándo
200Todo bien (mirá status: puede ser completed, paused, skipped…).
202Recibido: la respuesta se entrega después por ManyChat (delivery: "manychat").
400invalid_request: falta un campo o el JSON está mal.
401unauthorized: falta la clave o no es válida.
404No existe lo pedido (por ejemplo prompt_not_found, task_not_found).
409request_id_conflict: ese request_id todavía se está procesando.
413payload_too_large: el cuerpo pasa el límite.
5xxError temporal (de OpenAI o nuestro). Se puede reintentar con el mismo request_id.

Responder con IA

POST/v1/generate

Manda el mensaje de un contacto y recibe la respuesta de la IA con el prompt publicado de tu cuenta. Monkeia guarda la memoria de cada conversación, aplica tus reglas (pausa al responder una persona, fuera de horario, palabras clave) y usa tu cuenta de OpenAI.

Cuerpo

CampoDescripción
user_idobligatorioId del contacto (en ManyChat: {{Contact Id}}).
messageobligatorioLo que escribió el contacto (hasta 8000 caracteres). Si trae enlaces de imagen, PDF o audio, la IA los lee.
channelwhatsapp (por defecto), instagram, messenger, telegram, tiktok.
automation_idUna automatización guardada en el panel: define canal, entrega, flujo, campos a llenar y espera para agrupar mensajes.
delivery"manychat": responde 202 al instante y Monkeia le manda la respuesta al contacto por ManyChat. Sin esto, la respuesta vuelve en el HTTP.
flow_nsCon delivery: "manychat": llena los campos y dispara ese flujo en vez de mandar el texto.
request_idId único del mensaje. Si ManyChat reintenta, devolvemos la misma respuesta sin volver a llamar a la IA.
sourceDe dónde viene: dm, story_reply, story_mention, comment, reel_comment, ad.
source_contextTexto del origen (por ejemplo, el nombre del anuncio o el texto de la historia).

Ejemplo

curl -X POST https://apikey.monkeia.com/v1/generate \
  -H "Authorization: Bearer TU_CLAVE" \
  -H "Content-Type: application/json" \
  -d '{ "user_id": "123456", "message": "Hola, ¿tienen cupo mañana?", "channel": "whatsapp" }'

Respuesta (200)

{
  "status": "completed",
  "output_text": "{\"mensaje\":\"¡Hola! Sí, mañana tenemos…\",\"status\":\"Conversando\"}",
  "message": "¡Hola! Sí, mañana tenemos…",
  "json": { "mensaje": "¡Hola! Sí, mañana tenemos…", "status": "Conversando" },
  "conversation_id": "…",
  "request_id": null,
  "usage": { "input_tokens": 812, "output_tokens": 64 }
}
statusQué significa
completedHay respuesta. message es el texto para el contacto; si tu prompt responde JSON, viene completo en json.
pausedLa IA está pausada para este contacto (lo atiende una persona): no se manda nada.
supersededLlegó otro mensaje del mismo contacto mientras se esperaba para agrupar: responde el último.
skippedNo había nada que responder (por ejemplo, un mensaje sin texto).
failedNo se pudo: mirá error (openai_not_connected, prompt_not_found, provider_rejected…).

Eventos (bots de botones)

POST/v1/events

Para bots de ManyChat con botones, sin IA (o los pasos con botones antes de la IA). Mandá un evento en cada paso importante del flujo: Monkeia guarda el contacto con sus datos, lo cuenta en el Embudo, deja una línea en su conversación y, si configuraste una etapa para ese paso, lo mueve en Ventas.

Cuerpo

CampoDescripción
subscriber_idobligatorioId del contacto ({{Contact Id}}). También se acepta user_id.
eventobligatorioNombre del paso, por ejemplo "Eligió curso". El primero que llega con un nombre nuevo crea el paso solo.
name, phone, emailDatos del contacto ({{Full Name}}, {{Phone}}, {{Email}}).
fieldsTus datos propios, como objeto: { "curso": "{{curso}}", "sede": "{{sede}}" }. Se suman a la ficha del contacto y aparecen como columnas en Contactos. Valores vacíos o {{variables}} sin llenar se ignoran.
channelwhatsapp (por defecto), instagram, messenger.

Ejemplo

{
  "subscriber_id": "{{Contact Id}}",
  "event": "Eligió curso",
  "name": "{{Full Name}}",
  "phone": "{{Phone}}",
  "fields": { "curso": "{{curso}}", "sede": "{{sede}}" }
}

Respuesta (200)

{ "status": "ok", "contact_id": "…", "conversation_id": "…", "event": "eligio_curso", "moved_to_stage": null }

Hasta 60 pasos distintos por cuenta y 40 campos por evento. Un contacto que repite un paso cuenta una sola vez en el embudo.

Distancia y tiempo (Google Maps)

POST/v1/route

Kilómetros y minutos en carro entre dos puntos. Acepta los enlaces de Google Maps o Waze que manda el cliente (también los cortos maps.app.goo.gl), coordenadas o direcciones escritas. Activalo en Integración → Google Maps. Con Maps activado, la IA también tiene la herramienta calcular_ruta para usarla sola durante la conversación.

CampoDescripción
originobligatorioEnlace de Maps/Waze, "9.93,-84.08" o dirección.
destinationobligatorioIgual que origin.
// 200
{ "status": "ok", "distance_km": 23.5, "minutes": 31 }

Sin clave propia se usa la de Monkeia con un tope de rutas por mes (429 maps_limit al llegar). Otros errores: 403 maps_disabled, 400 bad_origin / bad_destination, 404 no_route.

Tareas de IA

POST/v1/tasks/{slug}

Una llamada a la IA sin memoria para resumir, clasificar o sacar datos. Las tareas (instrucciones y slug) se crean en el panel, en Tareas de IA.

CampoDescripción
inputEl texto a procesar (hasta 20 000 caracteres).
variablesObjeto: reemplaza {{nombre}} en las instrucciones de la tarea.
user_id, channelEl contacto: para leer su conversación o entregarle el resultado por ManyChat.
include_conversationtrue: suma los últimos mensajes de la conversación del contacto.
delivery"http" (por defecto) o "manychat": responde 202 y llena monkeia_task_result (y un campo por cada clave si la IA responde JSON).
flow_nsCon delivery: "manychat": después de llenar los campos, dispara ese flujo.
// 200
{ "status": "completed", "output_text": "…", "json": { … }, "message": "…", "missing_variables": [], "usage": { … } }

Conversaciones

Para controlar la conversación de un contacto desde ManyChat. Cuerpo: { "user_id": "{{Contact Id}}", "channel": "whatsapp" }.

EndpointQué hace
POST /v1/conversations/resetEmpieza una memoria nueva (la anterior queda guardada en el panel).
POST /v1/conversations/contextLe da información a la IA sin responder. Agregá "content": "…".
POST /v1/conversations/pauseLa IA deja de responder a este contacto (lo atiende una persona).
POST /v1/conversations/resumeLa IA vuelve a responder.

Configurar en ManyChat

  1. En el flujo, agregá Acción → Solicitud externa (External Request), tipo POST.
  2. URL: https://apikey.monkeia.com/v1/generate (IA) o https://apikey.monkeia.com/v1/events (bot de botones).
  3. Encabezados: Authorization = Bearer TU_CLAVE.
  4. Cuerpo: el JSON del endpoint, con las variables de ManyChat (botón { }).
  5. Tocá Probar la solicitud: con IA tenés que ver "status": "completed" (o queued con delivery: "manychat"); con eventos, "status": "ok".

En el panel, Integración y Embudo tienen el texto listo para copiar con tu URL y tu clave.

Límites y buenas prácticas

  • Cuerpo: hasta 100 KB en /v1/generate y /v1/tasks; 32 KB en /v1/events.
  • ManyChat espera unos 10 segundos por respuesta: si tu prompt usa herramientas o tarda, usá delivery: "manychat".
  • Mandá un request_id único por mensaje para que los reintentos no dupliquen respuestas.
  • Guardá la clave solo en ManyChat o en tu servidor.
  • ¿Dudas o algo no anda? Escribinos desde Soporte en el panel.