Relatórios da jornada: o que aconteceu com cada lead
Cada jornada gera dois arquivos por dia, que mostram o que aconteceu com cada lead e o que foi dito na conversa:
| Arquivo | O que tem | Uma linha é |
|---|---|---|
| Eventos | Os passos de cada lead: entrada na jornada, envio, entrega, resposta, resultado, encerramento. | um acontecimento |
| Mensagens | O texto trocado, com remetente, status de entrega e telefones. | uma mensagem |
Os dois saem em Parquet, JSONL ou CSV (veja os formatos), com nomes de coluna em inglês. O formato é o mesmo para todas as organizações: o de-para para o seu sistema (por exemplo, qual resultado vira qual código) fica com você. O que a jornada declara, como os nomes dos resultados e dos campos, aparece no arquivo exatamente como você escreveu.
Quem pode pedir e como
Os relatórios saem pela Aura e só para administradores da organização, porque cobrem todos os leads da jornada:
Exporte os eventos da jornada Boas-vindas de ontem em CSV.
Exporte as mensagens da jornada Boas-vindas de ontem em JSONL.
Exporte os eventos da jornada Boas-vindas de ontem em Parquet.
A Aura devolve um arquivo para baixar, com o número de linhas, o dia e o
aviso de arquivo parcial, quando for o caso. O formato vai no parâmetro formato, que aceita parquet, jsonl e csv. O formato padrão é csv; para cargas automatizadas, peça parquet.
Dia no fuso da organização e arquivo parcial
Cada arquivo cobre um dia no fuso da organização. O administrador define o fuso no painel de regras de contato, no mesmo campo usado na janela de ligação. Organização sem fuso configurado usa UTC. "Ontem" e "hoje" também valem no fuso da organização. Num dia de horário de verão, o dia pode ter 23 ou 25 horas.
Os horários nas colunas continuam em UTC (ISO 8601 com Z): só a divisão em
dias muda. O nome do arquivo leva o fuso, por exemplo
eventos_<jornada>_2026-10-04_America-Sao_Paulo.csv (ou .jsonl, .parquet,
conforme o formato); sem fuso, o nome termina em _UTC antes da extensão.
Um dia que ainda não fechou, ou que acabou de fechar, sai como parcial
(o dia local em curso): o
nome do arquivo ganha o sufixo _parcial e a resposta traz o instante até
onde os dados estão definitivos. Trate esse arquivo como sujeito a ganhar
linhas depois. Um dia fechado tem sempre o mesmo conjunto de linhas, mas veja
o que pode mudar depois.
Relatório periódico
Para receber todo dia, peça o agendamento:
Todo dia às 7h, gere os relatórios da jornada Boas-vindas.
O relatório agendado gera os dois arquivos do dia anterior e os entrega
numa conversa própria do agendamento. Só administradores agendam. O
agendamento vale para aquela jornada e aquele formato (o parâmetro formato
do agendamento também aceita parquet): para mudar, agende de novo. Veja também Tarefas agendadas.
Formatos: Parquet, JSONL e CSV
| Formato | Quando usar |
|---|---|
Parquet (.parquet) | Recomendado para cargas automatizadas. Os dados saem tipados e comprimidos com zstd. |
JSONL (.jsonl) | Continua disponível: uma linha por registro, com fields e attributes em objetos. |
CSV (.csv) | Desaconselhado para cargas automatizadas e para colunas dinâmicas: as colunas fields.* e attributes.* mudam conforme a configuração da jornada. Serve para abrir numa planilha. |
Tipos no Parquet
- Horários (
occurred_at,recorded_at,sent_at,delivered_at,read_at,failed_ate os demais) saem como timestamp em UTC. journey_version,followup_stepemedia_countsaem como inteiro.- As colunas
fields.*seguem o tipo do campo na jornada: inteiro vira inteiro de 64 bits, decimal vira decimal com 2 casas, data vira data, e lista de opções e texto viram texto. - As colunas
attributes.*saem como texto. - O esquema é o mesmo em todas as linhas do arquivo: uma coluna sem valor numa linha continua com o seu tipo.
Valor que não cabe no tipo
Se um valor não cabe no tipo da coluna (por exemplo, texto num campo inteiro,
ou decimal com mais de 2 casas), a coluna sai vazia naquela linha e o
valor original fica na coluna invalid_values, da mesma linha, em JSON. A
resposta da exportação avisa quantos valores foram assim.
No CSV, a plataforma protege o arquivo contra fórmulas de planilha. No
Parquet essa proteção não é aplicada, porque o dado é tipado: um texto que
começa com = sai literal. Quem converter o Parquet para CSV ou planilha deve
tratar isso.
Arquivo de eventos
As colunas fixas vêm sempre, nesta ordem. Depois delas vêm as colunas
fields.* e attributes.*, descritas mais abaixo. Em CSV, uma coluna sem
valor naquela linha fica vazia; em Parquet, ela continua com o seu tipo. Em JSONL, fields e attributes são
objetos dentro de cada linha.
| Coluna | Tipo | O que é | Exemplo |
|---|---|---|---|
event_id | texto | Identificador único do evento. | <id-do-evento> |
event_type | texto | O tipo do evento. Veja a tabela. | first_reply |
occurred_at | data e hora (UTC) | Quando o acontecimento ocorreu. | 2026-01-15T13:04:05Z |
recorded_at | data e hora (UTC) | Quando a plataforma registrou. | 2026-01-15T13:04:06Z |
external_lead_id | texto | O ID do lead no seu sistema, vindo da lista. | <id-do-lead-no-seu-sistema> |
journey_id | texto | Identificador da jornada. | <id-da-jornada> |
journey_name | texto | Nome atual da jornada. | Boas-vindas |
journey_version | inteiro | Versão da jornada no momento do evento. | 3 |
enrollment_id | texto | A inscrição: o lote do disparo em que o lead entrou na jornada. | <id-da-inscricao> |
conversation_id | texto | A conversa do lead com o agente. Vazio antes de existir conversa. | <id-da-conversa> |
channel | texto | Canal. Hoje, whatsapp. | whatsapp |
provider | texto | Provedor do número: meta_cloud ou twilio. | meta_cloud |
actor_type | texto | Quem causou o evento: ai_agent, human_agent, rule, auto_disposition, lead ou system. | ai_agent |
actor_id | texto | O atendente ou o agente, quando actor_type é human_agent ou ai_agent. Vazio nos demais. | <id-do-atendente> |
template | texto | Nome do template enviado, nos eventos de envio. | <nome-do-template> |
followup_step | inteiro | Número do passo do acompanhamento, em followup_sent. | 1 |
provider_message_id | texto | Identificador da mensagem no provedor. | <id-da-mensagem-no-provedor> |
delivery_status | texto | Status de entrega, em delivery_update. | delivered |
error_code | texto | Código de erro, quando o envio falha. | <codigo-de-erro> |
error_message | texto | Descrição curta do erro. | <descricao-do-erro> |
disposition | texto | O resultado escolhido, em disposition_recorded. | <nome-do-resultado> |
notes | texto | Observação que quem registrou o resultado escreveu. Pode ser texto livre. | <observacao> |
reason | texto | Motivo, em eventos como lead_suppressed. | <motivo> |
O arquivo de eventos não traz telefone nem o texto das mensagens. Eles estão no arquivo de mensagens.
Tipos de evento
event_type | Quando |
|---|---|
lead_enrolled | O lead entrou num disparo com jornada. |
lead_suppressed | O lead ficou de fora: ID bloqueado, prazo de "não mandar de novo", ID repetido, já na fila de outro disparo, ou sem um atributo obrigatório. O motivo vai em reason. |
initial_message_sent | A primeira mensagem saiu. |
send_failed | O envio falhou, com o código de erro. |
delivery_update | O WhatsApp informou entregue, lida ou com falha, em delivery_status. |
followup_sent | Um passo do acompanhamento saiu (followup_step). |
first_reply | O lead respondeu pela primeira vez. |
handoff_requested | A conversa entrou na fila de atendimento humano, antes de ter um atendente. |
handoff_assigned | Um atendente assumiu a conversa. |
handoff_returned | O atendente devolveu a conversa ao agente. |
disposition_recorded | Um resultado foi registrado, com quem registrou em actor_type. |
opt_out | O lead pediu para sair. |
conversation_closed | A conversa foi encerrada. |
Resultados automáticos
Quando a conversa encerra sem que ninguém escolha um resultado, a plataforma
registra um automático, com actor_type igual a rule. Esses nomes são
reservados: nenhuma jornada pode declarar um resultado com eles.
disposition | Quando |
|---|---|
no_response | A conversa encerrou sozinha e o lead nunca respondeu. |
abandoned | A conversa encerrou sozinha depois de o lead responder, ou de passar por um atendente. |
undetermined | Quem estava na conversa a encerrou sem escolher um resultado. |
opt_out | O lead pediu para sair. |
Quando o automático seria undetermined, a plataforma ainda lê a conversa. Se
ela mostrar com clareza um dos resultados da jornada, esse resultado passa a
valer e o evento aparece com actor_type igual a auto_disposition. Esse
registro pode sair marcado para revisão.
Campos do resultado: colunas fields.*
Cada resultado que a jornada declara pode ter campos, as informações que o agente ou o atendente preenchem junto com o resultado (por exemplo, o produto contratado e o valor). Cada campo tem uma chave e um tipo:
| Tipo | O que guarda | Formato no arquivo |
|---|---|---|
picklist | Uma opção de uma lista fechada. | O texto da opção como a jornada declarou. |
text | Texto curto, até 120 caracteres. | Texto. |
integer | Número inteiro, com mínimo e máximo opcionais. | 3 |
decimal | Número com duas casas, com unidade opcional (como BRL). | 1250.00 |
date | Uma data. | 2026-01-31 |
No arquivo de eventos, cada chave vira uma coluna fields.<chave>. Um
resultado com os campos produto e valor gera as colunas fields.produto e
fields.valor, preenchidas só nas linhas disposition_recorded daquele
resultado. As colunas aparecem em ordem alfabética e incluem as chaves
declaradas na versão atual da jornada e as que aparecem nas linhas do dia.
Em JSONL, os campos vêm no objeto fields.
Atributos do lead: colunas attributes.*
Os atributos são colunas da sua lista de leads que você quer ver no
relatório (por exemplo, uma faixa ou segmento do lead). A jornada declara
quais, na lista Atributos exportados: até 20 nomes. Cada um vira uma
coluna attributes.<nome>, na ordem declarada, com o valor que veio na lista
para aquele lead. Sem essa declaração, nenhum atributo sai. Em JSONL, vêm
no objeto attributes.
Arquivo de mensagens
Uma linha por mensagem, de entrada ou de saída. Cada parte de uma resposta dividida em vários balões é uma linha própria. A mensagem entra no arquivo quando a conversa está ligada à jornada, a partir do primeiro evento da jornada nessa conversa.
| Coluna | Tipo | O que é | Exemplo |
|---|---|---|---|
message_id | texto | Identificador único da mensagem. | <id-da-mensagem> |
conversation_id | texto | A conversa. | <id-da-conversa> |
conversation_started_at | data e hora (UTC) | Início da parte retida da conversa. Veja retenção. | 2026-01-14T10:00:00Z |
external_lead_id | texto | O ID do lead no seu sistema. | <id-do-lead-no-seu-sistema> |
journey_id | texto | Identificador da jornada. | <id-da-jornada> |
enrollment_id | texto | A inscrição do lead na jornada. | <id-da-inscricao> |
channel | texto | Canal. | whatsapp |
provider | texto | Provedor do número: meta_cloud ou twilio. | twilio |
direction | texto | inbound (do lead) ou outbound (para o lead). | outbound |
sender_type | texto | Quem enviou: lead, ai_agent, human_agent ou system (template de disparo e acompanhamento). | ai_agent |
sender_id | texto | O agente ou o atendente. Vazio nas demais. | <id-do-agente> |
recorded_at | data e hora (UTC) | Quando a mensagem foi registrada. Define o dia local da organização a que a linha pertence. | 2026-01-15T13:04:05Z |
content_type | texto | text, audio, image, video, document, template ou other. | text |
body | texto | O texto. Em áudio, a transcrição. Em template, o texto já com as variáveis preenchidas; vazio se não foi possível resolver. | <texto-da-mensagem> |
template | texto | Nome do template, nas mensagens de template. | <nome-do-template> |
media_count | inteiro | Quantos anexos a mensagem trouxe. | 0 |
media_types | texto | Tipos dos anexos, separados por ;. Não há link do anexo. | image/jpeg |
provider_message_id | texto | Identificador da mensagem no provedor. | <id-da-mensagem-no-provedor> |
delivery_status | texto | received (entrada), sent, delivered, read ou failed. | read |
sent_at | data e hora (UTC) | Quando o provedor confirmou o envio. | 2026-01-15T13:04:06Z |
delivered_at | data e hora (UTC) | Quando foi entregue. | 2026-01-15T13:04:09Z |
read_at | data e hora (UTC) | Quando foi lida. | 2026-01-15T13:10:00Z |
failed_at | data e hora (UTC) | Quando falhou, se falhou. | vazio |
error_code | texto | Código de erro da falha. | <codigo-de-erro> |
error_message | texto | Descrição curta do erro. | <descricao-do-erro> |
lead_phone | texto | Telefone do lead, com + e código do país. | <telefone-do-lead> |
business_phone | texto | Telefone do número da empresa. | <telefone-da-empresa> |
O que pode mudar depois
- O estado de entrega avança. O conjunto de linhas de um dia fechado não
muda, mas a mesma mensagem pode ser vista em estados diferentes em dias
diferentes. Uma mensagem exportada hoje como
sentpode, amanhã, terdelivered_ateread_atpreenchidos, ou virarfailed. Se você baixa o mesmo dia mais de uma vez, o que vale é o arquivo mais recente. Quem junta os relatórios de vários dias deve ficar com a versão mais nova de cadamessage_id. - O resultado de um atendimento pode ser corrigido. Escolher um resultado
de novo substitui o anterior: o novo vale, e o evento anterior continua
no histórico. Num relatório mais novo, o resultado de um lead pode ser
diferente do que você recebeu antes. Por isso, em
disposition_recorded, o último evento do lead na conversa é o que vale. - A atribuição de uma conversa à inscrição pode mudar. Se o lead for
inscrito de novo na mesma conversa,
external_lead_ideenrollment_iddas mensagens seguem a inscrição mais recente.
Retenção de 90 dias
O texto das mensagens fica guardado por 90 dias. Depois disso, as mensagens saem do arquivo de mensagens e não podem mais ser exportadas.
Por isso, conversation_started_at mostra o início da parte retida da
conversa, e não o início real dela. Numa conversa longa, esse valor avança
conforme as mensagens mais antigas saem. Se você precisa guardar o texto por
mais tempo, baixe os arquivos dentro do prazo, tratando-os como descrito
abaixo.
O arquivo de eventos tem os dados de negócio da jornada, sem telefone e sem texto das mensagens, e não tem esse prazo.
Dados pessoais e LGPD
Ele traz o telefone do lead e o texto que ele escreveu. Trate-o como dado pessoal, conforme a LGPD: guarde só onde for necessário, restrinja o acesso, não encaminhe por canais abertos e apague quando não precisar mais.
- O arquivo gerado fica disponível sem prazo de expiração. Quem o baixou deve removê-lo quando terminar o uso.
- Apagar a organização apaga os arquivos gerados. Apagar um lead individualmente não apaga os arquivos que já foram gerados com os dados dele.
- O arquivo de eventos também pode ter dados pessoais: o
notese os campostextsão texto livre, e osattributes.*vêm da sua lista de leads. - Só administradores geram os arquivos e criam o agendamento.
Analisar com a Aura
Em vez de abrir os arquivos numa planilha, o administrador pode pedir à Aura que os analise: funil da jornada, resultados por jornada ou inscrição, distribuição por campo de um resultado, soma de um campo de valor, tempo até a primeira resposta, falhas de entrega por tipo de erro e desempenho por atendente. Ela entrega gráficos, dashboards e o recorte em CSV.
Monte um dashboard com o funil da jornada Boas-vindas na última semana.
A análise cobre até 31 dias de uma vez, vale as mesmas regras de acesso (só administradores) e, por padrão, traz resultados agregados. Telefone e texto de mensagem só entram na análise quando o administrador pede explicitamente. Um relatório agendado gera os arquivos, mas não faz análises.