@lionchat/mcp-server 1.34.1 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -27,6 +27,10 @@ function getErrorMessage(status, body) {
27
27
  return 'Permission denied: your role does not allow this action (an administrator may have hidden this menu ' +
28
28
  'in the custom role). The token is valid — do not ask the user to renew it.';
29
29
  }
30
+ if (isInvalidMemberIds(body)) {
31
+ return 'Invalid user id: at least one id in user_ids or supervisor_ids does not belong to this account, and ' +
32
+ 'nothing was changed. The token is valid — fix the list and do not ask the user to renew it.';
33
+ }
30
34
  return 'Authentication failed. Check your token at Login > Profile Settings';
31
35
  case 403:
32
36
  return 'Permission denied. Your token may not have access to this resource';
@@ -54,6 +58,14 @@ function isPermissionRefusal(body) {
54
58
  const obj = body;
55
59
  return obj.error === PERMISSION_REFUSAL_TEXT || obj.message === PERMISSION_REFUSAL_TEXT;
56
60
  }
61
+ // AIDEV-NOTE: [protecao-contra-excesso 04/11] as 4 rotas que gravam membro de time respondem 401 com este texto quando a
62
+ // lista traz id de fora da conta. O token esta certo: como "token invalido", a IA pedia credencial nova sem precisar.
63
+ const INVALID_MEMBER_IDS_TEXT = 'IDs de usuario invalidos';
64
+ function isInvalidMemberIds(body) {
65
+ if (!body || typeof body !== 'object')
66
+ return false;
67
+ return body.error === INVALID_MEMBER_IDS_TEXT;
68
+ }
57
69
  // AIDEV-NOTE: Extract validation details from 422 response body
