Pipeline de API: escuchar grupos de Telegram para encontrar a quien te necesita: crear y ajustar un radar, trabajar sus coincidencias y hacer el primer contacto (borrador, envío, outreach automático)
Índice: Pipelines de API — índice
Objetivo: oír a las personas que en grupos de Telegram piden lo que ofrece tu proyecto, reunir sus mensajes como coincidencias, ajustar el radar y hacer el primer contacto: un borrador que apruebas tú, o outreach automático de tu oráculo.
Ciclo de vida común a todos los tipos: Pipeline de API: crear, configurar, iniciar, detener, medir y eliminar una campaña de Telegram de cualquier tipo. Grupos: Pipeline de API: enviar tus grupos de Telegram, buscar grupos por palabra clave, lugar o rúbrica, evaluarlos y conectarlos a una campaña. Un radar gratuito de 7 días para un proyecto nuevo: Pipeline de API: recibir un radar inicial gratuito de 7 días para tu proyecto y seguir sus coincidencias
Cómo funciona
Palabras → significado → contacto.
- Palabras. Cada mensaje oído en tus grupos se normaliza (minúsculas, sin puntuación, espacios simples) y se compara con
keyword_groups: cualquier palabra de un grupo (OR), todos los grupos (AND), como subcadenas. Cualquier palabra denot_groupsdescarta el mensaje. Los aciertos se convierten en tarjetas de publicación en Matches («Coincidencias») del radar (se guardan 90 días; los textos idénticos repetidos se guardan una sola vez). - Significado (solo auto). Cuando hay 5 o más coincidencias marcadas como canónicas, cada coincidencia nueva se compara por significado con Canonical (las canónicas) y con Evicted (las excluidas): pasa al contacto automático solo si está lo bastante cerca de las canónicas y más cerca de ellas que de cualquier excluida. Las coincidencias se guardan en todo caso.
- Contacto. Al autor (nunca a un bot) le escribe uno de los oráculos del radar según su agenda, una vez por persona y proyecto. La conversación llega a tu bandeja de entrada como una sala.
Pasos
1. Crear (Paused).
POST /v0/my/campaigns
Idempotency-Key: radar-nails-la-1
{"title": "Nail masters LA", "project_nonce": "<Pro project>",
"keyword_groups": [["manicure", "pedicure", "nails"], ["looking for", "need", "recommend"]],
"not_groups": [["vacancy", "hiring"]],
"tg_groups": ["<preset nonce>"]}
→ {"nonce": "470370000000000001", "card_type": "campaign", "kind": "mtproto_radar",
"status": "Paused", "is_outreach_enabled": false, "is_auto_enabled": false,
"keyword_groups": […], "not_groups": […], "telegram_groups_list": ["<preset nonce>"], …}
kind es mtproto_radar por defecto. La respuesta trae también campos de otros tipos (speed, reactions, batch_*); ignóralos.
2. Iniciar.
POST /v0/my/campaigns/470370000000000001/start
→ {"success": true, "status": "Active", "is_active": true}
El primer inicio crea los espacios del radar y los comparte contigo: Matches (read), Canonical (read + write); después GET /v0/my/campaigns/{nonce} muestra matches_workspace y canonical_matches_workspace (y evicted_matches_workspace tras la primera exclusión). 400 típicos: project needs an active Pro membership to run campaigns, outreach requires oracles assigned, outreach requires an agenda assigned.
3. Leer coincidencias, las más nuevas primero.
GET /v0/my/workspaces/<matches_workspace>?contained_limit=200&contained_offset=0
→ {"contained": [{"card_type": "post", "nonce": "470370000000000101", "snippet": "…",
"source_url": "https://t.me/example_group/17552", "created_at": "…", …}],
"contained_next_offset": 200, …}
Una coincidencia completa (autor, grupo): GET /v0/graph/posts/{nonce} → author_username, source_group, source_group_username, expires_at. Buscar dentro de las coincidencias: POST /v0/search/graph/keyword {"query": "gel", "card_type": "post", "workspace": "<matches_workspace>"}.
4. Ajustar.
- Marca las buenas como canónicas:
POST /v0/my/workspaces/<canonical_matches_workspace>/<post>; desmarca:DELETEen la misma ruta. - Saca las malas (se vuelven ejemplos negativos para el significado):
POST /v0/my/campaigns/{nonce}/matches/evict {"posts": ["<post>", …]}→{"evicted": 2, "evicted_matches_workspace": "…"}. Antes del primer inicio: 400radar has no matches surface yet. - Nuevas exclusiones y luego limpieza de lo acumulado:
PATCH {"not_groups": [[…]]}, despuésPOST …/matches/sweep {"dry_run": true}→{"matched": 46, "evicted": 0}; repite con{"dry_run": false}(un cuerpo vacío también excluye). Sweep revisa las coincidencias más recientes. - Un radar activo recoge en marcha los cambios de palabras clave, exclusiones, grupos y auto. Los cambios en Canonical y Evicted llegan al instante a la comprobación por significado.
5. Primer contacto (opcional). Activa outreach: PATCH {"oracles": ["<oracle or team workspace>"], "agenda": "<swappable agenda>", "is_outreach_enabled": true}.
Una coincidencia cada vez (solo el dueño):
POST /v0/my/campaigns/{nonce}/matches/{post}/draft
{"instructions": "mention the free first consultation"}
→ {"text": "…", "target_username": "…", "oracle_nonce": "…", "model": "…"}
POST /v0/my/campaigns/{nonce}/matches/{post}/outreach
{"text": "<the text you approved>"}
→ {"ok": true}
Cada una puede tardar un par de minutos; si falla, vuelve a intentarlo. 400 típicos: outreach is not enabled on this radar, no oracle available: …, all candidates already outreached for this project, no human outreach candidate in post.
Automático: marca 5 o más como canónicas y luego PATCH {"is_auto_enabled": true}.
6. Seguir los resultados. Las conversaciones son salas en tu bandeja de entrada: Pipeline de API: supervisar las conversaciones de tus oráculos: desactivar o activar el oyente, cerrar un handoff, fijar la agenda de una sala, pedir al oráculo que continúe. performance y sends cuentan publicaciones en grupos, así que en un radar se quedan en cero.
7. Detener, eliminar, compartir. POST …/stop pausa (configuración y coincidencias se conservan); detén antes de DELETE. Compártelo con un enlace (índice, «Compartir con enlaces»): r deja a quien lo reclama leer configuración y estado; w, además, editar palabras clave e iniciar / detener. Matches, Canonical y Evicted son espacios que Cabi.Chat comparte contigo: tu enlace no llega a ellos.
8. De dónde vienen tus coincidencias. Los grupos en los que tu radar oye coincidencias, ordenados: primero los de más coincidencias, luego los de más autores distintos.
GET /v0/my/campaigns/{nonce}/source_groups?days=14&limit=50
→ {"campaign": "470370000000000001", "days": 14,
"groups": [{"nonce": "…", "handle": "tgg.example_group", "title": "…", "members": 13934,
"matches": 41, "authors": 29, "last_seen": "…"}, …]}
days: el periodo contado hacia atrás desde ahora (por defecto 14);limit: cuántos grupos (por defecto 50).- Necesitas lectura en Matches del radar, que tienes como su dueño.
- Guarda el ranking como un espacio:
POST /v0/my/campaigns/{nonce}/source_groups/workspace {"days": 14, "limit": 50}→{"workspace": "…", "title": "<radar title> - target groups", "created": true, "groups": […]}. Un espacio Private tuyo, en el orden del ranking; al volver a llamarlo se actualiza el mismo espacio. Solo con tu propia sesión o token. - Para qué: los grupos donde la gente ya publica lo que tu radar escucha son donde viven esas publicaciones. Pon ese espacio en
tg_groupsde una campaña de anuncios para publicar donde ya están los posts de tu tipo: Pipeline de API: publicar tus publicaciones en grupos a un ritmo marcado por su tráfico y seguir lo enviado y lo borrado
Reglas
- Las palabras clave se comparan tal como se guardan. Escríbelas en minúsculas, sin puntuación (
#,:,-,+), con letras normales y espacios simples:"where can", no"where+can". - Un
keyword_groupsvacío nunca coincide. Elige los grupos que escuchar contg_groups(grupos o presets). - Pro. Iniciar requiere el
project_noncede un proyecto Pro. - Outreach requiere
oraclesy unaagendaintercambiable; sin ellos déjalo desactivado: el radar sigue reuniendo coincidencias. - Auto requiere outreach activado y 5 o más coincidencias canónicas; no se permite al crear (400
enable auto outreach after marking at least 5 canonical matches). Para desactivar outreach, desactiva auto en el mismo PATCH o antes (400auto outreach requires outreach enabled). - Cada primer mensaje (borrador o auto) es una ejecución de IA; su coste aparece en tu gasto de IA: Pipeline de API: ver tu gasto en IA. Precios: link
Superficie de la API
| Endpoint | Para qué | FE | IA / oráculo |
|---|---|---|---|
POST /v0/my/campaigns |
Crear el radar | sí | sí |
GET /v0/my/campaigns, GET /v0/my/campaigns/{nonce} |
Lista; configuración, estado, espacios | sí | sí |
PATCH /v0/my/campaigns/{nonce} |
Palabras clave, exclusiones, grupos, oráculos, agenda, outreach, auto | sí | sí |
POST /v0/my/campaigns/{nonce}/start, /stop |
Iniciar / pausar | sí | sí |
GET /v0/my/workspaces/{matches_workspace} |
Leer coincidencias | sí | sí |
GET /v0/graph/posts/{nonce} |
Detalle de una coincidencia: autor, grupo | sí | sí |
POST /v0/search/graph/keyword con workspace |
Buscar dentro de las coincidencias | sí | sí |
POST / DELETE /v0/my/workspaces/{canonical}/{post} |
Marcar / desmarcar como canónica | sí | sí |
POST /v0/my/campaigns/{nonce}/matches/evict |
Excluir coincidencias (negativas) | sí (Excluir) | sí |
POST /v0/my/campaigns/{nonce}/matches/sweep |
Excluir lo que ahora descartan las exclusiones | sí | sí |
POST /v0/my/campaigns/{nonce}/matches/{post}/draft |
El oráculo redacta un primer mensaje | sí (Borrador de contacto) | la IA propia del usuario |
POST /v0/my/campaigns/{nonce}/matches/{post}/outreach |
Enviar el texto aprobado | sí (Enviar) | la IA propia del usuario |
DELETE /v0/my/campaigns/{nonce} |
Eliminar (detener antes) | sí | rara vez |
POST /v0/my/links, GET /v0/my/links/{link}/grants |
Compartir el radar; quién lo tiene | sí | sí |
GET /v0/my/campaigns/{nonce}/source_groups |
Grupos de donde vienen las coincidencias, ordenados | no | sí |
POST /v0/my/campaigns/{nonce}/source_groups/workspace |
Guardar ese ranking como espacio | no | tu token |