Empezar
Agentes de código y MCP
Si programas con Claude Code, Codex o Cursor, estos son los cuatro pasos para que tu agente mande y reciba WhatsApp con heysteff, , cómo instalar el plugin y las skills, y los comandos para conectar el servidor MCP. En el panel, Configuración → Desarrolladores → Inicio rápido te da el mismo prompt con el nombre y el slug de tu workspace.
Cuatro pasos#
1. Crea una API key#
En el panel, Configuración → Desarrolladores → API Keys. Déjala en una variable de entorno: no la pegues en el código ni en el chat de tu agente. Los scopes están en Autenticación.
export HEYSTEFF_API_KEY=sk_live_...2. Instala el CLI e inicia sesión#
heysteff login te pide la key sin mostrarla, la prueba contra la API y la guarda en tu máquina. Todos los comandos están en CLI.
npm install -g @heysteff/cli
heysteff login3. Conecta un canal#
En el panel, Configuración → Canales: tu número de WhatsApp, Instagram, Messenger, SMS o correo. Los mensajes de la API salen por ahí. ¿Todavía sin número? Con una key sk_test_ pruebas la API por el número compartido de heysteff, solo con los teléfonos que unas al sandbox.
4. Pásale el contexto a tu agente#
Pega este prompt en tu agente de código. Revisa tu repositorio y propone el paso mínimo para mandar y recibir un WhatsApp real. Cambia <nombre de tu workspace> y <slug> por los de tu workspace.
Vas a integrar este proyecto con heysteff, una plataforma de mensajería (WhatsApp, Instagram, Messenger, SMS y correo) con API REST.
Contexto
- Workspace de heysteff: <nombre de tu workspace> (slug: <slug>)
- API: https://app.heysteff.com/api/v1, con el header Authorization: Bearer $HEYSTEFF_API_KEY.
- La API key ya está en la variable de entorno HEYSTEFF_API_KEY. Nunca la escribas en el código, en un archivo del repositorio ni en esta conversación.
- Documentación para agentes: https://app.heysteff.com/api/v1/llms-full.txt (léela antes de escribir código), la especificación https://app.heysteff.com/api/v1/openapi.json y las reglas de https://developers.heysteff.com/AGENTS.md.
- SDK de TypeScript: @heysteff/sdk. CLI: @heysteff/cli (comando heysteff).
Qué necesito
1. Revisa el repositorio: lenguaje, framework, cómo se manejan las variables de entorno y si ya hay algo de mensajería.
2. Propón el paso mínimo para mandar un WhatsApp real y recibir la respuesta en este proyecto. Espera mi visto bueno antes de implementarlo.
3. Para enviar, usa POST /v1/messages (en TypeScript, heysteff.messages.send) con un header Idempotency-Key.
4. Para recibir, crea un endpoint para el webhook message:received: verifica la firma X-Heysteff-Signature sobre el cuerpo crudo, deduplica por X-Heysteff-Delivery-Id y responde 2xx enseguida. El secreto del webhook va en HEYSTEFF_WEBHOOK_SECRET.
5. Para probar el webhook en local, usa heysteff webhooks trigger http://localhost:<puerto>/<ruta> --secret <secreto>.
6. Si la key empieza con sk_test_, todo sale por el sandbox de heysteff y solo puedes escribirle a los teléfonos unidos al sandbox.
No inventes endpoints ni campos: si algo no está en llms-full.txt, dímelo.Conectar tu propia IA#
Para que tu propio modelo atienda a los clientes: el webhook message:received llega a tu servidor, tu modelo arma la respuesta y la mandas con POST /v1/messages. Cuando no sepa o no deba seguir, POST /v1/conversations/{id}/escalate pasa la conversación a una persona del equipo, que responde desde la bandeja de heysteff, y pausa el bot. El flujo completo está en Conecta tu propia IA.
Este prompt le pide a tu agente que te pregunte primero qué hace tu negocio, que pruebe con tu propia conversación y que no responda a clientes reales sin tu permiso:
Quiero conectar mi propio agente de IA a heysteff para que atienda a los clientes de mi negocio por WhatsApp y los demás canales conectados. Actúa como mi ingeniero de integración y avanza paso a paso.
Contexto
- Workspace de heysteff: <nombre de tu workspace> (slug: <slug>)
- API: https://app.heysteff.com/api/v1, con el header Authorization: Bearer $HEYSTEFF_API_KEY.
- La API key ya está en la variable de entorno HEYSTEFF_API_KEY. Nunca la escribas en el código, en un archivo del repositorio ni en esta conversación.
- Documentación para agentes: https://app.heysteff.com/api/v1/llms-full.txt (léela antes de escribir código), la especificación https://app.heysteff.com/api/v1/openapi.json y las reglas de https://developers.heysteff.com/AGENTS.md.
- SDK de TypeScript: @heysteff/sdk. CLI: @heysteff/cli (comando heysteff).
Antes de escribir código
1. Pregúntame qué hace mi negocio, qué debe resolver el agente solo y en qué casos tiene que entrar una persona del equipo.
2. Verifica el acceso con heysteff whoami (o GET /v1/conversations?limit=1). Nunca me pidas que pegue una API key ni un secreto en esta conversación: si falta, dime cómo dejarlo en la variable de entorno.
3. Revisa si ya hay un canal conectado con heysteff conversations list --limit 5. Si no hay, recomiéndame conectar WhatsApp en el panel (Configuración → Canales) o probar primero con el sandbox y una key sk_test_.
4. Revisa el repositorio y recomiéndame el setup mínimo. Espera mi visto bueno.
La integración
- Un endpoint para el webhook message:received: verifica X-Heysteff-Signature sobre el cuerpo crudo, deduplica por X-Heysteff-Delivery-Id, responde 2xx de inmediato y procesa en segundo plano.
- El webhook ya trae a quién responder (channel, external_user_id y channel_connection_id) y bot_paused. Si bot_paused es true, una persona tiene la conversación: no respondas. Lee el historial con GET /v1/conversations/{id}/messages.
- Pasa el historial y mis instrucciones a mi modelo y responde con POST /v1/messages (heysteff.messages.send), con un Idempotency-Key derivado del mensaje recibido para no responder dos veces.
- Las instrucciones del agente van en un archivo del repositorio, no dentro del código: qué hace el negocio, el tono, qué puede y qué no puede prometer, y cuándo pasar a una persona.
- Traspaso a una persona: cuando el agente no sepa o no deba seguir, que le diga al cliente que lo atiende alguien del equipo y llame a POST /v1/conversations/{id}/escalate (heysteff.conversations.escalate) con el motivo en reason. Eso pausa el bot, abre el caso en la bandeja y avisa a mi equipo; desde ahí los avisos llegan con bot_paused en true. Cuando el equipo termina, la conversación vuelve con POST /v1/conversations/{id}/bot y paused en false, o con POST /v1/conversations/{id}/resolve. No guardes ese estado de tu lado: consúltalo con GET /v1/conversations/{id}. La key necesita conversations:write.
- Si el agente de heysteff está encendido (Agente → Perfil en el panel), apágalo antes de activar el tuyo, o responderán los dos.
Pruebas
- Prueba primero con mi propia conversación: le escribo al número desde mi teléfono (o usa heysteff webhooks trigger en local) y revisamos la respuesta.
- No respondas a clientes reales sin mi permiso explícito: deja la respuesta limitada a mi teléfono de prueba hasta que te diga que la active para todos.
No inventes endpoints ni campos: si algo no está en llms-full.txt, dímelo.Plugin para Claude Code#
El plugin heysteff deja todo listo de una vez: registra el servidor MCP con la dirección fija, suma las skills de abajo, agrega el comando /heysteff:setup (MCP, CLI y API key sin escribir la key en ningún archivo) y, al empezar cada sesión, corre heysteff whoami si tienes la CLI, sin mostrar la key. También trae una regla de seguridad: antes de mandar algo a una persona real, el agente te confirma el destinatario y el texto.
/plugin marketplace add heysteff-com/agent-plugins
/plugin install heysteff@heysteffDespués escribe /mcp, elige heysteff y autoriza. En el mismo repositorio hay equivalentes para Cursor (.cursor/mcp.json y la regla heysteff-safety.mdc) y para Codex (config.toml y AGENTS.md).
Skills de heysteff#
Tres skills con su propio SKILL.md y scripts sin dependencias (Node 20+) que usan solo la API v1. Leen la key de HEYSTEFF_API_KEY, nunca la imprimen, y los scripts que mandan algo no hacen nada sin --confirm.
- heysteff-integrate: API key, mandar por cualquier canal con
POST /v1/messages, webhooks, clientes y links de conexión. - heysteff-automate: flujos disparados por API, campañas (envíos masivos) y plantillas de WhatsApp.
- heysteff-observe: estado de mensajes, entregas de webhooks, reintentos, logs de la API y uso del plan.
Para instalarlas en Claude Code, Codex, Cursor u otro agente compatible:
npx skills add heysteff-com/agent-skillsLa skill general de heysteff (API v1, SDK, CLI, MCP, webhooks, sandbox y errores en un solo archivo) sigue disponible. Para instalarla en tu usuario:
mkdir -p ~/.claude/skills/heysteff && curl -fsSL https://developers.heysteff.com/skills/heysteff/SKILL.md -o ~/.claude/skills/heysteff/SKILL.mdPara un solo proyecto, guárdala en .claude/skills/heysteff/SKILL.md dentro del repositorio. En Cursor, Codex u otro agente, agrégala como regla o como contexto del proyecto (por ejemplo, enlázala desde tu AGENTS.md).
Servidor MCP#
El servidor MCP deja que tu agente configure el workspace (agente, canales, flujos, campañas, bandeja) desde el chat. La dirección es la misma para todos: https://mcp.heysteff.com/mcp. No usa API keys: autorizas con OAuth en el navegador y, en la pantalla de autorización, eliges el workspace. El permiso queda ligado a ese workspace y no sirve en otro; para usar otro, vuelve a autorizar y elígelo. Autoriza una cuenta con rol Dueño. En los workspaces developer el MCP viene activo; en los demás se activa en Configuración → MCP. Las direcciones antiguas con ?tenant= siguen funcionando.
Claude Code#
Después, en Claude Code, escribe /mcp y elige heysteff para autorizar. Si instalaste el plugin, el servidor ya está registrado.
claude mcp add --transport http heysteff "https://mcp.heysteff.com/mcp"Codex#
codex mcp login abre el navegador para autorizar.
codex mcp add heysteff --url "https://mcp.heysteff.com/mcp"
codex mcp login heysteffCursor#
Guarda el archivo en la raíz del proyecto (o en ~/.cursor/mcp.json para todos los proyectos) y autoriza desde la configuración de MCP de Cursor. Cualquier otro cliente que hable MCP por HTTP usa la misma dirección.
{
"mcpServers": {
"heysteff": {
"url": "https://mcp.heysteff.com/mcp"
}
}
}