58
70
  function extractValidationDetails(body) {
59
71
  if (body && typeof body === 'object') {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -80,7 +80,7 @@ Account (conta/empresa)
80
80
  - `image` — fotos/imagens
81
81
  - `audio` — áudios (geralmente vêm com `transcribed_text`)
82
82
  - `video`
83
- - `file` — PDF, DOCX, qualquer outro (pode ter `extracted_text`)
83
+ - `file` — PDF, DOCX, planilha, qualquer outro. O texto que a IA leu do documento NÃO vem na API (não existe `extracted_text` na resposta); o que ela leu aparece na pílula de atividade da conversa ("A IA leu o documento X (N de M páginas)")
84
84
  - `location`, `contact` — tipos especiais
85
85
 
86
86
  ### KanbanItem.item_details.priority (string)
@@ -209,7 +209,7 @@ Muitos campos objeto/lista são **trocados inteiros** no update: o que não vier
209
209
  | TROCA inteira (leia e reenvie tudo) | SOMA (só as chaves enviadas mudam) |
210
210
  |---|---|
211
211
  | `custom_attributes` da CONVERSA (`conversations_create_3` — troca os atributos DO CLIENTE; desde 06/10/2026 o dado do sistema fica FORA dessa troca: não é apagado e também não é gravado por aqui — ctwa/origin/UTM oficiais/cliques do Google/waha/captain e qualquer atributo marcado como do sistema. Atributo próprio do cliente segue normal, mesmo com nome parecido, ex.: `utm_loja_fisica`) | `custom_attributes` do CONTATO (`contacts_update`) |
212
- | card: cada chave de `item_details` (a lista `custom_attributes` do card, `offers`, `notes`), `assigned_agents`, coluna `custom_attributes` | `item_details` do card no 1º nível (chave não enviada fica) |
212
+ | card: cada chave de `item_details` (a lista `custom_attributes` do card, `offers`, `notes`), `assigned_agents` | `item_details` do card no 1º nível (chave não enviada fica); `kanban_item.custom_attributes` (objeto `{nome do campo: valor}`), campo a campo: os outros ficam |
213
213
  | `funnel.settings`, `funnel.stages` (etapa ausente = removida), `kanban_config.global_custom_attributes` | `channel.additional_attributes` da caixa WhatsApp/Instagram/Facebook/TikTok |
214
214
  | `flow_data` do fluxo, `actions` de macro/automação, `query` de filtro salvo, `audience` de campanha | `roles_layout` do modelo de contrato |
215
215
  | `settings` de integração (hooks), mapas de evento de gateway/Omie/Conta Azul/Meta Lead/Google Ads | |
@@ -453,10 +453,12 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
453
453
  | Criar / preencher **campo personalizado da empresa** ("Segmento", "Data de fundacao") | `lionchat_custom_attributes_create` com `attribute_model: company_attribute` + `lionchat_companies_update` com `company.custom_attributes {chave: valor}` | So com o modulo Empresas ligado; tipo segredo recusado. Chave que nao existe como atributo de empresa = 422 e nada do pedido grava: crie a definicao ANTES. MESCLA; `null` limpa. Desde 2026-10-16 vira variavel `{{contact.company.custom_attribute.CHAVE}}`, condicao do fluxo (`attrSource: company`), condicao de automacao e filtro de contatos (`custom_attribute_type: company_attribute`) e a IA le — detalhe no resource data-model |
454
454
  | **Importar muitas empresas** de uma vez (planilha, lista de clientes, cadastro de outro sistema) | `lionchat_companies_bulk_create` (ate 1000 por chamada; `check_only: true` CONFERE sem gravar) e depois `lionchat_companies_import_status` com o `import_id` | Mesma importacao do botao "Importar empresas" da tela. Mesma empresa = CNPJ; sem CNPJ, o site; sem os dois, o NOME — mais de uma empresa com aquele nome = a linha NAO entra (mande CNPJ ou site). Empresa existente e ATUALIZADA; campo vazio nunca apaga. Valor invalido fica em branco com aviso e o resto entra. Campos PLANOS (`address_city`, `social_instagram`), nunca objeto; `custom_attributes` so com chave que ja existe como atributo de EMPRESA. Exige modulo Empresas + administrador ou cargo "Exportar e importar contatos". So no conector remoto (Claude.ai/ChatGPT); no conector local (NPM) importe com `lionchat_companies_create` uma a uma |
455
455
  | Organizar atributos em **categorias** (pastas que abrem e fecham: "Sobre a casa", "Financeiro") | `lionchat_custom_attribute_categories_create` (`name` + `attribute_model`) e depois `lionchat_custom_attribute_categories_assign` (`attribute_key` + `category_id`; `null` tira) | Categoria e OPCIONAL e de UMA aba so (`conversation_attribute`, `contact_attribute`, `company_attribute` ou `kanban_item_attribute` = Card). Criar categoria NAO aceita atributos junto. Card: `attribute_key` = NOME do campo exatamente como gravado. Excluir categoria nunca apaga atributo (voltam para "Sem categoria"). Ver resource data-model |
456
- | Achar a conversa **de uma pessoa/empresa** (nome, telefone, e-mail, CPF/CNPJ, nº da conversa) | `lionchat_search_list` (`/search/conversations`) ou `lionchat_contacts_search` | RÁPIDO. **NÃO use `lionchat_conversations_search`**: apesar do nome, ele é o legado que procura dentro das mensagens e leva **15 a 22 s** (medido em produção 11/08). O sufixo `_list` aqui é histórico — `lionchat_search_list*` **são buscas**, não listagens; a regra "não baixe tudo com `*_list`" vale para `lionchat_<recurso>_list` |
457
- | Achar **onde foi dito** algo (palavra dentro da conversa) | `lionchat_search_list_2` (`/search/messages`) | RÁPIDO: índice trigram próprio e teto de tempo em duas fases (2 s / 2 s desde 04/09 — antes a 2ª fase herdava 14 s e o pior caso da seção era 16 s). Estourou as duas, o payload volta com `message_search_interrupted: true` e a lista VAZIA — isso NÃO quer dizer que não existe, quer dizer que não deu tempo: tente de novo. É a substituta certa do `lionchat_conversations_search` |
456
+ | Achar a conversa **de uma pessoa/empresa** (nome, telefone, e-mail, CPF/CNPJ, nº da conversa) | `lionchat_search_list` (`/search/conversations`) ou `lionchat_contacts_search` | RÁPIDO e lê a FICHA. **`lionchat_conversations_search` não serve para isso**: apesar do nome, ele procura só no TEXTO das mensagens, nunca no nome, telefone ou CPF. O sufixo `_list` aqui é histórico — `lionchat_search_list*` **são buscas**, não listagens; a regra "não baixe tudo com `*_list`" vale para `lionchat_<recurso>_list` |
457
+ | **Em quais conversas** foi dito algo, e **quantas** (histórico inteiro) | `lionchat_conversations_search` (`/conversations/search`) | Refeito em 05/11/2026: antes levava 15 a 22 s e chegou a derrubar o servidor; resposta anterior sua que mandou EVITAR esta ferramenta ficou velha. Procura o TRECHO EXATO digitado (com os espaços; maiúscula não importa, acento importa) nas mensagens do cliente e da equipe, em todo o histórico; nota privada e evento do sistema ficam fora. `meta.all_count` conta CONVERSAS, não vezes, e já responde "quantas" na 1ª página: peça outras páginas só para ler mais. Cada conversa traz até 5 mensagens que casam, as mais novas, e `matched_messages_count` (quantas casam nela). `meta.truncated: true` = passou de 5.000 conversas e o número é "pelo menos". `meta.message_search_interrupted: true` = estourou o tempo: vazio NÃO quer dizer que não existe e os números vêm `null`; refine o termo. 25 conversas por página. Resposta cortada por tamanho: as conversas cortadas NÃO voltam na página seguinte; refine o termo |
458
+ | Mensagens **recentes** com o contexto em volta (o que veio antes e depois) | `lionchat_search_list_2` (`/search/messages`) | RÁPIDO, mas só os ÚLTIMOS 3 MESES, por palavras soltas (cada termo precisa bater) e sem agrupar por conversa: 15 mensagens por página, cada uma com a anterior e a seguinte. Teto de tempo em duas fases (2 s + 2 s desde 04/09): estourou, volta `message_search_interrupted: true` e a lista VAZIA — isso NÃO quer dizer que não existe, quer dizer que não deu tempo |
459
+ | Achar algo **dentro de uma conversa** que você já sabe qual é | `lionchat_conversations_messages_search` | Recorta por uma conversa só; aceita `private_only` (só notas privadas) e `file_type` |
458
460
  | Não sei se o termo é nome de alguém ou algo dito no papo | `lionchat_search_search` (`/search`) | Cobre os dois numa chamada. Opção mais segura quando a intenção é ambígua |
459
- | (qualquer busca) termo com menos de 3 caracteres | — | Volta **vazio de propósito** em todas as buscas. Vazio ≠ "não existe": quer dizer que a busca não rodou. Refaça com 3+ caracteres. Só-dígitos é isento nas rotas `/search/*`, mas **não** no `lionchat_conversations_search` legado |
461
+ | (qualquer busca) termo com menos de 3 caracteres | — | Volta **vazio de propósito** em todas as buscas. Vazio ≠ "não existe": quer dizer que a busca não rodou. Refaça com 3+ caracteres. Só-dígitos é isento nas rotas `/search/*`, mas **não** no `lionchat_conversations_search`, que também devolve vazio para termo sem nenhuma letra ou número |
460
462
  | Entregar o **link** de um card ou de uma conversa ("me manda o link desse card") | Sem ferramenta: monte o endereço. Card: `<painel>/app/accounts/<conta>/kanban?funnel=<funnel_id>&card_id=<id do card>`. Conversa: `<painel>/app/accounts/<conta>/conversations/<número da conversa>`. `<painel>` e `<conta>` vêm de `lionchat_current_account` (conector remoto) ou `lionchat_ping` (conector local) | Cada instalação tem o seu endereço: nunca chute. Só abre para quem tem login e acesso naquela conta: nunca mande ao cliente final. Aba do card, conversa por cima do card e uso em fluxo: `lionchat://docs/kanban-deep-dive`, seção "Link do card" |
461
463
  | Recebeu um **link do painel** e quer saber do que se trata | Leia o endereço: `card_id` vai em `lionchat_kanban_items_show`; `conversation_id` ou `conversations/<número>` vai em `lionchat_conversations_show` | `accounts/<conta>` pode não ser a conta ativa: confira e troque antes de concluir que não existe. `conversation_id` é o número da tela (`display_id`), não o id interno |
462
464
  | Só a contagem / números | `lionchat_conversations_meta` / `lionchat_reports_summary` | Não liste o conteúdo completo |
@@ -153,6 +153,7 @@ O compromisso marcado por um tipo de evento (Booking) cai SEMPRE na agenda do pr
153
153
  nele. Na criação, `assignee_ids` nunca valeu; desde 17/09 também é **ignorado na edição**
154
154
  (`lionchat_tasks_update` / `_update_1`): a resposta é 200, o resto da edição vale e o responsável continua
155
155
  o mesmo. Para mudar quem atende, altere o profissional do tipo de evento (`booking_event_types_update`).
156
+ Número de pessoa de outra conta é recusado com 422, em qualquer compromisso.
156
157
 
157
158
  ### Ver como está o dia antes de marcar
158
159
 
@@ -415,6 +415,10 @@ Quando rate-limited:
415
415
  2026-05-15). Acima disso o servidor recusa com `422` + `code: "bulk_ids_limit_exceeded"` — quebre em
416
416
  chamadas de 300.
417
417
 
418
+ `fields.assignee_id`, `fields.team_id` e `fields.inbox_id` têm de ser da conta. Fora disso a resposta é
419
+ `422` `Invalid <campo>` e nada é aplicado. Para tirar o responsável ou o time, mande `null` ou `0`. A caixa
420
+ não aceita vazio: sem caixa, a conversa não envia nem recebe.
421
+
418
422
  **Exceção:** contato com `select_all: true` (agir sobre TODOS os contatos do filtro) **não tem teto** —
419
423
  o servidor resolve pelo próprio filtro (`query` / `labels_filter`), em lotes no fundo, e não usa `ids`.
420
424
 
@@ -301,6 +301,24 @@ Diagnóstico, nesta ordem, quando relatarem "a IA nunca faz o follow-up":
301
301
  2. A ativação veio por **lote**? Então nunca foi armado.
302
302
  3. Tem `follow_up_skip_conditions` batendo (etiqueta, atributo, janela de silêncio)?
303
303
  4. A soma das etapas passa de 1380 min? Nesse caso o assistente nem salvou a cadência.
304
+ 5. Tem pílula cinza "Follow-up não enviado: <motivo>" na conversa? Então o modelo de decisões leu a conversa e as
305
+ instruções daquele follow-up e decidiu não enviar (seção seguinte).
306
+
307
+ ## Faz ou não faz: o sistema decide antes de cada follow-up (novo 2026-11-05)
308
+
309
+ Na hora de cada Follow-up (1, 2, 3), antes de a IA escrever, o modelo de decisões lê a conversa, as instruções da IA
310
+ e, acima de tudo, as instruções daquele follow-up, e escolhe: enviar agora, ou um motivo para não enviar. Se escolhe
311
+ enviar, a IA só escreve (não desiste mais). Se não, nada sai e fica uma pílula cinza com o motivo, só para a equipe.
312
+
313
+ - **Encerram a sequência até o cliente escrever:** "o cliente já resolveu", "o cliente pediu para não receber mais",
314
+ "o assunto foi encerrado". Mensagem de fluxo, automação ou campanha no meio NÃO reabre.
315
+ - **Seguem para o próximo follow-up no tempo dele:** "aguardando retorno combinado com o cliente" e "a instrução deste
316
+ follow-up não se aplica agora".
317
+ - As condições acima (etiqueta, atributo) valem ANTES da pergunta e, desde 2026-11-05, também passam para o próximo
318
+ follow-up em vez de parar a sequência.
319
+ - Para mudar o comportamento, mude o TEXTO das instruções de cada follow-up (`follow_up_steps[].prompt`): é o que mais
320
+ pesa na decisão. Não existe chave para desligar a pergunta.
321
+ - Sem chave principal da OpenAI na conta, ou se o modelo de decisões falhar, o follow-up segue como antes (a IA decide).
304
322
 
305
323
  ## Condições para NÃO fazer follow-up + horário de silêncio (2026-07)
306
324
 
@@ -315,6 +333,8 @@ pula o follow-up). Tipos:
315
333
  ] } }
