Pular para o conteúdo
Interações

Listar interações (linha do tempo global por período)

v1.0.0
GEThttps://api.growthaisystem.com/api/v1/interactions
  • ExigeAuthorization: Bearer gos_…— Chave de API (gos_…)· escoposcontacts.read

Toda interação com contatos do workspace, mais recente primeiro (createdAt DESC, id DESC). Mensagem do inbox: createdAt é a data do ENVIO registrada pelo provedor — o histórico importado do GHL sai na data original, não na do import. No histórico importado, actor vem do source do CRM antigo quando não há carimbo de autor: workflow/campanha/disparo em massa = automation, api = api. paginada por cursor. Fontes: mensagens do inbox (WhatsApp/Instagram/Facebook, e as conversas de canal phone — importadas ou abertas pela telefonia), ligações, e-mails (resposta enviada pelo painel, resposta recebida do contato, e-mail de automação) e notas. id = <fonte>:<id da linha>.

actor diz QUEM agiu: user = pessoa do time no app (só quando o userId de quem mandou está gravado); contact = o lead (toda interação inbound); ia / automation / system / api = robôs; unknown = mensagem outbound sem autor conhecido (histórico antigo, importado sem source reconhecido, ou sem carimbo). userId é o usuário do app que mandou — carimbado no MOMENTO DO ENVIO, imutável, e só preenchido com actor=user. Para o Speed-to-Lead, filtre direction=outbound&actor=user.

Mensagem do inbox: userId NUNCA é inferido do responsável atual da conversa — antes de 0728 (issue #728) uma mensagem sem carimbo saía atribuída a quem estivesse dono do atendimento NA HORA DA CONSULTA, e o valor mudava sozinho quando a conversa era reatribuída (bug medido pelo cliente: pior que devolver vazio numa auditoria de comissão). Hoje, sem carimbo, userId: null e actor: "unknown". conversationAssigneeUserId é o campo separado e honesto pra "quem é o dono do atendimento HOJE" — mutável, não é quem mandou. channelInstanceId (id da conexão) e senderPhone (o número/identificador dela) ajudam a resolver a autoria sem depender de quem digitou, quando a linha do SDR é separada da dos closers; null quando a mensagem não tem conexão associada ou a fonte não é mensagem de inbox.

Ligação: durationSec (segundos) e status = answered | no_answer | demais estados crus do provedor (ex.: ringing).

NÃO entram: campanhas de e-mail em massa, tarefas, reuniões (vivem em /appointments) e os marcadores internos do fio da conversa ("Automação X rodou", "Reunião cancelada", "Negócio foi de A para B", atribuição de atendente) — são anotação para quem atende, nunca chegam ao contato. opportunityId só vem preenchido na nota; nas demais o vínculo com o negócio é pelo contactId.

Mensagem: status = sent | delivered | read | failed (com statusReason) | received; updatedAt é a última mudança de estado.

Contato na Lixeira não aparece: nada dele sai aqui, nem com contactId (a Lixeira fica fora da API).

Filtros: contactId, userId, channel (CSV de whatsapp,instagram,facebook,phone,call,email,note), direction, actor, createdAfter / createdBefore e updatedAfter / updatedBefore (ISO-8601, exclusivos). limit até 500.

Parâmetros de consulta

Vão na querystring, depois do ?.

  • contactIdstringopcional
    • tamanho 1–80
  • userIdstringopcional
    • tamanho 1–80
  • channelstringopcional
    • tamanho 1–120
  • directionstringopcional
    • um de"inbound""outbound"
  • actorstringopcional
    • um de"user""contact""ia""automation""system""api""unknown"
  • createdAfterstringopcional
  • createdBeforestringopcional
  • updatedAfterstringopcional
  • updatedBeforestringopcional
  • cursorstringopcional
  • limitintegeropcional
    • padrão 100
    • faixa 1–500

Respostas

6 respostas documentadas — o código, o que ele significa nesta rota e a forma do corpo.

200Deu certoapplication/json

Página de interações do workspace, mais recente primeiro. data: [] é sucesso (não há interação no recorte); nextCursor: null é o fim da lista.

  • Cada item — V1Interaction

    • idstring
    • kindstring
      • um de"message""call""email""note"
    • channelstring
    • directionstring
      • um de"inbound""outbound"
    • actorstring
      • um de"user""contact""ia""automation""system""api""unknown"
    • userIdstring | null
    • contactIdstring | null
    • opportunityIdstring | null
    • conversationIdstring | null
    • conversationAssigneeUserIdstring | null
    • channelInstanceIdstring | null
    • senderPhonestring | null
    • createdAtstring
    • updatedAtstring
    • durationSecinteger | null
    • statusstring | null
    • statusReasonstring | null
    • previewstring | null
  • nextCursorstring | null

    Cursor opaco da PRÓXIMA página — passe em ?cursor=. null = acabou a lista.