Pipeline de API: ejecutar un widget Cabi.Chat con alojamiento propio y tu propio programa
Índice: Pipelines de API — índice
Objetivo: tu propio programa responde a las personas en las salas de un widget Cabi.Chat: un script, un servicio de soporte o tu propio asistente de IA, como Claude Code. Cabi.Chat da al widget un token que funciona como el token de un bot de Telegram; la IA de Cabi.Chat no responde. Qué es un widget y quién puede llegar a él: Cabi.Chat Oracles — widget Cabi.Chat
Pasos
1. Crear.
POST /v0/my/oracles
Idempotency-Key: widget-mine-1
{"kind": "cabi_widget", "hosting": "self", "title": "My assistant", "project": "<project nonce>"}
→ {"nonce": "470000000000000004", "card_type": "oracle", "kind": "cabi_widget",
"status": "STOPPED", "token": "…", …}
token: se muestra solo en esta respuesta. Guárdalo en la configuración de tu programa, nunca en una tarjeta ni en una agenda.agenda: opcional. Indícala solo si tu programa también llama a la API de Cabi.Chat como esa agenda, con el token enAuthorization: Bearer <token>: Cabi.Chat API — Apps- Quién puede hablar con él:
visibility,publicity,permissions, como en cualquier widget; Private (solo tú) por defecto. topics_in_private:truepor defecto: el chat privado de una persona con el widget puede tener hilos (temas), como «Threaded mode» en @BotFather. Cámbialo después conPATCH(solo el dueño).
2. Apunta tu programa a la Bot API de Cabi.Chat con ese token. Cada petición va a https://api.cabi.chat/bot<token>/<method>, con la misma forma que en Telegram:
GET https://api.cabi.chat/bot<token>/getMe
GET https://api.cabi.chat/bot<token>/getUpdates?timeout=50
POST https://api.cabi.chat/bot<token>/sendMessage {"chat_id": <chat id>, "text": "…"}
Recibe las actualizaciones por long polling o por un webhook que fijas con setWebhook, y responde con los métodos habituales. Métodos admitidos: Spectral — plugins mediante el emulador de bots de Telegram
Archivos: getFile da un file_path; descárgalo de https://api.cabi.chat/file/bot<token>/<file_path>.
3. Conversar. Cada persona que abre el widget recibe una sala con él: un chat privado con tu widget, como en Telegram. Sus mensajes llegan como actualizaciones con chat.type private y chat.id igual al id de usuario de la persona; lo que tu programa envía a ese chat aparece en la sala.
- Los ids de usuario son cortos y estables, en el rango que esperan los clientes de Telegram (52 bits); un id de usuario no es el nonce del proyecto de la persona. Los chats abiertos antes conservan sus ids de chat.
- Con
topics_in_privateactivado,getMemuestrahas_topics_enabledyallows_users_to_create_topics, y los hilos funcionan en el chat privado como en Telegram: un mensaje en un hilo traemessage_thread_id; envía con el mismomessage_thread_idpara responder en ese hilo. - Una sala de grupo a la que se añade tu widget es un
supergroupcon temas de foro; allí también funcionan los hilos.
Abrir una sala: Pipeline de API: configurar un widget Cabi.Chat que lleva la IA de Cabi.Chat, paso 4.
Ejemplo: Claude Code
Claude Code puede hablar contigo a través de un widget Cabi.Chat: se ejecuta en tu propio equipo con tu propio inicio de sesión, y Cabi.Chat es solo la superficie de chat. El plugin oficial de canal de Telegram para Claude Code habla la Bot API de Telegram, así que funciona con cualquier raíz de Bot API compatible con Telegram, también https://api.cabi.chat. El ajuste del plugin que lo apunta a otra raíz de Bot API está pendiente en el propio plugin; cuando tu versión lo tenga:
- En Claude Code:
/plugin install telegram@claude-plugins-official, y luego/telegram:configure <token del widget>. - Fija la raíz de Bot API del plugin en
https://api.cabi.chat. - Inicia Claude Code con el canal:
claude --channels plugin:telegram@claude-plugins-official. - Abre la sala del widget en Cabi.Chat y escríbele; empareja con
/telegram:access pair <code>y ciérralo con/telegram:access policy allowlist, para que solo tú puedas dirigir tu sesión.
Tu sala con el widget es un chat privado, así que el emparejamiento, los comandos y las solicitudes de permiso funcionan como con un bot de Telegram; con topics_in_private activado, puedes llevar hilos separados en ella.
Mantén el widget privado para que solo tú puedas abrir su sala.
Reglas
hosting: "self"es solo paracabi_widget; cualquier otro tipo → 400only a cabi widget can be self-hosted.- ¿Perdiste el token?
POST /v0/my/oracles/{nonce}/regenerate-token→{"token": "…", "token_preview": "…"}, el token se muestra una vez; el token anterior deja de funcionar al instante. Solo el dueño. - El token se emite desde la app web o con tu propio token de acceso personal, nunca desde una app que conectaste (403).
- Cabi.Chat no cobra IA por un widget con alojamiento propio; la IA de tu programa es la tuya.
DELETE /v0/my/oracles/{nonce}elimina el widget; su token deja de funcionar.
Superficie de la API
| Endpoint | Para qué | FE | IA / oráculo |
|---|---|---|---|
POST /v0/my/oracles |
Crear el widget, recibir su token una vez | sí (token: no) | tu token |
POST /v0/my/oracles/{nonce}/regenerate-token |
Un token nuevo; el anterior deja de funcionar | no | tu token |
PATCH /v0/my/oracles/{nonce} |
Título, proyecto, visibilidad, agenda, topics_in_private |
sí | sí |
https://api.cabi.chat/bot<token>/<method> |
Recibir y responder como el widget | — | tu programa |
DELETE /v0/my/oracles/{nonce} |
Eliminar | sí | rara vez |