316
334
  ```
317
335
 
336
+ - `label`, `contact_attr`, `conversation_attr`: o follow-up daquele passo não sai e o seguinte é agendado no tempo dele
337
+ (desde 2026-11-05; antes a sequência parava).
318
338
  - `label`: pula se a conversa TEM (`present`) / NÃO tem (`absent`) alguma das etiquetas.
319
339
  - `contact_attr` / `conversation_attr`: pula quando o atributo do contato/conversa bate o operador
320
340
  (`equal`, `not_equal`, `contains`, `present`, `blank`, `gt`, `lt`) com `value`.
@@ -401,6 +421,55 @@ As instruções aceitam variáveis Liquid `{{ }}` que chegam JÁ PREENCHIDAS com
401
421
  - As ferramentas "Buscar FAQ" e "Buscar Artigos" são auto-gerenciadas: ligam sozinhas conforme o conteúdo e somem da tela de ferramentas (não são desligáveis por disabled_tools). Diagnóstico "IA não usa a base": confira se há FAQ APROVADA/documento, ou artigo PUBLICADO na Central de Ajuda.
402
422
  - A IA pode oferecer ao cliente o link do artigo (precisa de Portal com slug e domínio/FRONTEND_URL).
403
423
 
424
+ ## Documento que o cliente manda: PDF, Word, planilha (2026-11-06)
425
+
426
+ Como a IA de atendimento lê o arquivo que o CLIENTE manda na conversa. Nada a ligar: vale para toda conta com
427
+ Agente de IA, sem chave liga/desliga. Até 05/11/2026 o texto era cortado em 30 mil caracteres (a IA via 4 de 13
428
+ páginas de um extrato) e voltava inteiro em toda resposta; resposta anterior sua com essa explicação ficou velha.
429
+
430
+ - **Leitura:** página a página, até **50 páginas** e **8 mil caracteres por página** (arquivo até 25 MB; planilha até
431
+ 5 mil linhas por aba). O texto fica guardado no próprio anexo e NÃO vem na API.
432
+ - **Na resposta em que o documento chega**, a IA recebe o texto inteiro (até 40 mil caracteres somando os documentos
433
+ daquela vez). Documento pequeno (até 6 mil caracteres) segue inteiro no histórico.
434
+ - **Nas respostas seguintes**, o histórico mostra um cartão com o código do documento (`D-123`), as páginas lidas e
435
+ um índice. Para responder, a IA consulta a ferramenta interna `read_document` ("Ler Documento Recebido"): páginas
436
+ (`"5-9"`) ou palavra/número exato (`"RMC"`, `"1.234,56"`); até 12 mil caracteres por consulta e 40 mil por
437
+ resposta. Só documento DESTA conversa e que ainda está na memória da IA. `read_document` fica sempre ligada, não
438
+ aparece na tela de ferramentas e não se desliga por `disabled_tools` (como Buscar FAQ e Buscar Artigos).
439
+ - **PDF escaneado** (página sem texto): lido por IMAGEM por trás, até **20 páginas** por documento, com a chave OpenAI
440
+ da conta. Enquanto lê, a IA avisa o cliente que está lendo; quando termina, ela RESPONDE SOZINHA uma vez, se ainda
441
+ cuida da conversa, e essa resposta conta na cota de respostas da IA. PDF com texto e algumas páginas escaneadas:
442
+ responde na hora com as páginas de texto, e as escaneadas ficam disponíveis depois, sem resposta nova.
443
+ - **Mesmo arquivo de novo:** não lê de novo. Reenvio na mesma conversa aponta para a leitura anterior; o mesmo
444
+ arquivo em outra conversa da conta copia a leitura.
445
+ - **Teto por conversa:** 20 documentos novos por dia.
446
+ - **Pílulas para a equipe** (mensagem de atividade, `message_type` 2), uma por leitura:
447
+ - "A IA leu o documento X (N de M páginas)"
448
+ - "A IA leu o documento X (N de M páginas, acima do teto)" — passou de 50 páginas; o resto NÃO foi lido
449
+ - "A IA leu o documento X por imagem (escaneado, N de M páginas)"
450
+ - "A IA não conseguiu ler o documento X"
451
+ - "Documento X já lido antes nesta conversa"
452
+ - "Limite de documentos lidos nesta conversa hoje atingido"
453
+ - **Documento anterior ao recurso** (chegou antes de 07/11/2026 03:00 UTC): a IA ainda consulta, mas sem pílula, sem
454
+ texto de chegada e sem a resposta sozinha depois do escaneado.
455
+
456
+ Diagnóstico "a IA não achou o valor do documento": leia a pílula da conversa
457
+ (`lionchat_conversations_messages_list`). "acima do teto" = o valor pode estar depois da página 50; escaneado com
458
+ mais de 20 páginas idem; "não conseguiu ler" = arquivo protegido, corrompido ou sem chave OpenAI para o escaneado.
459
+ Para conferir o conteúdo você mesmo, baixe o arquivo pelo `data_url` do anexo: a API não traz o texto lido.
460
+
461
+ ## Transcrição de áudio (2026-11-04)
462
+
463
+ - **Onde:** Configurações > Conta > "Transcrever Mensagens de Áudio". Desde 04/11/2026 aparece para TODA conta, com
464
+ ou sem Agente de IA (antes só com a IA). Nasce DESLIGADA e usa a chave do próprio cliente, OpenAI ou Groq,
465
+ cadastrada em Integrações: o custo é do cliente, não há chave da plataforma.
466
+ - **Pela API:** `lionchat_account_settings_update` com `audio_transcriptions: true` e
467
+ `audio_transcription_provider: "openai"` ou `"groq"` (administrador). Só funciona se a conta tiver a chave daquele
468
+ provedor; sem escolher provedor, usa a OpenAI se houver chave e depois a Groq.
469
+ - **Conversa com Agente de IA:** o áudio do cliente é transcrito para a IA responder mesmo com a opção desligada, desde
470
+ que a conta tenha a função Agente de IA.
471
+ - O texto sai em `transcribed_text` do anexo de áudio (`file_type: audio`).
472
+
404
473
  ## Anti-loop de ferramentas (custo) (2026-06)
405
474
 
406
475
  - Ferramentas (webhooks/custom tools e flows) que falham agora param sozinhas: a IA recebe aviso escalonado (1ª falha = no máximo 1 retry; 2ª+ da mesma tool = pare e siga sem ela ou transfira). Tetos por turno: 5 chamadas por ferramenta e 25 no total; ao estourar, a IA dá halt e cria nota mencionando um humano (sem desligar a IA).
@@ -711,7 +711,7 @@ Todos os formatos abaixo foram conferidos linha a linha em `app/services/action_
711
711
  | `assign_team` | `[3]`. `["nil"]` desatribui |
