@lionchat/mcp-server 1.10.1 → 1.10.3

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.
@@ -179,6 +179,61 @@ Feature flag específica (ex: `feature_kanban`, `feature_captain`) está OFF.
179
179
 
180
180
  ## Cenários problemáticos
181
181
 
182
+ ### "A busca não acha o contato, mas ele existe" (novo 2026-08-04)
183
+
184
+ Primeira coisa a conferir: **o termo tem menos de 3 letras?** Desde 04/08 termo com letra precisa
185
+ de 3 caracteres; abaixo disso a busca é recusada e volta **vazia, sem erro**. Termo só de dígitos
186
+ é isento.
187
+
188
+ ```
189
+ q=Bo -> payload: [] (recusado, NÃO significa que não existe)
190
+ q=Bor -> busca normal
191
+ q=42 -> busca normal (dígito é isento)
192
+ ```
193
+
194
+ Vale nas cinco buscas: contato, conversa, mensagem, card e artigo. Um termo curto **invalida a
195
+ busca inteira**, mesmo com filtro estruturado junto.
196
+
197
+ O que fazer: complete o termo, peça o nome inteiro, ou use `lionchat_contacts_filter` com
198
+ `filter_operator: "contains"` — o `/filter` não tem esse piso.
199
+
200
+ **Nunca responda "esse contato não existe" a partir de uma busca de 1-2 letras.**
201
+
202
+ ### "Criei uma conversa e voltou o id de uma que já existia" (novo 2026-08-04)
203
+
204
+ É o comportamento novo, não é defeito. Desde 04/08 não nasce conversa nova se o contato já tem uma
205
+ **aberta** naquela caixa — o sistema devolve a existente, com HTTP 200 e sem aviso.
206
+
207
+ - Contato com conversa aberta/pendente/adiada/silenciada → devolve a existente
208
+ - Só conversa resolvida → cria nova
209
+ - Caixa com "conversa única" ligada → sempre a existente, mesmo resolvida
210
+ - Caixa de e-mail → sempre cria nova
211
+
212
+ Se você PRECISA de conversa nova, feche a anterior antes (`conversations_toggle_status` para
213
+ `resolved`). E lembre: no reuso, `assignee_id` e `status` mandados na criação são **descartados** —
214
+ troque depois com `conversations_update`.
215
+
216
+ ### "Token de cargo restrito passou a receber 403 em conversa que antes abria" (novo 2026-08-04)
217
+
218
+ Mudança de segurança, não é defeito. Até 04/08 as ações de conversa autorizavam a **CAIXA**, não a
219
+ **conversa** — então qualquer membro da caixa conseguia agir numa conversa que nem consegue abrir.
220
+ As 19 ações do controller de conversa agora conferem a conversa.
221
+
222
+ Na prática, com token de cargo restrito:
223
+
224
+ | Ação | Antes | Agora |
225
+ |---|---|---|
226
+ | `conversations_transcript` (mandar a conversa por e-mail) | Passava em qualquer conversa da caixa | Só nas que o cargo enxerga |
227
+ | Anexos e download do áudio | Idem | Idem |
228
+ | Resolver/reabrir, prioridade, silenciar, marcar não-lida, atributos | Idem | Idem |
229
+ | `conversations_scheduled_messages_list` / `_create` | **Sem autorização nenhuma** | Confere a conversa |
230
+
231
+ Dois acessos continuam valendo de propósito: conversa **órfã** (cuja caixa foi apagada) é de toda a
232
+ conta, e quem tem o **card do Kanban** enxerga a conversa vinculada mesmo sem ser membro da caixa.
233
+
234
+ Se o seu fluxo dependia do comportamento antigo, o caminho é dar acesso à caixa/time certo ao cargo
235
+ — não existe como pedir exceção pela API.
236
+
182
237
  ### "Estou recebendo 401 mesmo com token correto"
183
238
  Possíveis causas:
