Zoho CRM · Claude API · Caso real

A ficha do cliente,
lida dos documentos
e preenchida sozinha.

Um escritório de imigração guardava passaportes, contratos e comprovantes numa pasta por cliente. Antes de cada atendimento, alguém abria tudo e montava a ficha na mão. Agora isso é um popup dentro do próprio CRM.

Ver como funciona Ir direto às armadilhas
2
módulos do CRM, um único popup
4
funções pequenas em vez de uma grande
3
documentos por chamada, com progresso na tela
0
servidores novos para manter
🗂️

Varre as sub-pastas

Percorre a pasta do cliente inteira, em qualquer profundidade, e mostra tudo agrupado por onde estava.

☑️

Quem escolhe é a pessoa

Tudo vem marcado; basta desmarcar o que não interessa. Documento antigo ou duplicado não entra na conta.

👁️

Lê foto, não só PDF

Passaporte fotografado, carteira de residência, comprovante amassado. A leitura é visual, sem OCR prévio.

📋

No formato do escritório

Sai na mesma ficha que a equipe já preenchia à mão, com uma seção de pendências no fim.

Como funciona
1

Abre no registro

Um botão no cliente ou no processo abre o popup. Os dois caminhos chegam à mesma pasta de documentos — a do cliente.

2

Escolhe os documentos

O popup varre as sub-pastas e lista tudo. A pessoa desmarca o que não quer e vê quantas chamadas aquilo vai custar antes de confirmar.

3

Recebe a ficha

Os documentos vão em lotes, com progresso na tela. No fim a ficha aparece pronta — e, quando vem do processo, também fica gravada no registro.

Arquitetura

O popup é quem orquestra

A primeira versão era uma função só, que fazia tudo sozinha. Ela esbarrava no limite de chamadas por execução e parava em nove documentos. Mover a orquestração para o popup, com funções pequenas por trás, derrubou o teto — e deu progresso visível de graça.

DENTRO DO CRM ARQUIVOS DO CLIENTE MODELO DE LINGUAGEM Botão no cliente exibe no popup Botão no processo grava no registro Popup (o orquestrador) resolve de qual cliente são os documentos varre as pastas · desenha a seleção divide em lotes · mostra o progresso decide onde o resultado vai parar listar uma pasta 1 chamada = 1 execução analisar um lote baixa · converte · envia consolidar parciais → ficha gravar no registro só no processo Ficha do processo com a lista de documentos que a alimentaram pastas e sub-pastas varridas em fila arquivo escolhido baixado sob demanda extração por lote lê imagem e PDF transcreve literal consolidação aplica o modelo de ficha do escritório 3 documentos por chamada arquivos inferência controle
Lógica

As quatro etapas, em pseudocódigo

O código real é específico demais do CRM para ser útil fora dele — e envelhece a cada mudança da plataforma. O que se aproveita é a forma, e ela cabe em quatro blocos curtos.

A recursão fica no popup, não na função. Cada pasta vira uma execução independente — é isso que elimina o teto de arquivos e dá o andamento na tela sem esforço extra.

# uma fila, não uma função recursiva fila ← [ pasta do cliente ] árvore ← [ ] enquanto fila não vazia: pasta ← desenfileira(fila) conteúdo ← lista(pasta) # 1 chamada = 1 execução fila += subpastas(conteúdo) árvore += arquivos(conteúdo) mostra("lendo pastas… N lidas, M na fila") desenha(árvore, tudo marcado)

O tipo do arquivo é decidido pelo cabeçalho dos bytes, nunca pela extensão. Foto de celular renomeada é a regra, não a exceção.

escolhidos ← o que sobrou marcado na tela para cada lote de 3 em escolhidos: para cada arquivo no lote: bytes ← baixa(arquivo) tipo ← detecta(bytes) # a extensão mente anexa como documento ou imagem parcial ← modelo(lote, "transcreva literalmente o que estiver legível; não deduza nada") mostra(progresso)

A consolidação não vê os documentos — só os textos parciais. É uma chamada barata que existe para uma coisa só: garantir que a saída tenha sempre a mesma forma.

ficha ← modelo(parciais, modelo_de_ficha_do_escritório) # as regras valem mais que o resto do prompt: # só o que aparece nos documentos # campo sem informação → travessão, nunca dedução # uma seção final com o que falta ou venceu ficha += lista(escolhidos) + data # de onde isso veio

O mesmo popup atende dois módulos e se comporta diferente em cada um. Escrever num campo do cadastro é o único ponto que pede confirmação humana.

se veio do processo: grava a ficha no registro mostra("gravado") se veio do cliente: mostra(ficha no popup) se o cadastro não tem passaporte e a ficha encontrou um: oferece("preencher com X?") # nunca automático
Armadilhas

O que não está na documentação

Estas consumiram a maior parte do tempo. Nenhuma aparece numa busca óbvia, e quase todas falham em silêncio — que é o pior tipo de falha.

01

O endpoint documentado de download recusa o token

O domínio dedicado a download respondia escopo inválido mesmo com todas as permissões concedidas — é um serviço separado, herdado de um produto antigo da plataforma.

O que funciona é o mesmo host da API de listagem. Foram horas conferindo escopos que já estavam certos.

02

Função nova nasce com a API desligada

As funções rodavam perfeitamente pelo editor, mas o popup recebia api is inactive. Chamada por API é um interruptor separado, desligado por padrão, numa tela que não aparece no fluxo de criação.

Ligar só a autenticação por sessão — a por chave deixaria a função acessível de fora do CRM.

03

O log não captura a saída de depuração

As instruções de log da linguagem não aparecem no log exportado quando a função roda por botão. Depurar às cegas custa horas.

Escrever o diagnóstico num campo do próprio registro e, depois, fazer o popup exibir a resposta crua em vez de uma mensagem genérica.

04

A extensão do arquivo mente

Um arquivo terminado em .jpeg era PNG. A API de inferência valida os bytes e recusa a requisição inteira por causa de um único anexo.

Decidir o tipo pelo cabeçalho dos bytes e usar a extensão apenas como pré-filtro.

05

Campo que parece preenchido e não está

Na tela que liga o botão à função, digitar o nome do campo e escolhê-lo na lista produzem telas idênticas. A primeira passa texto literal — a função recebe a string Deal Id em vez do identificador do registro.

Só o valor escolhido pela lista fica destacado. Esse detalhe visual é a única diferença entre funcionar e falhar.

06

Caminho duplicado no endereço do popup

A URL base já apontava para dentro da pasta da aplicação. Informar o caminho completo do arquivo gerava um segmento repetido e um 404 sem explicação.

Conferir onde a base termina antes de compor o resto — vale para qualquer plataforma que monte URL a partir de dois campos.

Limites

Onde essa abordagem para

Rodar tudo dentro do CRM elimina infraestrutura, mas impõe tetos. Vale conhecê-los antes de escolher esse caminho.

LimiteMotivoSaída
PDF e imagem são os formatos que o modelo lê direto converter antes de enviar
A pessoa espera na tela o popup precisa ficar aberto até o fim fila com notificação
Custo por clique nada é reaproveitado entre execuções cache por documento
Leitura, não conferência o modelo transcreve o que vê, não valida revisão humana antes de usar

Tem um CRM cheio de
documentos parados?

Este caso saiu do zero ao ar sem infraestrutura nova, e a segunda versão nasceu de usar a primeira por um dia. Se o seu processo tem um passo de "alguém precisa ler tudo isso antes", provavelmente dá para fazer o mesmo.

Conversar sobre o seu caso