Conversaciones
| Tool | Endpoint REST | Anotaciones |
|---|---|---|
search_workspace_conversations | POST /v1/search/conversations | escritura opcional, no destructiva |
list_conversations | GET /v1/conversations | lectura, idempotente |
get_conversation | GET /v1/conversations/{id} | lectura, idempotente |
update_conversation | PATCH /v1/conversations/{id} | escritura, no destructiva |
search_workspace_conversations
Busca conversaciones por texto, significado o ambos, con filtros avanzados, proyección de campos, analítica y exportación CSV. Fusiona ambas señales con Reciprocal Rank Fusion (RRF) y deduplica los fragmentos semánticos por conversación.
| Campo | Tipo | Default | Descripción |
|---|---|---|---|
workspace | string | — | ID del workspace. |
query | string, máx. 2000 | "*" | Consulta textual; también alimenta la búsqueda semántica si no hay variantes. |
semantic_queries | string o string[] | — | Una consulta semántica o hasta 5 variantes. |
mode | hybrid, lexical o semantic | hybrid | Usa ambas ramas, sólo búsqueda léxica o sólo búsqueda semántica. |
filters | object | {} | Rango de fechas, etiquetas, plataformas, tópicos, estados, agentes, canales, dueños y otros filtros. |
page | integer ≥ 1 | 1 | Página solicitada. |
page_size | integer 1-100 | 10 | Resultados por página. |
candidate_limit | integer 25-1000 | 250 | Ventana fija de candidatos que se fusionan antes de paginar. |
semantic_score_threshold | number 0-2 | 0.8 | Distancia semántica máxima; menor significa una coincidencia más estricta. |
ranking | object | 0.5/0.5, rrf_k: 60 | Pesos léxico y semántico, y constante RRF. |
response | object | compacta | Campos y metadatos que se regresarán. |
export_csv | boolean u object | false | Crea un CSV privado con URL firmada por 7 días. |
Los filtros disponibles dentro de filters son:
start_date, end_date, date_field, tags, platforms, topics, statuses, agents,
channel_ids, operations, owner_ids, conversation_ids, client_ids, phone_numbers,
has_phone, is_finished tags puede ser un string/lista o { any, all, none }. Los demás filtros de texto aceptan un
string o una lista de hasta 50 valores. El rango predeterminado cubre los últimos 90 días según lastUpdate; usa date_field: "creationDate" para filtrar por creación.
Mantener compacto el contexto
La respuesta predeterminada incluye sólo:
id, contactName, platform, topic, tags, lastUpdate, snippet,
conversationUrl, score, sources Usa response.fields para elegir entre:
id, conversationId, contactName, phoneNumber, email, platform, topic, tags,
status, agent, channelId, clientId, operation, owners, isFinished, creationDate,
lastUpdate, snippet, messages, conversationUrl, contactUrl, score, sources, scores response.max_snippet_chars acepta 40-2000 y max_content_chars acepta 100-10000. También
puedes desactivar include_results, activar include_analytics, solicitar include_engine_metadata o crear un searchId temporal con create_search_cache.
messages contiene el pasaje coincidente disponible, no el historial completo de la conversación.
El texto que ve el modelo es un preview compacto de hasta 10 resultados y 7 columnas; nunca coloca messages en esa tabla. La respuesta JSON completa, con todos los campos que pediste,
queda disponible en structuredContent.
Ejemplo
{
"name": "search_workspace_conversations",
"arguments": {
"query": "clientes que quieren cancelar por cobro duplicado",
"mode": "hybrid",
"filters": {
"start_date": "2026-07-01",
"tags": { "any": ["cancelación", "facturación"] },
"platforms": ["whatsapp"]
},
"page_size": 10,
"response": {
"fields": ["id", "contactName", "topic", "snippet", "score", "sources"]
}
}
} Para crear un archivo sin llenar el contexto con resultados:
{
"name": "search_workspace_conversations",
"arguments": {
"query": "solicitud de cancelación",
"response": { "include_results": false },
"export_csv": {
"fields": ["id", "contactName", "phoneNumber", "topic", "lastUpdate"],
"max_rows": 500
}
}
} El preview agrega un enlace de descarga cuando existe export.url. La anotación del tool no es
de sólo lectura porque export_csv y create_search_cache son escrituras opt-in; la búsqueda por
sí sola no modifica conversaciones.
Las exportaciones con snippet o messages admiten hasta 100 filas; sin esos campos admiten hasta
1000, siempre dentro de candidate_limit.
totalRelation: "exact" sólo aparece en una búsqueda léxica no truncada. En resultados híbridos
o semánticos es lower_bound; revisa también truncated y warnings. Si una rama no está
disponible, la otra puede continuar.
Consulta el contrato completo del endpoint para ver todos los campos, límites y la respuesta.
list_conversations
Lista conversaciones del workspace agrupadas. Cada resultado trae el id único del hilo, que debe
usarse para obtenerlo o actualizarlo.
id es el ID canónico del documento, conversationId identifica el hilo de chat y clientId identifica al cliente. Un cliente puede tener varios hilos. canSendDirectMessage solo puede ser false en WhatsApp, Instagram y Messenger/Facebook y se
calcula desde el último mensaje del usuario; en chats internos de Platica siempre es true.
| Campo | Tipo | Default | Descripción |
|---|---|---|---|
limit | 1-200 | 50 | Conversaciones por workspace. |
pageToken | string | — | Cursor nextPageToken de la respuesta anterior. Forma recomendada de paginar; no se combina con offset. |
offset | ≥ 0 | 0 | Paginación heredada. Máximo 100000. |
channelId | string | — | Filtra por canal específico. |
clientId | string | — | Filtra por cliente atribuido. |
agentId | string | — | Filtra por agente principal. |
sortBy | "lastUpdate" \| "creationDate" | lastUpdate | |
sortDirection | "asc" \| "desc" | desc | |
tags | string[] (máx 10) | — | Filtra por etiquetas. |
dateFilter | objeto | — | { type: "specific"\|"range", date \| startDate \| endDate }. |
get_conversation
Obtiene una conversación por su id canónico, incluyendo todo el historial. Busca en todos los
workspaces de la API Key. El argumento conversationId conserva el comportamiento legacy
(teléfono/identificador compartido) y puede devolver varios hilos; para agrupar por cliente usa list_client_conversations.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | sí¹ | ID único del hilo (recomendado). |
conversationId | string | sí¹ | Fallback legacy: conversationId o teléfono. |
channelId | string | no | Restringe a un canal específico. |
¹ Envía id o conversationId.
update_conversation
Actualiza dueños (owners) y/o estado (status) de una conversación exacta. Usa id; el argumento conversationId queda disponible como fallback legacy y puede afectar varios hilos.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | sí¹ | ID único del hilo (recomendado). |
conversationId | string | sí¹ | Fallback legacy: conversationId o teléfono. |
workspace | string | si multi-ws | ID del workspace. |
channelId | string | no | Limita a un canal. |
owners | string[] (emails) | uno de | Nueva lista de dueños. |
status | "active" \| "finished" \| "expired" \| "spam" | uno de | Nuevo estado. |
¹ Envía id o conversationId.
En chats internos, status: "active" reabre el hilo. También se reactiva automáticamente cuando send_chat_message recibe otro mensaje para su conversationId chat_*.
Ejemplo
{
"name": "update_conversation",
"arguments": {
"id": "conversation_doc_id",
"status": "finished",
"owners": ["ana@miempresa.com"]
}
}