712
712
  | `assign_captain_assistant` | `[17]` ou `[{"assistant_id": 17, "proactive": true}]` — `proactive` false = a IA assume mas nao fala na hora |
713
713
  | `deactivate_captain` | `[]` — desliga o AI Agente da conversa (novo 10/09/2026; a macro também tem) |
714
- | `send_email_to_team` | `[{"team_ids": [1], "message": "texto"}]` |
714
+ | `send_email_to_team` | `[{"team_ids": [1], "message": "texto"}]` — so times desta conta; time de outra conta na lista e ignorado |
715
715
  | `send_webhook_event` | `["https://..."]` |
716
716
  | `send_attachment` | `[blob_ids]` — so funciona se a regra ja tiver arquivo anexado; nao da pra montar so por API |
717
717
  | `change_status` | `["resolved"]`, `["open"]`, `["pending"]` ou `["snoozed"]` |
@@ -115,8 +115,9 @@ Attachment
115
115
  ├── file_type (string ou int)
116
116
  ├── extension
117
117
  ├── file (ActiveStorage attached)
118
- ├── transcribed_text (string, áudio/PDF)
119
- ├── meta (jsonb, ex: image_description)
118
+ ├── transcribed_text (string, SÓ áudio na resposta da API)
119
+ ├── meta (jsonb, ex: image_description; a leitura de documento (PDF, Word, planilha) mora aqui por página e NÃO
120
+ │ vem na API — o que a IA leu aparece na pílula de atividade da conversa)
120
121
  ├── width / height (pixels)
121
122
  └── file_size (bytes)
122
123
  ```
@@ -330,7 +331,7 @@ KanbanItem
330
331
  ├── conversation_display_id (FK opcional → Conversation.display_id)
331
332
  ├── item_details (jsonb — os campos da aba Campos ficam em item_details.custom_attributes, LISTA de
332
333
  │ {name, type, value}; nunca objeto {chave: valor})
333
- ├── custom_attributes (jsonb — coluna que NENHUMA tela mostra; nao confundir com a lista acima)
334
+ ├── custom_attributes (nas respostas e no webhook: {nome do campo: valor}, lido da lista acima; ao gravar, objeto {nome do campo: valor} que muda so os campos enviados)
334
335
  ├── assigned_agents (jsonb array — para gravar: lista de NUMEROS [5, 12])
335
336
  ├── linked_conversations (jsonb array de { display_id })
336
337
  ├── checklist (jsonb array de itens — NAO e tabela separada; ver abaixo)
@@ -402,8 +403,10 @@ Captain::Assistant
402
403
  │ activation_label (etiqueta que ativa o agente — unica por conta),
403
404
  │ min_response_time / max_response_time (delay humanizado, 1-60s),
404
405
  │ disabled_tools (array de IDs de tools desativadas pro assistente),
405
- │ (faq_lookup/search_articles NÃO são desligáveis — auto-gerenciadas: carregam só quando há
406
- │ FAQ/documento ou artigo publicado, e são escondidas do endpoint captain_assistants_tools)
406
+ │ (faq_lookup/search_articles/read_document NÃO são desligáveis — auto-gerenciadas e escondidas do
407
+ │ endpoint captain_assistants_tools: faq_lookup/search_articles carregam só quando há FAQ/documento ou
408
+ │ artigo publicado; read_document ("Ler Documento Recebido", 06/11/2026) fica sempre ligada e lê páginas
409
+ │ ou busca uma palavra do documento que o cliente mandou NA conversa)
407
410
  │ offer_ids / media_asset_ids / booking_event_type_ids (arrays de IDs vinculados),
408
411
  │ products (array legado de produtos)
409
412
  ├── guardrails (jsonb array de strings — limites duros injetados no prompt, ex: anti-pitch)
@@ -489,6 +492,7 @@ e `send_conversion` (`[{destinations, event_names, value}]` — só administrado
489
492
  `marketing_integrations_manage` consegue SALVAR a macro; executar segue livre; teto de 50 conversões por
490
493
  execução). Atributo protegido em `update_*_attribute` é recusado na execução (só no log). Executar
491
494
  (`lionchat_macros_execute`): até 100 conversas por chamada, a mesma conversa em 5 s é pulada em silêncio,
495
+ conversa que a pessoa não consegue abrir também é pulada em silêncio, com resposta 200,
492
496
  30 execuções por minuto por usuário (429). A mensagem de `send_canned_response` sai assinada por quem executou.
493
497
  Cada execução deixa na conversa a pílula "Macro: X executada por Fulano" (uma por conversa, 26/09) — vale
494
498
  também pelo MCP, então quem executa aparece no histórico da conversa.
@@ -540,7 +544,8 @@ AccountTask (agenda interna)
540
544
  │ que este compromisso é; índice único parcial por tratamento+número entre os NÃO cancelados (15/09)
541
545
  └── assignees (has_many → User, via account_task_assignments). Compromisso NASCIDO DE BOOKING
542
546
  (`booking_id` presente) tem responsável FIXO = o agente configurado no tipo de evento:
543
- `assignee_ids` enviado no update é IGNORADO (200, o resto da edição vale — 17/09)
547
+ `assignee_ids` enviado no update é IGNORADO (200, o resto da edição vale — 17/09), exceto
548
+ número de pessoa de outra conta, que é recusado com 422 (04/11)
544
549
 
545
550
  AgendaTreatment (tratamento em sessões — tools `agenda_treatments_*`; tabela agenda_treatments; 15/09)
546
551
  ├── id (PK) / account_id (FK) / contact_id (FK) / booking_event_type_id (FK, nullify)
@@ -252,11 +252,16 @@ pergunta com números diferentes, e o usuário conclui que o relatório está er
252
252
 
253
253
  ## 5. Busca com filtro estruturado
254
254
 
255
- `search_search` (tudo), `conversations_search`, `contacts_search`, `kanban_items_search` aceitam
255
+ `search_search` (tudo), `contacts_search`, `kanban_items_search` aceitam
256
256
  `conversation_filters`/`contact_filters` (JSON-string no MESMO shape do payload dos /filter, mesmo
257
257
  motor, cap 10 condições) e `kanban_filters` (JSON-string do subset flat da seção 3). Paginação por
258
258
  categoria: 15/página (kanban: primeiros 15, sem paginação).
259
259
 
260
+ `conversations_search` (busca no texto das mensagens) NÃO lê nenhum desses três filtros, e nunca leu: quem
261
+ mandou filtro ali recebeu a lista sem filtro achando que estava filtrada. Cada conversa da resposta já traz a
262
+ caixa (`inbox`) e o contato; situação, responsável e time NÃO vêm (confira com `conversations_show`). Para
263
+ recortar, ela aceita `inbox_id` e `team_id` (lista e números) e `assignee_type` (só a lista); a situação é ignorada.
264
+
260
265
  ## 6. Respostas: enxutas por padrão + paginação
261
266
 
262
267
  - **Slim (2026-07-24, default LIGADO):** listas voltam SEM campos pesados/decorativos
@@ -693,7 +693,9 @@ o botão "Usar variável" ao lado do campo alterna lista fixa ↔ variável.
693
693
 
694
694
  **`update_attribute` — campos EXATOS:** `attr_source` (`'contact'`, `'conversation'` ou `'card'`), `attr_key` (nome do atributo), `attr_value` (valor). NÃO existem `entity`/`key`/`value` — esses são ignorados e não salvam nada.
695
695
 
696
- **Coerção por TIPO (2026-07-29):** em `attr_source: 'contact'|'conversation'`, o `attr_value` de atributo personalizado é coagido pelo tipo da definição antes de gravar: número/moeda/porcentagem viram numérico ("1.234,56" → 1234.56; inteiro fica inteiro), checkbox aceita sim/não/true/false e grava BOOLEANO, lista casa caixa-insensível e grava a opção canônica, data aceita DD/MM/AAAA ou ISO, hora aceita "14:30"/"14h30". Valor irreconhecível grava como veio e o passo mostra nota âmbar no histórico. Card NÃO coage (atributo de card não tem definição tipada no backend).
696
+ **Conferência por TIPO (2026-11-04):** `attr_value` de atributo personalizado, em contato, conversa e card, só é gravado se servir para o tipo do campo: número, moeda e porcentagem usam ponto no milhar e vírgula no decimal ("1.234,56" → 1234.56), caixa de seleção aceita sim/não/true/false, lista não diferencia maiúscula e grava a opção cadastrada, data aceita DD/MM/AAAA ou ISO, hora aceita "14:30" ou "14h30". Valor errado NÃO grava: o campo fica como estava, o passo fica vermelho com o motivo no histórico e o fluxo segue. Variável vazia: passo âmbar, nada gravado.
697
+
698
+ **Card (2026-11-04):** `attr_source: 'card'` grava em `item_details.custom_attributes`, a lista que a seção "Atributos do Card" mostra. `attr_key` aceita o nome do campo ou o apelido (`valor_total`). Campo que não existe em `kanban_config.global_custom_attributes` é CRIADO como Texto, para a conta inteira, com nota no histórico: confira o nome antes, porque chave errada cria um campo novo. Conversa sem card: passo âmbar, nada gravado. Conta (Somar, Subtrair) não é oferecida em campo do card.
697
699
 
698
700
  **Empresa e Cargo (2026-09-25):** `contact.company_name` e `contact.job_title` valem em CONDIÇÃO (`attr_source: 'contact'`, `attr_key` igual ao path), em filtro de regras e como variável (`{{contact.company_name}}`, `{{contact.job_title}}`). São SÓ LEITURA: a ação "Alterar atributo do contato" NÃO grava esses dois (o texto Empresa anda junto com a empresa vinculada — para ligar a empresa use `lionchat_contacts_update` com `company_id`).
699
701
 
@@ -92,7 +92,7 @@ Glossário completo de termos, status codes, enums e conceitos da plataforma. Us
92
92
  | `image` | Foto / imagem (JPG, PNG, etc) |
93
93
  | `audio` | Áudio (geralmente vem com `transcribed_text` preenchido) |
94
94
  | `video` | Vídeo |
95
- | `file` | PDF, DOCX, qualquer outro (pode vir com `extracted_text` se for processado) |
95
+ | `file` | PDF, DOCX, planilha, qualquer outro. O texto lido pela IA NÃO vem na API (não existe `extracted_text` na resposta) |
96
96
  | `location` | Coordenadas GPS |
97
97
  | `contact` | vCard |
98
98
  | `share` | Link compartilhado |
@@ -101,7 +101,10 @@ Glossário completo de termos, status codes, enums e conceitos da plataforma. Us
101
101
 
102
102
  ### Campos importantes
103
103
  - `data_url`: URL pra baixar o arquivo (válida por tempo limitado)
104
- - `transcribed_text`: transcrição (áudio) ou texto extraído (PDF/imagem com OCR)
104
+ - `transcribed_text`: transcrição do áudio (só `audio` traz este campo na API)
105
+ - Documento lido pela IA (PDF, Word, planilha, desde 06/11/2026): o texto fica guardado no próprio anexo e NÃO
106
+ vem na API. O que ela leu aparece na pílula de atividade da conversa (ver `lionchat://docs/best-practices`,
107
+ seção "Documento que o cliente manda")
105
108
  - `meta.image_description`: descrição gerada pela IA (cache, se disponível)
106
109
  - `file_size`: bytes
107
110
  - `width`/`height`: pixels (imagens/vídeos)
@@ -423,7 +426,7 @@ mandar). Detalhes em `lionchat://docs/best-practices`.
423
426
  |---|---|---|
424
427
  | Motivo de Ganho/Perda do card | `kanban_config.win_reasons` / `loss_reasons` | ❌ NÃO |
425
428
  | Atributo em TODO card | `kanban_config.global_custom_attributes` | só se não couber acima |
426
- | Valor de um campo em UM card | `item_details.custom_attributes` — LISTA `[{name, type, value}]` casando com o campo de `kanban_config.global_custom_attributes` | a coluna `kanban_item.custom_attributes` NÃO aparece em tela nenhuma — não use pra dado que o cliente precisa ver |
429
+ | Valor de um campo em UM card | Grave com `kanban_item.custom_attributes` — objeto `{nome do campo: valor}`, só os campos enviados mudam; o valor vai para a lista `item_details.custom_attributes` (`[{name, type, value}]`), a que a tela Atributos do Card mostra | objeto dentro de `item_details.custom_attributes` é ignorado: não grava |
427
430
  | CPF, RG, CNPJ, endereço, data nasc., gênero do cliente | mecanismo NATIVO cadastral: `PATCH /contacts/{id}/cadastral` (`update_cadastral`) | ❌ NÃO (tem nativo) |
428
431
  | Tag pro contato (residencial, empresarial) | `labels` | ✅ SIM via Label |
429
432
  | Etapa do funil | `funnel.stages` | ❌ NÃO |
@@ -672,3 +675,7 @@ Ramal sem cadastro não gera registro — se o cliente diz que "liguei e não ap
672
675
  ### Erros do envio (`signature_envelopes_create`): `variaveis_sem_valor` (+ `missing[]`), `escolher_caixa` (+ `inboxes[]`),
673
676
  `entrega_falhou`, `sem_caixa_whatsapp`, `telefone_invalido`, `limite_do_mes`, `cpf_invalido`, `funcionalidade_desligada`,
674
677
  `fila_cheia` (fila única de conversão do Word cheia — repetir em instantes), `conversor_indisponivel` (o serviço de conversão de Word não respondeu — repetir em instantes).
678
+
679
+ ### Juiz do Supervisor (novo 2026-11-04)
680
+
681
+ Não tem relação com "Supervisor de caixa" nem "Supervisor de time", que são papéis de pessoa. **Supervisor de IA** é a tela que compara as IAs, e **juiz** é a análise que um administrador inicia por botão ali: outra IA lê as conversas e responde sobre cada uma (nota, disse e não fez, não soube responder, o que travou, objeções, quanto seguiu o cenário). Ele só lê e não muda a conversa. Pelo conector dá para consultar o resultado (`lionchat_captain_judge_runs_*`), mas não iniciar. Detalhes em `reports-guide`.
@@ -164,7 +164,7 @@ dos cards já marcados); lista de textos soltos, motivo sem `id`/`title` ou `id`
164
164
  | Atributo que aparece em TODO card | `kanban_config.global_custom_attributes` | ❌ custom_attribute de conversation |
165
165
  | Atributo só de um contato (CPF, endereço) | `custom_attribute_definitions` model=contact_attribute | ❌ kanban_config |
166
166
  | Atributo só de uma conversa (motivo, tag interna) | `custom_attribute_definitions` model=conversation_attribute | ❌ kanban_config |
167
- | Valor de um campo num card (aparece na aba Campos) | `item_details.custom_attributes` — LISTA `[{name, type, value}]`, com o campo definido em `kanban_config.global_custom_attributes` | ❌ `kanban_item.custom_attributes` (coluna que nenhuma tela mostra) |
167
+ | Valor de um campo num card (aparece em Atributos do Card) | `kanban_item.custom_attributes` — objeto `{nome do campo: valor}`, só os campos enviados mudam | ❌ objeto dentro de `item_details.custom_attributes` (é ignorado, não grava) |
168
168
 
169
169
  ### KanbanItem (Card)
170
170
  Um card individual dentro de uma etapa.
