Growth Station
DocumentaçãoAPI (Desenvolvedores)Guias por caso de usoLer as conversas (WhatsApp e E-mail) de um lead

Ler as conversas (WhatsApp e E-mail) de um lead

Liste as conversas de um lead por canal e puxe as mensagens de cada thread para registrar o histórico de contato onde você quiser.

Ler as conversas de um lead

Acesse as trocas de WhatsApp e E-mail do GS Engage e leve o histórico para o seu sistema.

Você quer ter, em outro lugar (um CRM, um data warehouse, uma planilha, um relatório), o histórico completo do que foi conversado com cada lead. As mensagens de WhatsApp e E-mail que acontecem dentro do GS Engage podem ser lidas pela API e copiadas para onde você precisar.

Esta página mostra como fazer isso em dois passos: primeiro você lista as conversas (chamamos de threads), depois puxa as mensagens de cada uma.

Dica

Estas são operações de leitura (GET). Elas não enviam nada, não respondem ninguém e não alteram o lead. É seguro experimentar à vontade — nenhuma mensagem sai para o cliente.

Você vai precisar de uma apiKey (a sua chave de acesso à API). Ela é criada na plataforma em Configurações > Configurações de API e é enviada como parâmetro na própria URL, no formato ?apiKey=SUA_CHAVE.

Sua apiKey é uma senha

Como a chave vai na URL, ela aparece em logs de servidor, no histórico do navegador e em qualquer link compartilhado. Guarde-a numa variável de ambiente e nunca cole em canais públicos (chat, e-mail, tickets).

Se ainda não validou sua chave, dê uma passada rápida pelo Quickstart da API — lá explicamos como confirmar que a chave funciona antes de qualquer outra chamada.

O modelo é simples e tem dois níveis:

graph LR
A["Lead"] --> B["Thread (uma conversa por canal)"]
B --> C["Mensagem"]
B --> D["Mensagem"]
B --> E["Mensagem"]
  • Thread é uma conversa — um fio de diálogo por canal. Um mesmo lead pode ter uma thread de WhatsApp e outra de E-mail.
  • Mensagem é cada troca dentro daquela thread (o que foi enviado e o que foi recebido).

Por isso a leitura acontece em duas etapas: você lista as threads para descobrir quais conversas existem e, com o identificador de cada uma, puxa as mensagens dela.

O que é um endpoint?

Endpoint é só o endereço de uma função da API — a "porta" que você chama para pedir ou enviar dados. Aqui usamos dois: um que lista threads e outro que lista mensagens de uma thread.

1

Liste as conversas (threads)

Comece descobrindo quais conversas existem. Chame GET /api/v1/conversations/threads.

curl "https://api.gsengage.com/api/v1/conversations/threads?apiKey=SUA_CHAVE&limit=20&page=1"

A resposta vem paginada, no formato padrão da API: uma lista em data e um resumo em meta.

{
  "data": [
    {
      "id": "652f1a9c8b3e4c0012a4d7f1",
      "channel": "WHATSAPP",
      "leadId": "651a0b2f4d9c1e0033b8e5a2"
    },
    {
      "id": "652f1b3e8b3e4c0012a4d802",
      "channel": "EMAIL",
      "leadId": "651a0b2f4d9c1e0033b8e5a2"
    }
  ],
  "meta": {
    "limit": 20,
    "count": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1
  }
}

Guarde o id da thread que te interessa — é ele que você usa no próximo passo.

2

Puxe as mensagens de uma thread

Com o id da thread em mãos, peça as mensagens dela em GET /api/v1/conversations/threads/{threadId}/messages.

curl "https://api.gsengage.com/api/v1/conversations/threads/652f1a9c8b3e4c0012a4d7f1/messages?apiKey=SUA_CHAVE&limit=50&page=1"

A resposta traz o conteúdo trocado naquela conversa, também paginado.

{
  "data": [
    {
      "id": "6531c04a8b3e4c0012a4e910",
      "content": "Olá! Vi que você baixou nosso material. Posso ajudar?"
    },
    {
      "id": "6531c07d8b3e4c0012a4e922",
      "content": "Oi! Sim, queria entender os planos."
    }
  ],
  "meta": {
    "limit": 50,
    "count": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1
  }
}

Pronto: essas são as mensagens da conversa, prontas para serem salvas onde você quiser.

As duas chamadas usam a mesma paginação. Você controla o tamanho da página com limit e navega com page.

ParâmetroPara que serveExemplo
limitQuantos itens por páginalimit=50
pageQual página buscar (começa em 1)page=2

No bloco meta da resposta você tem tudo para saber se acabou:

Campo em metaO que significa
limitO tamanho de página que você pediu
countQuantos itens vieram nesta página
totalTotal de itens em todas as páginas
pageA página atual
totalPagesQuantas páginas existem no total

A regra é: continue incrementando page enquanto page for menor que totalPages. Quando chegarem iguais, você leu tudo.

