Pular para o conteúdo
Contatos

Contexto do contato para agente (pacote pronto)

v1.0.0
GEThttps://api.staging.growthaisystem.com/api/v1/contacts/{id}/context
  • ExigeAuthorization: Bearer gos_…— Chave de API (gos_…)· escoposcontacts.read

Tudo o que um agente de conversa precisa saber do contato, numa chamada só e sem nenhuma chamada de IA (só o que já está gravado): a ficha (o mesmo corpo de GET /contacts/{id}, com customFields = respostas de formulário, sem firstHumanTouchAt/lastHumanTouchAt), os negócios ABERTOS com o nome do funil e da etapa, as próximas reuniões e a última passada, as conversas em todos os canais (como em GET /conversations/{id}, com ai.paused e a janela de 24h), a linha do tempo de TODOS os canais (mensagens com texto ou transcrição do áudio, ligações com a transcrição vigente, e-mails, notas e eventos de reunião), e o resumo que a plataforma JÁ gravou na conversa principal.

Delta por turno: só a linha do tempo é recortada por since (o resto é o estado atual). Entra o item que ACONTECEU depois de since (at; mensagem: o envio no provedor) OU que foi GRAVADO aqui depois dele (mensagem que chegou atrasada com horário antigo). Exclusivo. Recomendado: mande em since o generatedAt do pacote anterior menos 5 minutos e descarte os itens cujo id você já viu — cobre a mensagem gravada durante a leitura anterior.

Escopos por seção: a rota exige contacts.read. opportunities exige opportunities.read (nomes de funil/etapa: + pipelines.read); appointments exige calendars.read; conversations, timeline e summary exigem conversations.read — que libera também a transcrição das ligações do contato na linha do tempo (os eventos de reunião: + calendars.read). Sem o escopo, a seção vem null e aparece em omittedSections — a rota não responde 403.

Tetos: linha do tempo limit 30 por padrão, até 100; texto de cada item cortado em maxTextChars (padrão 600, de 50 a 2000) com truncated: true; até 20 negócios, 10 próximas reuniões, 20 conversas, histórico das 20 reuniões mais recentes, resumo até 4000 caracteres. No pior caso (100 itens × 2000 caracteres) o corpo fica na casa de 300 KB; com os padrões, poucas dezenas de KB. Mais histórico: GET /interactions?contactId= (paginado).

includeSummary=false tira o único conteúdo derivado de IA (o summary).

Parâmetros de caminho

Entram no próprio endereço, no lugar das chaves.

  • idstringobrigatório
    • tamanho mín. 1

Parâmetros de consulta

Vão na querystring, depois do ?.

  • sincestringopcional
  • limitintegeropcional
    • padrão 30
    • faixa 1–100
  • maxTextCharsintegeropcional
    • padrão 600
    • faixa 50–2000
  • includeSummarystringopcional
    • padrão "true"
    • um de"true""false"

Respostas

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

200Deu certoapplication/json

O pacote de contexto do contato. Seção null = a chave não tem o escopo dela (listada em omittedSections), ou, no summary, não há resumo gravado / includeSummary=false.

V1ContactContext

    • idstring
    • namestring
    • phonestring | null
    • emailstring | null
    • companystring | null
    • companyIdstring | null
    • rolestring | null
    • cpfstring | null
    • notesstring | null
    • tagsstring[]
    • statusstring
      • um de"active""archived""merged"
    • ownerUserIdstring | null
    • originstring
    • customFieldsobjeto livre
      • chave string
      • valor qualquer valor JSON
    • createdAtstring
    • updatedAtstring
    • urlstring
      • sourcestring | null
      • mediumstring | null
      • campaignstring | null
      • termstring | null
      • contentstring | null
    • firstHumanTouchAtstring | nullpode faltar
    • lastHumanTouchAtstring | nullpode faltar
    • humanTouchCountintegerpode faltar

      Quantos toques humanos este contato recebeu (cada mensagem, ligação, e-mail ou nota com actor: "user" em /interactions conta um). 0 = nenhum. Mesma fonte de firstHumanTouchAt/lastHumanTouchAt; só vem em GET /contacts/{id}.

      • mín. 0
    • firstHumanTouchChannelstring | nullpode faltar

      O canal do PRIMEIRO toque humano — o mesmo registro de firstHumanTouchAt, no vocabulário de channel de /interactions (whatsapp, instagram, facebook, call, email, note…). Dois toques no mesmo instante: vale o de menor id de /interactions. null = nunca houve toque humano.

  • Cada item — V1ContactContextOpportunity

    • idstring
    • titlestring
    • pipelineIdstring
    • stageIdstring
    • contactIdstring
    • statusstring
      • um de"open""won""lost""abandoned"
    • valueCentsinteger
    • currencystring
    • ownerUserIdstring | null
    • temperaturestring
    • tagsstring[]
    • lossReasonstring | null
    • expectedCloseAtstring | null
    • wonAtstring | null
    • wonRecordedAtstring | null
    • lostAtstring | null
    • lostRecordedAtstring | null
    • lostAtStageIdstring | null
    • customFieldsobjeto livre
      • chave string
      • valor qualquer valor JSON
    • createdAtstring
    • updatedAtstring
    • sourcestring | null
      • sourcestring | null
      • mediumstring | null
      • campaignstring | null
      • termstring | null
      • contentstring | null
    • originstring
    • stageChangedAtstring
    • urlstring
    • firstHumanTouchAtstring | nullpode faltar
    • lastHumanTouchAtstring | nullpode faltar
    • humanTouchCountintegerpode faltar

      Quantos toques humanos o contato deste negócio recebeu desde a CRIAÇÃO do negócio (cada mensagem, ligação, e-mail ou nota com actor: "user" em /interactions conta um). 0 = nenhum. Mesma fonte e mesmo recorte de firstHumanTouchAt/lastHumanTouchAt. Vem em GET /opportunities e em GET /opportunities/{id}.

      • mín. 0
    • firstHumanTouchChannelstring | nullpode faltar

      O canal do PRIMEIRO toque humano desde a criação do negócio — o mesmo registro de firstHumanTouchAt, no vocabulário de channel de /interactions (whatsapp, instagram, facebook, call, email, note…). Dois toques no mesmo instante: vale o de menor id de /interactions. null = ainda não houve toque humano.

    • lastActivityAtstring | nullpode faltar
    • pipelineNamestring | null
    • stageNamestring | null
    • Cada item — V1Appointment

      • idstring
      • contactIdstring | null
      • contactNamestring | null
      • opportunityIdstring | null
      • titlestring
      • startAtstring | null
      • endAtstring | null
      • locationstring | null
      • conferenceUrlstring | null
      • calendarKeystring | null
      • assigneeUserIdstring | null
      • statusstring
        • um de"scheduled""canceled"
      • outcomestring | null
        • um de"realizada""noshow""reagendada"
      • sourcestring
      • createdAtstring
      • createdByUserIdstring | null
      • createdBySourcestring
        • um de"crm""public_booking""api""automation""import""system""google_calendar"
      • updatedAtstring
      • canceledAtstring | null
      • outcomeAtstring | null
      • recoveredFromAppointmentIdstring | null
      • externalIdstringpode faltar

        Só em source: "google_calendar": o id do evento no Google Agenda (o id do events.list).

      • calendarIdstringpode faltar

        Só em source: "google_calendar": a agenda do Google de onde o evento veio, como a conexão a guarda (primary = a agenda principal da conta conectada). O dono da conta é o assigneeUserId.

      • allDaybooleanpode faltar

        Só em source: "google_calendar": evento de dia inteiro (o startAt é a meia-noite UTC do dia).

      • externalStatusstringpode faltar

        Só em source: "google_calendar": a situação crua no Google — confirmed, tentative ou cancelled. status traduz para o vocabulário da API (cancelled → canceled; as outras → scheduled).

      • visibilitystringpode faltar

        Só em source: "google_calendar": a privacidade que o dono escolheu para a agenda conectada, a mesma da tela da agenda. busy ("só ocupado") = a API mostra exatamente o que a tela mostra: o horário, o dono e o título "Ocupado" — attendees e htmlLink vêm null. details = o título real, os convidados e o link (evento sem título no Google também sai "Ocupado", como na tela).

        • um de"details""busy"
      • Só em source: "google_calendar": os convidados com a resposta de cada um. [] = evento sem convidado. null = agenda em modo "só ocupado" (visibility: "busy"), ou evento espelhado antes desta versão da API que ainda não passou pelo próximo sync (o espelho regrava cada agenda pelo menos uma vez por dia).

        Cada item — V1CalendarAttendee

        • emailstring

          E-mail do convidado (minúsculas).

        • responseStatusstring | null

          A resposta ao convite, no vocabulário do Google: needsAction, accepted, tentative ou declined.

        • organizerboolean

          true = quem organiza o evento.

        • selfboolean

          true = a própria conta Google conectada (o dono da agenda).

      • htmlLinkstring | nullpode faltar

        Só em source: "google_calendar": o link do evento no Google Agenda (abre para quem tem acesso à agenda). null nos mesmos casos de attendees.

      • idstring
      • contactIdstring | null
      • contactNamestring | null
      • opportunityIdstring | null
      • titlestring
      • startAtstring | null
      • endAtstring | null
      • locationstring | null
      • conferenceUrlstring | null
      • calendarKeystring | null
      • assigneeUserIdstring | null
      • statusstring
        • um de"scheduled""canceled"
      • outcomestring | null
        • um de"realizada""noshow""reagendada"
      • sourcestring
      • createdAtstring
      • createdByUserIdstring | null
      • createdBySourcestring
        • um de"crm""public_booking""api""automation""import""system""google_calendar"
      • updatedAtstring
      • canceledAtstring | null
      • outcomeAtstring | null
      • recoveredFromAppointmentIdstring | null
      • externalIdstringpode faltar

        Só em source: "google_calendar": o id do evento no Google Agenda (o id do events.list).

      • calendarIdstringpode faltar

        Só em source: "google_calendar": a agenda do Google de onde o evento veio, como a conexão a guarda (primary = a agenda principal da conta conectada). O dono da conta é o assigneeUserId.

      • allDaybooleanpode faltar

        Só em source: "google_calendar": evento de dia inteiro (o startAt é a meia-noite UTC do dia).

      • externalStatusstringpode faltar

        Só em source: "google_calendar": a situação crua no Google — confirmed, tentative ou cancelled. status traduz para o vocabulário da API (cancelled → canceled; as outras → scheduled).

      • visibilitystringpode faltar

        Só em source: "google_calendar": a privacidade que o dono escolheu para a agenda conectada, a mesma da tela da agenda. busy ("só ocupado") = a API mostra exatamente o que a tela mostra: o horário, o dono e o título "Ocupado" — attendees e htmlLink vêm null. details = o título real, os convidados e o link (evento sem título no Google também sai "Ocupado", como na tela).

        • um de"details""busy"
      • Só em source: "google_calendar": os convidados com a resposta de cada um. [] = evento sem convidado. null = agenda em modo "só ocupado" (visibility: "busy"), ou evento espelhado antes desta versão da API que ainda não passou pelo próximo sync (o espelho regrava cada agenda pelo menos uma vez por dia).

        Cada item — V1CalendarAttendee

        • emailstring

          E-mail do convidado (minúsculas).

        • responseStatusstring | null

          A resposta ao convite, no vocabulário do Google: needsAction, accepted, tentative ou declined.

        • organizerboolean

          true = quem organiza o evento.

        • selfboolean

          true = a própria conta Google conectada (o dono da agenda).

      • htmlLinkstring | nullpode faltar

        Só em source: "google_calendar": o link do evento no Google Agenda (abre para quem tem acesso à agenda). null nos mesmos casos de attendees.

  • Cada item — V1Conversation

    • idstring
    • channelstring
    • connectionIdstring | null
    • contactIdstring | null
      • idstring
      • namestring
      • phonestring | null
      • emailstring | null
    • contactDisplaystring | null
    • contactPhonestring | null
    • assignedUserIdstring | null
    • humanAssignedboolean
    • assignedAtstring | null
    • lastMessageAtstring | null
    • lastMessageDirectionstring | null
      • um de"inbound""outbound"
    • lastMessageActorstring | null
      • um de"user""contact""ia""automation""system""api""unknown"
    • archivedboolean
      • pausedboolean
      • pausedUntilstring | null
      • pausedReasonstring | null
      • appliesboolean
      • openboolean
      • expiresAtstring | null
    • createdAtstring
    • updatedAtstring
    • Cada item — V1ContactTimelineItem

      • idstring
      • kindstring
        • um de"message""call""email""note""meeting"
      • channelstring
      • directionstring | null
        • um de"inbound""outbound"
      • actorstring
        • um de"user""contact""ia""automation""system""api""unknown"
      • userIdstring | null
      • conversationIdstring | null
      • connectionIdstring | null
      • opportunityIdstring | null
      • atstring
      • textstring | null
      • textSourcestring | null
        • um de"text""transcription""call_transcript""subject""note""meeting_title"
      • truncatedboolean
      • messageTypestring | null
      • transcriptionStatusstring | null
      • hasMediaboolean
      • durationSecinteger | null
      • statusstring | null
      • statusReasonstring | null
        • appointmentIdstring
        • eventstring
        • titlestring | null
        • startAtstring | null
        • outcomestring | null
        • reasonstring | null
    • hasMoreboolean
    • sincestring | null
    • conversationIdstring
    • textstring
    • truncatedboolean
    • generatedBy"platform"
      • sempre "platform"
    • updatedAtstring | null
  • Cada item da lista

    • sectionstring
      • um de"opportunities""opportunities.stageNames""appointments""conversations""timeline""timeline.meetings""summary"
    • reason"missing_scope"
      • sempre "missing_scope"
    • requiredScopesstring[]
  • generatedAtstring