@@ -180,7 +180,7 @@ Um card individual dentro de uma etapa.
180
180
  | `origin_conversation_display_id` | Conversa em que o card NASCEU (só preenchida se o vínculo já foi movido). É o que o relatório de origem de lead usa, pra uma venda não mudar de mês nem de anúncio quando o card anda. |
181
181
  | `linked_conversations` | jsonb array `[{display_id: 123}, {display_id: 456}]` — múltiplas conversas |
182
182
  | `item_details` | jsonb (ver abaixo) |
183
- | `custom_attributes` | jsonb (coluna própria) — **NÃO aparece na aba Campos, no filtro do quadro nem na busca**. Os campos visíveis do card moram em `item_details.custom_attributes` (ver abaixo) |
183
+ | `custom_attributes` | Ao LER (conversa, contato, webhook): `{nome do campo: valor}`, tirado da lista `item_details.custom_attributes`. Ao GRAVAR: objeto `{nome do campo: valor}`, só os campos enviados mudam, e campo que não existe é criado como Texto (ver abaixo). Um lugar só desde 04/11/2026: a lista, que a tela Atributos do Card mostra. |
184
184
  | `assigned_agents` | jsonb array de agentes responsáveis |
185
185
  | `activities` | jsonb array — log de atividades |
186
186
  | `checklist` | **O que fica guardado:** jsonb array de tarefas do card (item: `text`/`completed`/`position` + `group_id`/`group_name` opcionais para agrupar). **O que a API devolve é OUTRA coisa** — ver o aviso logo abaixo |
@@ -233,16 +233,13 @@ Um card individual dentro de uma etapa.
233
233
  **`value`** é onde fica o valor monetário do negócio (usado em pipelines). Sempre NÚMERO — texto quebra a
234
234
  soma das colunas.
235
235
 
236
- **`custom_attributes` é uma LISTA, nunca um objeto `{chave: valor}`** (conferido no código em 18/09/2026).
237
- Cada item é `{name, type, value}` e só aparece na aba Campos se `name` **e** `type` baterem exatamente com
238
- um campo de `kanban_config.global_custom_attributes` (leia com `lionchat_kanban_config_list`).
236
+ **Os campos do card moram em UM lugar: a lista `item_details.custom_attributes`, a que a tela Atributos do Card mostra** (04/11/2026). Cada item é `{name, type, value}`.
239
237
 
240
- Como gravar pelo `lionchat_kanban_items_update` (`kanban_item.item_details`):
241
- - O `item_details` é MESCLADO só no 1º nível: cada chave enviada **troca a chave inteira** no card. Por isso
242
- a lista `custom_attributes` enviada **substitui a lista toda** — leia o card com `lionchat_kanban_items_show`
243
- e reenvie TODOS os campos, com o alterado.
244
- - Mandar objeto (`{"origem_lead": "Facebook Ads"}`) no lugar da lista **APAGA todos os campos do card**: o
245
- servidor só aceita itens `{name, type, value}` e o objeto vira vazio.
238
+ Como gravar pelo `lionchat_kanban_items_update` ou `_create`:
239
+ - **O jeito simples: `kanban_item.custom_attributes`, objeto `{nome do campo: valor}`.** Só os campos enviados mudam; os outros ficam. Campo que não existe é criado como Texto, para a conta inteira (confira o nome com `lionchat_kanban_config_list` antes: erro de digitação vira campo novo). `null` ou `""` apaga aquele campo.
240
+ - **`kanban_item.item_details.custom_attributes`, LISTA `[{name, type, value}]`, substitui a lista toda**: o `item_details` é MESCLADO só no 1º nível, e cada chave enviada troca a chave inteira no card. Leia o card antes e reenvie todos os campos. Nome novo com valor vira campo Texto. `[]` limpa a lista.
241
+ - **Objeto dentro de `item_details.custom_attributes` é IGNORADO:** não grava, não apaga, não cria campo, e o resto do pedido é salvo. É o que o card guarda quando nasce de "Criar card" (cópia dos dados da conversa), e devolver o card lido não pode criar campo nenhum.
242
+ - Texto ou lista em `kanban_item.custom_attributes` e, em `item_details.custom_attributes`, texto ou número no lugar da lista, item que não seja objeto, objeto no `value` e valor sem `name` em texto recusam o pedido inteiro com 422, e a mensagem ensina o formato.
246
243
  - Lista fechada de chaves do `item_details` (outras são descartadas em silêncio): title, description, status,
247
244
  reason, win_reason, loss_reason, attributed_to, co_attributed_to (13/10/2026, ver "Co-participante da venda"),
248
245
  duplicated_from_id, priority, value, currency, custom_attributes, offers, closed_offers, closed_offer, deadline_at,
@@ -743,14 +740,12 @@ Cada card pode receber atributos custom de 3 origens diferentes. **A escolha do
743
740
  - É o que a aba **Campos** do card mostra e edita (e o que o filtro do quadro, a busca e o fluxo leem)
744
741
  - LISTA de `{name, type, value}`; `name` + `type` precisam bater com um campo do item 2 abaixo, senão o
745
742
  valor fica gravado e **não aparece**
746
- - Grava via `kanban_items_update` em `kanban_item.item_details.custom_attributes` — a lista enviada
747
- **substitui a inteira** (leia o card antes e reenvie tudo). Objeto `{chave: valor}` no lugar da lista
748
- **apaga** os campos do card
749
- - Um campo só, sem reenviar a lista: ação `update_card_attribute` da automação/macro
750
-
751
- > **NÃO confundir com a coluna `kanban_item.custom_attributes`** (objeto `{chave: valor}` direto no card):
752
- > nenhuma tela a mostra — nem a aba Campos, nem o filtro, nem a busca. Só a ação "Alterar atributo do card"
753
- > do FlowBuilder e a leitura do fluxo a usam. Para o cliente ver o dado, use a lista acima.
743
+ - Grava via `kanban_items_update`: `kanban_item.custom_attributes` (`{nome do campo: valor}`) muda só os campos
744
+ enviados; `kanban_item.item_details.custom_attributes` (lista) **substitui a inteira**. Objeto dentro de
745
+ `item_details.custom_attributes` é ignorado: não grava
746
+ - Um campo só também pela ação `update_card_attribute` da automação/macro
747
+
748
+ > **Um lugar só:** desde 04/11/2026 `kanban_item.custom_attributes` grava nessa mesma lista, campo a campo. Antes guardava numa coluna que nenhuma tela mostrava.
754
749
 