Dica

Você também pode ordenar os resultados com orderBy e orderDirection (asc para crescente, desc para decrescente) — útil para trazer as mensagens em ordem cronológica.

Este é o cenário mais comum: você quer que o histórico de conversas do GS Engage também apareça no seu CRM, num data warehouse ou num relatório. A lógica é sempre a mesma.

1

Liste todas as threads

Percorra GET /api/v1/conversations/threads página a página até page alcançar totalPages. Assim você tem todas as conversas, de todos os canais.

2

Para cada thread, puxe as mensagens

Use o id de cada thread em GET /api/v1/conversations/threads/{threadId}/messages, também paginando até o fim.

3

Grave no seu sistema

Salve as mensagens vinculadas ao leadId da thread. Numa próxima execução, você repete o processo e atualiza só o que for novo.

Um esqueleto em Python que amarra as duas chamadas:

import os
import requests

BASE = "https://api.gsengage.com/api/v1"
API_KEY = os.environ["GSENGAGE_API_KEY"]  # nunca escreva a chave no código

def get_pages(path):
    """Percorre todas as páginas de um endpoint paginado e devolve os itens."""
    page = 1
    while True:
        resp = requests.get(
            f"{BASE}{path}",
            params={"apiKey": API_KEY, "limit": 50, "page": page},
        )
        resp.raise_for_status()
        body = resp.json()
        for item in body["data"]:
            yield item
        meta = body["meta"]
        if meta["page"] >= meta["totalPages"]:
            break
        page += 1

# 1) Todas as conversas
for thread in get_pages("/conversations/threads"):
    # 2) Todas as mensagens de cada conversa
    for message in get_pages(f"/conversations/threads/{thread['id']}/messages"):
        # 3) Aqui você grava no seu sistema, vinculando ao lead
        salvar_no_seu_sistema(thread["leadId"], thread["channel"], message)

Cuidado com o rate limit

A API permite 200 requisições de leitura por minuto (janela fixa de 60s). Como este caso faz muitas chamadas seguidas, é fácil esbarrar no limite quando há muitas threads. Rate limit é o teto de chamadas que você pode fazer num intervalo.

Se passar do teto, a API responde com 429 e alguns cabeçalhos que te dizem exatamente quanto esperar:

CabeçalhoO que informa
Retry-AfterQuantos segundos esperar antes de tentar de novo
X-RateLimit-LimitSeu teto de requisições na janela
X-RateLimit-RemainingQuantas ainda restam
X-RateLimit-ResetQuando a janela reinicia
Fazer
  • Respeite o Retry-After e faça backoff exponencial (espere um pouco mais a cada nova tentativa).
  • Use um limit maior (ex.: 50) para trazer mais itens por chamada e reduzir o número de requisições.
Não fazer
  • Não fique repetindo a mesma chamada em looping imediato — isso só prolonga o bloqueio.
  • Não puxe tudo o tempo todo — grave o que já leu e, nas próximas execuções, atualize só o que mudou.

As mensagens de erro do GS Engage já vêm em português — leia-as com atenção, elas costumam dizer o que corrigir.

CódigoO que houveComo resolver
401apiKey ausente ou inválidaConfira se você incluiu ?apiKey=... na URL e se a chave está correta
404Thread não encontradaVerifique o threadId — ele precisa ter vindo da listagem de threads
429Você passou do rate limitEspere o tempo do Retry-After e tente de novo com backoff

O corpo de um erro 400 segue o formato abaixo, apontando o campo problemático:

{
  "error": {
    "message": "Descrição do que deu errado.",
    "errors": [
      { "field": ["page"], "message": "Deve ser um número maior que zero." }
    ]
  }
}
Um lead pode ter mais de uma conversa?

Pode. Cada canal tem sua própria thread — por exemplo, uma de WHATSAPP e outra de EMAIL para o mesmo lead. Por isso vale listar todas as threads antes de puxar as mensagens.

Consigo filtrar só as conversas de WhatsApp ou só de E-mail?

Os canais disponíveis são WHATSAPP e EMAIL. Ao listar as threads você recebe o channel de cada uma e pode selecionar no seu lado apenas o canal que interessa.

Ler as mensagens envia alguma coisa para o cliente?

Não. Estes endpoints são somente leitura. Nada é enviado, respondido ou alterado — você só consulta o histórico que já existe.

Preciso de código para isso?

Não necessariamente. Ferramentas no-code como Zapier, Make e n8n conseguem consumir a API REST do GS Engage e mover esses dados para outros sistemas sem você escrever código.

Toda chamada é real

Não existe ambiente de testes (sandbox) separado no GS Engage. Toda chamada atinge dados de produção. Como aqui só fazemos leitura, o risco é baixo — mas mantenha o cuidado com a chave e com o volume de requisições.

Antes de integrar

0/4

Este artigo foi útil?

Nesta página

Última atualização