waiaconnect

Documentación / Esencial

Recibir el historial de convivencia

GET /v1/connections/:id/history

Markdown

Al conectar un número por convivencia, antes de abrir la ventana de Meta, el negocio contesta si quiere que le entreguemos el historial de sus conversaciones: hasta 6 meses, los mensajes de las dos partes, sin grupos. El historial sigue en su teléfono: no se borra ni se mueve nada de ahí. Si contesta que sí, lo pedimos a Meta (se puede una sola vez, al conectar; Meta también le pregunta en la app si lo comparte), lo guardamos cifrado hasta 7 días y te lo entregamos de dos formas, lo primero que pase:

· Por webhook: eventos history.batch con hasta 500 mensajes cada uno (en la forma de Meta, como message.received, con contact y direction), firmados igual que los demás, y un history.completed cuando no queda nada. Van por una cola aparte que no demora tus mensajes en vivo: un historial grande puede tardar horas.
· Por la API, si todavía no tenés webhook: GET /v1/connections/{id}/history te da las tandas en orden (limit 1 a 5, after = el nextCursor anterior). Leer no borra: cuando guardaste una tanda, confirmala con POST /v1/connections/{id}/history/{batchId}/ack.

Cada tanda se borra apenas se entrega (tu 2xx o tu confirmación); lo que no se entrega se borra a los 7 días igual. No cuenta como tráfico ni consume cuota. Si el negocio contestó que no, no pedimos nada a Meta. Si un día nos quedáramos sin espacio, dejamos de guardar historial nuevo y te avisamos con history.dropped.

# 1) read a page (reading does NOT delete)
curl "https://api.waiaconnect.com/v1/connections/conn_…/history?limit=1" -H "Authorization: Bearer wc_live_YOUR_API_KEY"
# → { "data": [ { "batchId": "hb_…", "count": 500, "messages": [ … ] } ], "hasMore": true, "nextCursor": 1 }

# 2) once you stored it, confirm it → deleted from WAIA Connect at once
curl -X POST "https://api.waiaconnect.com/v1/connections/conn_…/history/hb_…/ack" -H "Authorization: Bearer wc_live_YOUR_API_KEY"
# 3) next page: ?after=1 (the nextCursor) — until hasMore is false
const H = { "Authorization": "Bearer wc_live_YOUR_API_KEY" };
let after = 0, hasMore = true;
while (hasMore) {
  const page = await (await fetch(`https://api.waiaconnect.com/v1/connections/conn_…/history?limit=1&after=${after}`, { headers: H })).json();
  for (const batch of page.data) {
    await saveMessages(batch.messages);            // your storage; dedupe on batch.batchId
    await fetch(`https://api.waiaconnect.com/v1/connections/conn_…/history/${batch.batchId}/ack`, { method: "POST", headers: H });
  }
  hasMore = page.hasMore;
  after = page.nextCursor;
}
<?php
$h = ["Authorization: Bearer wc_live_YOUR_API_KEY"];
$after = 0;
do {
  $ch = curl_init("https://api.waiaconnect.com/v1/connections/conn_…/history?limit=1&after=" . $after);
  curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $h]);
  $page = json_decode(curl_exec($ch), true);
  foreach ($page["data"] as $batch) {
    save_messages($batch["messages"]); // your storage; dedupe on batchId
    $ack = curl_init("https://api.waiaconnect.com/v1/connections/conn_…/history/" . $batch["batchId"] . "/ack");
    curl_setopt_array($ack, [CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => $h]);
    curl_exec($ack);
  }
  $after = $page["nextCursor"];
} while ($page["hasMore"]);
import requests
H = {"Authorization": "Bearer wc_live_YOUR_API_KEY"}
after, has_more = 0, True
while has_more:
    page = requests.get("https://api.waiaconnect.com/v1/connections/conn_…/history", headers=H, params={"limit": 1, "after": after}).json()
    for batch in page["data"]:
        save_messages(batch["messages"])  # your storage; dedupe on batchId
        requests.post(f"https://api.waiaconnect.com/v1/connections/conn_…/history/{batch['batchId']}/ack", headers=H)
    has_more, after = page["hasMore"], page["nextCursor"]

Deduplicá por batchId: una tanda puede llegarte dos veces (por ejemplo, si reiniciamos en medio de una entrega).

Si integrás con enlaces de alta, mandá historyDelivery: true|false al crear el enlace si ya le preguntaste a tu cliente; si no, la página se lo pregunta.

history.synced sigue llegando como resumen de cada tanda de Meta (progress: 100 = Meta terminó).