755
750
  ### 2. `kanban_config.global_custom_attributes` (atributos globais do Kanban)
756
751
 
@@ -1002,3 +1002,8 @@ Em `agent_report` e `calls_report`, `scope_type: 'inbox'` + `scope_id` recorta *
1002
1002
  caixa: membros da caixa contando SÓ o que fizeram nela (era o defeito dos relatórios por médico
1003
1003
  saírem iguais). `'agent'`/`'team'` seguem sendo recorte de PESSOAS (trabalho na conta inteira);
1004
1004
  `'inbox'` + `dimension: 'team'` é recusado. E `lead_origin` passou a respeitar `time_range`.
1005
+
1006
+ ## Juiz do Supervisor
1007
+
1008
+ `lionchat_captain_judge_runs_results` traz, por IA, o que o juiz respondeu nas conversas já analisadas: nota, disse e não fez, não soube responder, o que travou, objeções e a média de quanto a IA seguiu cada cenário. `lionchat_captain_judge_runs_conversations` abre as conversas por trás de um número, e `lionchat_captain_judge_runs_current` mostra o andamento. São só leitura. A análise é iniciada pelo botão do Supervisor no painel, por um administrador: não há ferramenta para iniciar. Sempre traga os avisos de `warnings`, e não trate a resposta do juiz como fato: ela é uma avaliação e pode errar.
1009
+
@@ -27,10 +27,13 @@ Há DOIS tipos de 401 — leia o corpo da resposta antes de concluir:
27
27
  Agente de IA, Central de ajuda, Agenda ou Chat interno). **NÃO peça para renovar o token.** Diga ao
28
28
  usuário que o cargo dele não libera aquela área e que quem resolve é um administrador da conta
29
29
  (desmarcar a ocultação em Configurações > Funções personalizadas, ou dar outro cargo).
30
+ - **Corpo `{"error": "IDs de usuario invalidos"}`** = o token está CERTO, mas algum id em `user_ids` ou
31
+ `supervisor_ids` não é desta conta, nas rotas de membro de time. Nada mudou. **NÃO peça para renovar o
32
+ token.** Corrija a lista e chame de novo.
30
33
  - **Qualquer outro corpo** (ex.: "You need to sign in or sign up before continuing") = token de API
31
34
  inválido ou expirado. Parar e reportar que precisa renovar as credenciais.
32
35
 
33
- **Ação nos dois casos:** NÃO retry — vai falhar igual.
36
+ **Ação nos três casos:** NÃO retry igual — vai falhar igual.
34
37
 
35
38
  ### 403 Forbidden
36
39
  Token válido, mas SEM permissão pra essa ação.
@@ -500,6 +503,33 @@ mal montado — bloco de API sem saída de erro, pergunta sem para onde ir, esco
500
503
  cobra está em `lionchat://docs/formularios-publicos`. Enquanto não publicar, a página pública
501
504
  continua servindo a última versão publicada (ou nada, se nunca houve).
502
505
 
506
+ ### "A IA não achou o dado do PDF que o cliente mandou" (06/11)
507
+
508
+ Desde 06/11/2026 a IA lê o documento página a página (até 50 páginas, 8 mil caracteres por página; escaneado lido
509
+ por imagem, até 20 páginas) e consulta por página ou palavra depois. A API NÃO traz o texto lido. Leia a pílula de
510
+ atividade da conversa (`lionchat_conversations_messages_list`):
511
+ - "(N de M páginas, acima do teto)": o dado pode estar depois da página 50, que não foi lida.
512
+ - "por imagem (escaneado, N de M páginas)" com N menor que M: escaneado com mais de 20 páginas.
513
+ - "A IA não conseguiu ler o documento": arquivo protegido ou corrompido, ou escaneado sem chave OpenAI na conta.
514
+ - "Limite de documentos lidos nesta conversa hoje atingido": passou de 20 documentos novos na conversa no dia.
515
+ - Sem pílula nenhuma: documento anterior a 07/11/2026 03:00 UTC (a IA ainda consulta, sem aviso).
516
+ Regras completas: `lionchat://docs/best-practices`, seção "Documento que o cliente manda".
517
+
518
+ ### "O pixel da Meta diz 'Salvo, sem envio aceito'" / "dizia Conectado e nada chegava" (04/11)
519
+
520
+ Desde 04/11/2026 a tela só mostra "Conectado" quando a Meta já ACEITOU um envio daquele pixel com aquele token
521
+ (`last_success_at` preenchido em `lionchat_meta_pixel_integrations_list`). `enabled: true` sem `last_success_at` =
522
+ "Salvo, sem envio aceito": o salvar liga o pixel, mas a Meta nunca aceitou um evento desse par. Antes disso a tela
523
+ mostrava "Conectado" só por estar ligado, mesmo com toda tentativa recusada.
524
+ - `last_success_at` é apagado ao trocar o número do pixel ou o token, e quando o teste é recusado pela Meta (erro 4xx).
525
+ Instabilidade da Meta (5xx, sem resposta) não apaga.
526
+ - Recusa do teste (`lionchat_meta_pixel_integrations_test_event` devolve 502 com `ok: false` e o motivo em
527
+ `response.error`): código 100 com subcódigo 33 = este token não tem acesso a este pixel (número do pixel errado, ou
528
+ token gerado em outro pixel); 190 = token inválido ou vencido. O motivo das recusas de evento real fica em
529
+ `last_failure_reason` e `failed_count`.
530
+ - Conserto: gerar o token DENTRO do pixel certo (Gerenciador de Eventos > o pixel > Configurações > API de Conversões),
531
+ salvar e rodar o teste de novo.
532
+
503
533
  ## Webhooks como alternativa a polling
504
534
 
505
535
  Se você precisa monitorar mudanças em conversas/mensagens, NÃO faça polling:
@@ -924,4 +954,5 @@ pós-atendimento dele e dispara o gatilho de fluxo "agendamento concluído" —
924
954
 
925
955
  Compromisso nascido de Booking (`booking_id` presente) tem responsável fixo: o profissional do tipo de
926
956
  evento. `assignee_ids` no update é ignorado (a resposta é 200 e o resto da edição vale). Para mudar quem
927
- atende, edite o tipo de evento — ou cancele e marque de novo em outro Booking.
957
+ atende, edite o tipo de evento — ou cancele e marque de novo em outro Booking. Número de pessoa de outra
958
+ conta é recusado com 422, mesmo aí.