184
239
  - Token foi revogado
@@ -283,6 +338,42 @@ Cancelar vale pra TODOS os grupos (inclusive `permanent`, `window_expired`, `cam
283
338
  que nunca seriam reenviados) — é assim que se limpa o painel. Ações irreversíveis: confirme com o
284
339
  usuário e mostre as contagens do summary antes.
285
340
 
341
+ ### "Erro 131026 / Message undeliverable" — NUNCA chute a causa (30/07)
342
+ A Meta devolve o MESMO código 131026 pra duas coisas diferentes: **o número não tem WhatsApp** e **a
343
+ pessoa não está recebendo** (bloqueou, aparelho fora, não aceita mensagem de empresa). A Meta não diz
344
+ qual das duas — então a plataforma carimba um fato NOSSO em
345
+ `content_attributes.undeliverable_history`:
346
+
347
+ | Carimbo | O que significa | O que dizer ao cliente |
348
+ |---|---|---|
349
+ | `never_delivered` | nunca entregamos nada pra esse contato | provavelmente o número não tem WhatsApp — vale conferir o número |
350
+ | `delivered_before` | já entregamos antes, hoje não entrega | o número existe; a pessoa é que não está recebendo agora |
351
+ | ausente (mensagem antiga) | sem histórico carimbado | enuncie as DUAS possibilidades, sem escolher |
352
+
353
+ **Nunca afirme "esse número não tem WhatsApp" sem o carimbo `never_delivered`.** Foi exatamente esse
354
+ palpite que fez atendente encerrar conversa de paciente que existia (conta 56, conv 3629).
355
+
356
+ ### "Mídia recusada pela Meta (131053) e a faixa vermelha sumiu sozinha" (30/07)
357
+ Comportamento novo, não é bug. O 131053 é um balde: uma das variantes (a que menciona `weblink`) é
358
+ TRANSITÓRIA — o buscador da Meta falhou ao baixar o arquivo pela URL. Nesse caso a plataforma reenvia
359
+ sozinha, agora por upload direto, e a mensagem fica verde sem precisar de F5. As demais variantes do
360
+ 131053 (formato/tamanho recusado) NÃO são resgatadas — regra fail-closed de propósito, pra não ficar
361
+ reenviando eternamente algo que a Meta nunca vai aceitar.
362
+
363
+ ### "A mensagem falhou dizendo 'Template not found or invalid template name'" (30/07)
364
+ Se a caixa é **WhatsApp oficial** e faz mais de 24h que o cliente não fala, a causa quase sempre é a
365
+ **janela de 24h fechada** — não um template faltando. Até 30/07 o erro gravado era esse texto
366
+ enganoso; hoje a mensagem diz que a janela fechou, e o classificador põe a falha no grupo
367
+ `window_expired` (fora do reenvio em lote — reenviar não adiantaria).
368
+
369
+ Regras de produto pra explicar ao cliente:
370
+ - **Mandar template NÃO abre a janela.** Só a mensagem do CLIENTE abre.
371
+ - Fora da janela, só template aprovado sai. Texto livre é recusado pela Meta.
372
+ - O follow-up automático da IA passou a entender isso: fora das 24h ele escolhe um modelo aprovado em
373
+ vez de escrever texto livre e tomar recusa (ver `lionchat://docs/best-practices`).
374
+ - Erro sem tradução deixou de existir: todo `external_error` agora vira texto em português na bolha e
375
+ no painel de falhas. Se aparecer erro em inglês cru pro usuário, isso é reportável.
376
+
286
377
  ### "O Messenger parou de enviar / 'Invalid parameter'" (24/07)
287
378
  Causa raiz do apagão de 22 a 24/07: a Meta **aposentou a message tag** que o sistema mandava em todo
288
379
  envio de Messenger. Corrigido em 24/07. Agora o Messenger respeita a **janela de 24h** de verdade: