@lionchat/mcp-server 0.4.9 → 0.5.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 +20 -13
- package/dist/client.js.map +1 -1
- package/dist/docs/instructions.md +28 -2
- package/dist/docs/resources/api-conventions.md +51 -4
- package/dist/docs/resources/best-practices.md +75 -0
- package/dist/docs/resources/conversation-flows.md +20 -0
- package/dist/docs/resources/data-model.md +53 -3
- package/dist/docs/resources/flowbuilder-design-guide.md +35 -6
- package/dist/docs/resources/flowbuilder-patterns.md +82 -0
- package/dist/docs/resources/glossary.md +41 -1
- package/dist/docs/resources/kanban-deep-dive.md +19 -0
- package/dist/docs/resources/reports-guide.md +20 -0
- package/dist/docs/resources/troubleshooting.md +28 -0
- package/dist/tools.js +116 -35
- package/dist/tools.js.map +1 -1
- package/dist/utils.js +28 -50
- package/dist/utils.js.map +1 -1
- package/endpoints.json +3695 -26
- package/package.json +1 -1
|
@@ -174,11 +174,21 @@ Glossário completo de termos, status codes, enums e conceitos da plataforma. Us
|
|
|
174
174
|
|
|
175
175
|
- `id`: ID interno
|
|
176
176
|
- `name`: nome do agente (ex: "Luna", "Diogo")
|
|
177
|
+
- `paused`: botão de pânico — `true` corta respostas/follow-ups/callbacks na hora (top-level, auditado)
|
|
178
|
+
- `guardrails`: array de limites duros injetados no prompt (ex: anti-pitch)
|
|
179
|
+
- `response_guidelines`: array de diretrizes de estilo de resposta
|
|
177
180
|
- `config.feature_memory`: gera notas no contato ao resolver conversas
|
|
178
181
|
- `config.feature_faq`: gera FAQs sugeridas ao resolver conversas
|
|
182
|
+
- `config.feature_follow_up` + `config.follow_up_steps`: follow-up automático em cadência de até
|
|
183
|
+
3 etapas (cada ≥5 min, soma ≤24h) quando o cliente some — motor dedicado só-leitura
|
|
179
184
|
- `config.model`: modelo OpenAI usado (gpt-4o, gpt-4o-mini)
|
|
180
185
|
- `config.temperature`: 0.0-1.0
|
|
181
|
-
- `config.instructions`: prompt sistema (Liquid template)
|
|
186
|
+
- `config.instructions`: prompt sistema (Liquid template, até 20.000 chars)
|
|
187
|
+
- `config.activation_label`: etiqueta que ativa o agente na conversa (única por conta)
|
|
188
|
+
- **Cenário (Captain::Scenario)**: instrução situacional inline do assistente; o raciocínio de
|
|
189
|
+
aplicação fica no "caderninho do cenário" da conversa (scenario_checklist, card Raciocínio)
|
|
190
|
+
- **Regra DITO ≠ SALVO**: a IA só considera coletado o dado que foi PERSISTIDO — salva cada dado
|
|
191
|
+
na hora e não repergunta o que já salvou
|
|
182
192
|
|
|
183
193
|
## Account (Conta)
|
|
184
194
|
|
|
@@ -309,3 +319,33 @@ Glossário completo de termos, status codes, enums e conceitos da plataforma. Us
|
|
|
309
319
|
Campos MUTÁVEIS (atualizáveis livremente por IA/integração): `marital_status`, `profession` e todos os campos de `address`.
|
|
310
320
|
|
|
311
321
|
`custom_attribute_definitions` (model=`contact_attribute`) fica reservado a dado de NEGÓCIO genérico que não tem modelo dedicado (ex: "plano contratado", "nicho do cliente").
|
|
322
|
+
|
|
323
|
+
## Ligação WhatsApp (WhatsappCall) — voz pela API oficial
|
|
324
|
+
|
|
325
|
+
Chamada de VOZ feita/recebida pelo WhatsApp (Cloud API, enterprise). **Não confundir com VoIP
|
|
326
|
+
(Zenvia)**, que é ligação TELEFÔNICA comum — são dois produtos distintos com tools distintas:
|
|
327
|
+
- `whatsapp_calls_*` → ligação de voz pelo WhatsApp (histórico, favoritas, observação,
|
|
328
|
+
transcrição por IA sob demanda)
|
|
329
|
+
- `voip_*` → telefonia Zenvia (ramais, saldo, recarga)
|
|
330
|
+
Campos: `status` (ringing/accepted/completed/failed), `custom_name` (observação), `favorited`,
|
|
331
|
+
`transcript` + `transcript_status`. Ativação por caixa: `enable_whatsapp_calling`.
|
|
332
|
+
|
|
333
|
+
## Chat interno da equipe (InternalChat)
|
|
334
|
+
|
|
335
|
+
Mensagens ENTRE agentes da conta (não envolve cliente). Salas `direct` (1:1) ou `multi_user`
|
|
336
|
+
(grupo), com reações, fixadas, anexos e não-lidas. Tools `internal_chat_*`. Não confundir com
|
|
337
|
+
nota privada (que mora DENTRO de uma conversa com cliente).
|
|
338
|
+
|
|
339
|
+
## LionTrack / Jornada do Lead
|
|
340
|
+
|
|
341
|
+
Rastreamento de navegação do site (tracking_events, pageviews) + painel "Jornada do Lead" em
|
|
342
|
+
Relatórios: mapa visual de por onde os leads andam (nós = páginas, setas = transições), agrupado
|
|
343
|
+
por FASES configuráveis (LiontrackJourneyStage: padrão de URL → fase, match literal).
|
|
344
|
+
Feature flag `liontrack` (404 sem ela). Relatório: `journey_funnel_reports` (v2), janela máx 30
|
|
345
|
+
dias, URLs sem querystring (LGPD).
|
|
346
|
+
|
|
347
|
+
## Idiomas da plataforma (2026-06)
|
|
348
|
+
|
|
349
|
+
A plataforma opera com 6 idiomas: `en`, `es`, `fr`, `it`, `pt`, `pt_BR` (default das contas
|
|
350
|
+
brasileiras: pt_BR). Conta com idioma antigo/descontinuado cai em inglês. Notas internas geradas
|
|
351
|
+
pela IA saem no idioma da conta.
|
|
@@ -253,6 +253,25 @@ Funil "Vendas"
|
|
|
253
253
|
|
|
254
254
|
Endpoint: `GET /api/v2/kanban/items/counts` retorna contagem + soma por etapa.
|
|
255
255
|
|
|
256
|
+
## Controle de acesso por funil (2026-06-10)
|
|
257
|
+
|
|
258
|
+
Funis agora têm visibilidade por usuário. Um funil é visível pra alguém quando:
|
|
259
|
+
- é admin da conta, OU
|
|
260
|
+
- tem permissão `kanban_view`/`kanban_manage` (custom role), OU
|
|
261
|
+
- o funil está aberto a todos, OU
|
|
262
|
+
- a pessoa participa do funil (está em `settings.agents` ou tem card atribuído)
|
|
263
|
+
|
|
264
|
+
**Efeitos práticos nas tools:**
|
|
265
|
+
- `funnels_list` retorna SÓ os funis visíveis pro usuário do token
|
|
266
|
+
- `funnels_show` / `stage_stats` de funil não-visível → **404** (não "lista vazia")
|
|
267
|
+
- A resposta dos cards traz selos de permissão calculados no backend:
|
|
268
|
+
`can_edit`, `can_move`, `can_delete`, `can_assign` (booleans)
|
|
269
|
+
- `kanban_items_move` sem permissão → **403** com mensagem traduzida (antes dava 500/sucesso falso)
|
|
270
|
+
- Cards embutidos na tela da conversa também respeitam a visibilidade
|
|
271
|
+
|
|
272
|
+
**Pro MCP:** antes de tentar mover/editar card, confira os campos `can_*` do show — se `can_move`
|
|
273
|
+
é false, explique ao usuário que ele não tem acesso àquele funil em vez de tentar mesmo assim.
|
|
274
|
+
|
|
256
275
|
## Funil arquivado vs ativo
|
|
257
276
|
|
|
258
277
|
- `archived = true`: funil escondido da UI principal. Cards ainda existem mas não aparecem nas listas
|
|
@@ -280,6 +280,26 @@ atual. Se since-until = 7d, previous = 7d antes. Pra esses dois, passe `since/un
|
|
|
280
280
|
inteiro e use o `previous` retornado em vez de comparar na mão.
|
|
281
281
|
Nos demais (agente/time/inbox/label/canal e timeseries) NÃO há `previous` — chame duas vezes.
|
|
282
282
|
|
|
283
|
+
## Jornada do Lead (LionTrack) — relatório novo (2026-06)
|
|
284
|
+
|
|
285
|
+
`GET /api/v2/accounts/{id}/journey_funnel_reports` — mapa agregado de navegação dos
|
|
286
|
+
leads no site ANTES de virarem conversa (nós = páginas, arestas = transições página A → página B,
|
|
287
|
+
agrupado por fases configuradas em `liontrack/journey_stages`).
|
|
288
|
+
|
|
289
|
+
**Filtros (query):** `since`/`until` (janela MÁX 30 dias — acima disso o servidor corta sozinho),
|
|
290
|
+
`utm_source`, `utm_campaign`, `device_name`, `country`, `contact_id` (trilha de 1 lead),
|
|
291
|
+
`with_conversation=true` (só quem virou conversa).
|
|
292
|
+
|
|
293
|
+
**Retorno:** `nodes` (página, fase, visitas, visitantes únicos), `edges` (transições com contagem),
|
|
294
|
+
totais. URLs vêm SEM querystring (proteção LGPD — e-mail/CPF em URL nunca aparecem).
|
|
295
|
+
|
|
296
|
+
**Gates:** feature flag `liontrack` (404 se desligada) + permissão de relatórios (admin ou
|
|
297
|
+
report_manage). As fases são geridas pelas tools `liontrack_journey_stages_*` (padrão de URL →
|
|
298
|
+
fase, match literal de substring, sem regex).
|
|
299
|
+
|
|
300
|
+
**Perguntas que esse relatório responde:** "por onde os leads entram?", "qual página perde mais
|
|
301
|
+
gente?", "quem veio da campanha X navegou por onde antes de chamar?".
|
|
302
|
+
|
|
283
303
|
## Quando o usuário pede algo MUITO específico que não existe num endpoint
|
|
284
304
|
|
|
285
305
|
Se a pergunta requer cálculos custom (ex: "conversas por agente que duraram mais de X minutos"):
|
|
@@ -201,6 +201,34 @@ Padrões que causam:
|
|
|
201
201
|
- Não cache de dados estáticos
|
|
202
202
|
- Loop sem `break` apropriado
|
|
203
203
|
|
|
204
|
+
## Cenários de produto (diagnóstico rápido, 2026-06)
|
|
205
|
+
|
|
206
|
+
### "Mensagens pro contato X não chegam no WhatsApp (WAHA)" — contato mudo
|
|
207
|
+
Causa clássica: cache de LID inválido no contato. Desde 2026-06-10 há **self-healing**: o LID
|
|
208
|
+
é validado (formato `digitos@lid`), o cache invalida sozinho se o número conectado ou o canal
|
|
209
|
+
mudarem, e o envio re-resolve o LID na primeira falha. Se ainda assim falhar: confira
|
|
210
|
+
`additional_attributes.waha_whatsapp_lid` do contato e o status da sessão
|
|
211
|
+
(`GET /inboxes/{id}/waha/status`).
|
|
212
|
+
|
|
213
|
+
### "Cliente mandou um contato (vCard) e não apareceu nada"
|
|
214
|
+
Corrigido em 2026-06-09: vCard agora vira anexo `file_type: "contact"` na mensagem (nome +
|
|
215
|
+
telefone extraídos). Em versões antigas a mensagem era descartada.
|
|
216
|
+
|
|
217
|
+
### "IA parou de responder / erro de OpenAI"
|
|
218
|
+
- Mensagens de erro agora distinguem **sem saldo** (insufficient_quota) de **limite de taxa** (429).
|
|
219
|
+
- A conta pode ter **chaves OpenAI reservas** (fallback automático com cooldown — configurado na
|
|
220
|
+
integração OpenAI, campo fallback_api_keys). Se a principal falha, a reserva assume sozinha.
|
|
221
|
+
- A chave é validada na hora de salvar a integração (chave inválida nem salva).
|
|
222
|
+
- Se a transcrição de um áudio falha, a IA **não responde no escuro** — ela espera intervenção
|
|
223
|
+
em vez de responder sem saber o que o cliente disse.
|
|
224
|
+
- Sem AI Agente ativo na conversa = nenhuma resposta de IA (motor antigo V1 foi aposentado).
|
|
225
|
+
- IA travada pelo anti-loop avisa um humano via notificação (não fica muda).
|
|
226
|
+
|
|
227
|
+
### "Editei o evento no Google Calendar e não sincronizou"
|
|
228
|
+
Auto-cura desde 2026-06-09: o vigia horário re-arma o "watch" morto de conexões saudáveis
|
|
229
|
+
sozinho (sem reconectar a conta). Se persistir >1h, aí sim investigar a conexão
|
|
230
|
+
(`google_calendar` tools — campo watch_expiration).
|
|
231
|
+
|
|
204
232
|
## Webhooks como alternativa a polling
|
|
205
233
|
|
|
206
234
|
Se você precisa monitorar mudanças em conversas/mensagens, NÃO faça polling:
|
package/dist/tools.js
CHANGED
|
@@ -151,6 +151,13 @@ function buildZodSchema(params) {
|
|
|
151
151
|
.describe('ID da conta. Opcional — se ausente, usa LIONCHAT_ACCOUNT_ID. Informe para chamar uma conta diferente sem reiniciar o MCP.');
|
|
152
152
|
continue;
|
|
153
153
|
}
|
|
154
|
+
// AIDEV-NOTE: B3 (2026-06-02) — file upload não é suportado no MCP v1. Se o param file
|
|
155
|
+
// for `required`, ele entraria no required[] do schema mas o handler rejeita assim que
|
|
156
|
+
// for fornecido → tool impossível de chamar. Não expomos file no schema: a tool roda com
|
|
157
|
+
// os demais params (o aviso fica na descrição; o guard abaixo permanece como defesa).
|
|
158
|
+
if (param.type === 'file') {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
154
161
|
shape[param.name] = paramTypeToZod(param);
|
|
155
162
|
}
|
|
156
163
|
// AIDEV-NOTE: Some endpoints embed {account_id} in the path but do NOT declare it as a param.
|
|
@@ -185,7 +192,9 @@ function registerSingleTool(server, config, client, endpoint) {
|
|
|
185
192
|
if (hasFile) {
|
|
186
193
|
const fileParams = endpoint.params.filter((p) => p.type === 'file');
|
|
187
194
|
for (const fp of fileParams) {
|
|
188
|
-
|
|
195
|
+
// AIDEV-NOTE: B10 (2026-06-02) — trata "" como "não fornecido" (igual ao remoto
|
|
196
|
+
// runner.ts), pra os dois conectores terem o mesmo guard de file vazio.
|
|
197
|
+
if (params[fp.name] !== undefined && params[fp.name] !== null && params[fp.name] !== '') {
|
|
189
198
|
return {
|
|
190
199
|
content: [
|
|
191
200
|
{
|
|
@@ -274,81 +283,149 @@ function registerListCategoriesTool(server, allEndpoints) {
|
|
|
274
283
|
// Helps LLMs build correct flow_data without hitting trial-and-error on
|
|
275
284
|
// node types, action keys, source handles, etc.
|
|
276
285
|
function registerFlowsSchemaReferenceTool(server) {
|
|
277
|
-
const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE
|
|
286
|
+
const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-06-11)
|
|
278
287
|
|
|
279
288
|
flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
280
289
|
|
|
290
|
+
═══ DOIS TIPOS DE FLOW ═══
|
|
291
|
+
- conversation (default): dispara por evento de inbox. Criar via lionchat_flows_create.
|
|
292
|
+
- ai_tool: ferramenta que o AI Agente invoca. Criar via lionchat_flow_tools_create (NAO flows_create!),
|
|
293
|
+
com tool_name (snake_case, max 50) + tool_description (max 500). SEM inbox_ids. No 'end' OBRIGATORIO.
|
|
294
|
+
Nodes permitidos em ai_tool: start, end, api, condition, set_variable, ai, randomizer, action,
|
|
295
|
+
send_message, note (SEM wait, wait_response, update_group). No action de ai_tool NAO use keys da
|
|
296
|
+
aba Sistema (send_webhook/start_flow). Vincular ao assistente: POST /flow_tools/{id}/assistants.
|
|
297
|
+
Testar: POST /flow_tools/{id}/run.
|
|
298
|
+
|
|
281
299
|
═══ NODE GERAL ═══
|
|
282
|
-
{ "id": "string-unico", "type": "start|send_message|wait_response|condition|action|api|set_variable|wait|randomizer|update_group|ai|end", "position": {"x":0,"y":0}, "data": { ... } }
|
|
300
|
+
{ "id": "string-unico", "type": "start|send_message|wait_response|condition|action|api|set_variable|wait|randomizer|update_group|ai|end|note", "position": {"x":0,"y":0}, "data": { ... } }
|
|
301
|
+
(activate_flow existe como node LEGADO — nao crie novos; use action start_flow)
|
|
283
302
|
|
|
284
303
|
═══ NODE TYPES + source handles ═══
|
|
285
304
|
|
|
286
305
|
▸ start
|
|
287
|
-
data: { label }
|
|
288
|
-
(
|
|
306
|
+
data: { label, triggers: [...] }
|
|
307
|
+
Triggers: message_received (keywords[] min 3 chars + match_type 'contains'|'exact' — dispara em
|
|
308
|
+
QUALQUER msg do cliente que case), conversation_created/conversation_reopened (match_mode +
|
|
309
|
+
keywords opcionais), conversation_resolved, label_added/label_removed (label_names[] — NAO
|
|
310
|
+
'label' singular), card_created/card_moved (funnel_ids[] + funnel_stages[] 'funnel_id:stage'),
|
|
311
|
+
cron, webhook.
|
|
312
|
+
WEBHOOK EMBUTIDO (Webhook Universal): 1) criar flow; 2) POST /custom_webhook_integrations com
|
|
313
|
+
{custom_webhook_integration:{flow_id}} (idempotente, retorna URL unica); 3) flows_update com
|
|
314
|
+
item {type:'webhook_received', config:{integration_id}} no data.items do start. Remover o item
|
|
315
|
+
desativa o webhook. Excluir flow destroi o webhook. Duplicar flow NAO copia o gatilho.
|
|
316
|
+
Handle: "success".
|
|
289
317
|
|
|
290
318
|
▸ send_message
|
|
291
319
|
data: { label, messageItems: [
|
|
292
320
|
{ id, type:"text", content },
|
|
293
|
-
{ id, type:"
|
|
294
|
-
{ id, type:"
|
|
321
|
+
{ id, type:"delay", seconds },
|
|
322
|
+
{ id, type:"whatsapp_template", templateId, params },
|
|
323
|
+
{ id, type:"canned_response"|"user_input"|"attachment"|"audio", ... }
|
|
295
324
|
]}
|
|
296
|
-
|
|
297
|
-
|
|
325
|
+
ATENCAO: messageItems (NAO items).
|
|
326
|
+
Botoes: item text com buttons_enabled=true + buttons:[{title,value}] gera handle "button_{value}"
|
|
327
|
+
por botao + "no_response" (texto livre em vez de clique) + "no_reply_timeout" (se timeout).
|
|
328
|
+
Handles sem botoes: "success", "error".
|
|
298
329
|
|
|
299
330
|
▸ wait_response
|
|
300
331
|
data: {
|
|
301
|
-
label, waitTime, waitUnit: "minutes"|"seconds",
|
|
332
|
+
label, waitTime, waitUnit: "minutes"|"seconds"|"hours",
|
|
302
333
|
validation: "any"|"options"|"regex",
|
|
303
334
|
acceptedOptions: ["1","2"], // se validation='options'
|
|
304
335
|
regexPattern, // se validation='regex'
|
|
305
336
|
invalidMessage, maxRetries,
|
|
306
|
-
saveTo: "variable"|"
|
|
307
|
-
saveVariable, saveAttrKey
|
|
337
|
+
saveTo: "variable"|"contact_name"|"contact_email"|"contact_phone"|"contact_attr"|"conversation_attr"|"",
|
|
338
|
+
saveVariable, saveAttrKey // saveAttrKey obrigatorio p/ contact_attr e conversation_attr
|
|
308
339
|
}
|
|
340
|
+
saveTo "attribute"/"contact_attribute" NAO EXISTEM — nao salvam nada.
|
|
341
|
+
TIMEOUT DISPARA DE VERDADE (corrigido 2026-06-09): waitTime estourou -> handle "timeout"
|
|
342
|
+
(ou "option_{val}_timeout" no modo options). Sempre ligue um edge no timeout.
|
|
309
343
|
Handles validation='options': "option_{val}" por opcao + "timeout"
|
|
310
344
|
Handles outros: "success" + "timeout"
|
|
311
345
|
IMPORTANTE: validation='options' ja roteia por opcao — NAO precisa condition depois.
|
|
312
346
|
|
|
313
347
|
▸ condition
|
|
314
348
|
data: { label, conditions: [
|
|
315
|
-
{ id, label, field, operator, value
|
|
349
|
+
{ id, label, field, operator, value }
|
|
316
350
|
]}
|
|
317
|
-
Handles: id
|
|
351
|
+
Handles: "cond_0", "cond_1", ... (POSICAO no array, NAO o id da condicao!) + "default".
|
|
352
|
+
First-match-wins: avalia em ordem e PARA na primeira que bate.
|
|
353
|
+
Operadores: equal/not_equal, contains/not_contains, starts_with/ends_with,
|
|
354
|
+
is_empty/is_not_empty (NAO existe is_present/is_blank), greater_than/less_than,
|
|
355
|
+
number_range ("min-max"), regex, equal_any/contains_any (values[]),
|
|
356
|
+
business_hours/outside_business_hours, can_reply/can_reply_closed,
|
|
357
|
+
conversation_has_agent/no_agent, contact_has_label/conversation_has_label,
|
|
358
|
+
kanban_exists/kanban_in_stage/kanban_won/kanban_lost, pagetrack_visited/pagetrack_event.
|
|
359
|
+
Operador numerico SO em atributo numero.
|
|
318
360
|
|
|
319
361
|
▸ action
|
|
320
|
-
data: { label, items: [
|
|
321
|
-
{ key, config: {...} }
|
|
322
|
-
]}
|
|
362
|
+
data: { label, items: [ { key, config: {...} } ] }
|
|
323
363
|
ATENCAO: items[].config NAO items[].params.
|
|
324
364
|
Keys validas:
|
|
325
365
|
Conversa: assign_agent({agent_id}), assign_team({team_id}),
|
|
326
|
-
change_status({status
|
|
327
|
-
mute_conversation({}), add_private_note({content}),
|
|
328
|
-
|
|
366
|
+
change_status({status: open|resolved|pending|snoozed}), change_priority({priority}),
|
|
367
|
+
mute_conversation({}), add_private_note({content}), send_email_transcript({email}),
|
|
368
|
+
add_conversation_label({labels:[...]}), remove_conversation_label({labels:[...]}), // etiqueta NA CONVERSA
|
|
329
369
|
assign_captain({assistant_id}), deactivate_captain({})
|
|
330
|
-
Contato: add_label({labels:[...]}), remove_label({labels:[...]}),
|
|
331
|
-
update_attribute({attr_source,attr_key,attr_value})
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
370
|
+
Contato: add_label({labels:[...]}), remove_label({labels:[...]}), // etiqueta NO CONTATO
|
|
371
|
+
update_attribute({attr_source:'contact'|'conversation'|'card', attr_key, attr_value})
|
|
372
|
+
— campos EXATOS (NAO entity/key/value). Somar/subtrair via Liquid no attr_value:
|
|
373
|
+
"{{ contact.custom_attribute.pontos | plus: 1 }}"
|
|
374
|
+
Kanban: create_kanban_item({funnel_id, funnel_stage, title?, description?})
|
|
375
|
+
— funnel_id e funnel_stage OBRIGATORIOS; title/description aceitam {{ }},
|
|
376
|
+
move_kanban_stage({funnel_id,funnel_stage}), set_kanban_item_status({status:won|lost|active}),
|
|
377
|
+
set_won({}), set_lost({reason?}), assign_agent_card({agent_id}), add_card_note({content})
|
|
378
|
+
Sistema (SO flow conversation): send_webhook({url,headers?,body?}), start_flow({flow_id}),
|
|
379
|
+
deactivate_flow({})
|
|
380
|
+
Handles: "success" (sem handle error — falha vira warning e o flow continua).
|
|
338
381
|
|
|
339
382
|
▸ api
|
|
340
383
|
data: { label, method, url, headers:[{key,value}], body, apiResponseVar }
|
|
341
384
|
Handles: "success", "error"
|
|
342
385
|
|
|
386
|
+
▸ ai
|
|
387
|
+
data: { label, aiMode: "generate"|"intent"|"sentiment"|"extract", aiPrompt,
|
|
388
|
+
aiIntents: [{name}], // se intent — ARRAY DE OBJETOS (NAO array de strings)
|
|
389
|
+
aiResponseVar, // se extract
|
|
390
|
+
contextMessages: 25|50|75|100 } // quantas msgs a IA enxerga
|
|
391
|
+
Handles intent: "intent_{name}" por intencao + "no_intent" + "error" (var {{ai_intent}} disponivel)
|
|
392
|
+
Handles sentiment: "positive", "negative", "neutral" + "error"
|
|
393
|
+
Handles generate/extract: "success", "error"
|
|
394
|
+
|
|
343
395
|
▸ set_variable
|
|
344
396
|
data: { label, variables: [{name,value}] }
|
|
397
|
+
Handle: "success"
|
|
345
398
|
|
|
346
399
|
▸ wait
|
|
347
|
-
data: { label, waitTime, waitUnit }
|
|
400
|
+
data: { label, waitTime, waitUnit: seconds|minutes|hours|days|weekday }
|
|
401
|
+
weekday: + targetWeekday (0=dom..6=sab) + targetHour (0-23)
|
|
402
|
+
Handle: "success"
|
|
348
403
|
|
|
349
404
|
▸ randomizer
|
|
350
|
-
data: { label, branches:[{id,
|
|
351
|
-
Handles: id de cada branch.
|
|
405
|
+
data: { label, mode:"branches", branches:[{id,label,weight}] }
|
|
406
|
+
Handles: o id de cada branch.
|
|
407
|
+
|
|
408
|
+
▸ update_group (WAHA, conversa de grupo apenas)
|
|
409
|
+
Handles: "success", "error"
|
|
410
|
+
|
|
411
|
+
▸ end
|
|
412
|
+
Terminal, sem handles de saida. Em conversation: encerra o ramo. Em ai_tool: OBRIGATORIO —
|
|
413
|
+
data define o retorno estruturado pro LLM (suporta saida Liquid com {{ }}).
|
|
414
|
+
|
|
415
|
+
▸ note
|
|
416
|
+
Sticky note visual. Sem handles, nunca executa, nao ligue edges.
|
|
417
|
+
|
|
418
|
+
═══ VARIAVEIS {{ }} ═══
|
|
419
|
+
contact.name, contact.email, contact.phone, contact.custom_attribute.X (SINGULAR — plural resolve vazio)
|
|
420
|
+
CADASTRAL forma curta (canonica): contact.cpf, contact.cnpj, contact.rg, contact.address.street,
|
|
421
|
+
contact.address.number, ... (NAO e custom_attribute!)
|
|
422
|
+
conversation.id, conversation.status, conversation.team_id, conversation.agent_id,
|
|
423
|
+
conversation.labels, conversation.custom_attribute.X
|
|
424
|
+
account.custom_attribute.X, env.CHAVE, {{var_criada_no_set_variable}}, {{ai_intent}}, {{api_response_var}}
|
|
425
|
+
|
|
426
|
+
═══ ANTI-LOOP ═══
|
|
427
|
+
Cadeias automacao<->flow tem profundidade maxima 5 hand-offs (MAX_CHAIN_DEPTH). No 5o a cadeia e
|
|
428
|
+
cortada em silencio. "Flow nao disparou" no fim de cadeia longa = essa protecao.
|
|
352
429
|
|
|
353
430
|
═══ EDGES ═══
|
|
354
431
|
[{ "id", "source", "target", "sourceHandle", "type":"deletable", "animated":true }]
|
|
@@ -358,10 +435,14 @@ sourceHandle OBRIGATORIO casar com handle exposto pelo node source.
|
|
|
358
435
|
1. action items[].config (nao params)
|
|
359
436
|
2. send_message messageItems (nao items)
|
|
360
437
|
3. wait_response validation='options' roteia por handle 'option_X' — NAO use condition depois
|
|
361
|
-
4.
|
|
438
|
+
4. condition usa 'cond_0'/'cond_1' (INDICE) + 'default' — NUNCA o id da condicao ('c1' QUEBRA)
|
|
362
439
|
5. inbox_ids no MCP vai no nivel raiz; no PUT bruto vai em {flow:{inbox_ids:[]}}
|
|
363
440
|
6. send_message com buttons gera 'button_{value}' (value do botao, nao titulo)
|
|
364
|
-
7. condition.field
|
|
441
|
+
7. condition.field/mensagens aceitam liquid: '{{conversation.team_id}}', '{{contact.custom_attribute.plano}}',
|
|
442
|
+
'{{contact.cpf}}' (cadastral curto), '{{var_nome}}' — NUNCA '{{contact.attributes.X}}'
|
|
443
|
+
8. saveTo 'attribute'/'contact_attribute' nao existem — use 'contact_attr'/'conversation_attr'
|
|
444
|
+
9. ai_tool via flow_tools_create (flows_create rejeita/cria do tipo errado); no end obrigatorio
|
|
445
|
+
10. node sem position empilha tudo em (0,0) — sempre informe e nunca repita (x,y)
|
|
365
446
|
|
|
366
447
|
═══ EXEMPLO MINIMO — Menu 3 opcoes ═══
|
|
367
448
|
{
|
|
@@ -388,8 +469,8 @@ sourceHandle OBRIGATORIO casar com handle exposto pelo node source.
|
|
|
388
469
|
}}
|
|
389
470
|
],
|
|
390
471
|
"edges":[
|
|
391
|
-
{"id":"e1","source":"s1","target":"m1","type":"deletable","animated":true},
|
|
392
|
-
{"id":"e2","source":"m1","target":"w1","type":"deletable","animated":true},
|
|
472
|
+
{"id":"e1","source":"s1","target":"m1","sourceHandle":"success","type":"deletable","animated":true},
|
|
473
|
+
{"id":"e2","source":"m1","target":"w1","sourceHandle":"success","type":"deletable","animated":true},
|
|
393
474
|
{"id":"e3","source":"w1","sourceHandle":"option_1","target":"a1","type":"deletable","animated":true},
|
|
394
475
|
{"id":"e4","source":"w1","sourceHandle":"option_2","target":"a2","type":"deletable","animated":true},
|
|
395
476
|
{"id":"e5","source":"w1","sourceHandle":"option_3","target":"a3","type":"deletable","animated":true}
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
|
@@ -69,64 +69,42 @@ export function separateParams(input, paramDefs, bodyWrapper) {
|
|
|
69
69
|
// names into nested objects. Example: `config.temperature` => body.config.temperature
|
|
70
70
|
// Rationale: Rails strong_params expect nested objects (e.g. assistant: { config: {...} })
|
|
71
71
|
// not flat keys with dots. Without this expansion the backend silently drops the field.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
72
|
+
// B2 (2026-06-02): deep-merge em CADA nível (não só na raiz). Misturar `item_details: {...}`
|
|
73
|
+
// (objeto) com `item_details.title` (sub-path) no mesmo input preserva ambos os lados — o
|
|
74
|
+
// resultado deixa de depender da ordem de Object.entries. Objetos planos fazem merge;
|
|
75
|
+
// arrays e escalares SUBSTITUEM.
|
|
76
|
+
const isPlainObject = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
77
|
+
const deepMerge = (target, source) => {
|
|
78
|
+
for (const [k, v] of Object.entries(source)) {
|
|
79
|
+
const existing = target[k];
|
|
80
|
+
if (isPlainObject(existing) && isPlainObject(v)) {
|
|
81
|
+
deepMerge(existing, v);
|
|
81
82
|
}
|
|
82
83
|
else {
|
|
83
|
-
|
|
84
|
+
target[k] = v;
|
|
84
85
|
}
|
|
85
|
-
return;
|
|
86
86
|
}
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
};
|
|
88
|
+
const assignBody = (name, value) => {
|
|
89
|
+
// Constrói o objeto aninhado representado pelo nome (a.b.c => {a:{b:{c:value}}}).
|
|
90
|
+
const parts = name.split('.');
|
|
91
|
+
let built = value;
|
|
92
|
+
for (let i = parts.length - 1; i >= 1; i--) {
|
|
93
|
+
built = { [parts[i]]: built };
|
|
94
|
+
}
|
|
95
|
+
const root = parts[0];
|
|
89
96
|
const existing = bodyParams[root];
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
nested[leaf] = value;
|
|
97
|
+
if (isPlainObject(built) && isPlainObject(existing)) {
|
|
98
|
+
deepMerge(existing, built);
|
|
99
|
+
}
|
|
100
|
+
else if (isPlainObject(built)) {
|
|
101
|
+
const container = {};
|
|
102
|
+
deepMerge(container, built);
|
|
103
|
+
bodyParams[root] = container;
|
|
98
104
|
}
|
|
99
105
|
else {
|
|
100
|
-
|
|
101
|
-
const subPath = leaf;
|
|
102
|
-
const subRoot = subPath.slice(0, innerDot);
|
|
103
|
-
const subRest = subPath.slice(innerDot + 1);
|
|
104
|
-
const subExisting = nested[subRoot];
|
|
105
|
-
const subTarget = subExisting && typeof subExisting === 'object' && !Array.isArray(subExisting)
|
|
106
|
-
? subExisting
|
|
107
|
-
: {};
|
|
108
|
-
// Iteratively walk the rest of the path
|
|
109
|
-
let cursor = subTarget;
|
|
110
|
-
let remaining = subRest;
|
|
111
|
-
while (true) {
|
|
112
|
-
const idx = remaining.indexOf('.');
|
|
113
|
-
if (idx <= 0) {
|
|
114
|
-
cursor[remaining] = value;
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
const head = remaining.slice(0, idx);
|
|
118
|
-
const tail = remaining.slice(idx + 1);
|
|
119
|
-
const next = cursor[head];
|
|
120
|
-
const nextObj = next && typeof next === 'object' && !Array.isArray(next)
|
|
121
|
-
? next
|
|
122
|
-
: {};
|
|
123
|
-
cursor[head] = nextObj;
|
|
124
|
-
cursor = nextObj;
|
|
125
|
-
remaining = tail;
|
|
126
|
-
}
|
|
127
|
-
nested[subRoot] = subTarget;
|
|
106
|
+
bodyParams[root] = built;
|
|
128
107
|
}
|
|
129
|
-
bodyParams[root] = target;
|
|
130
108
|
};
|
|
131
109
|
for (const [key, value] of Object.entries(input)) {
|
|
132
110
|
if (value === undefined) {
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sFAAsF;AAWtF,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAC5B,YAAoB,EACpB,SAAiB,EACjB,MAA+B;IAE/B,IAAI,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAE7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,oFAAoF;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,gBAAgB,CAAC,MAA+B;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,gEAAgE;YAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxC,KAAK,CAAC,IAAI,CACR,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CACjE,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,kEAAkE;AAClE,+DAA+D;AAC/D,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,MAAM,IAAI,GACR,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,IAAI,IAAI,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACtC,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;YAClC,sHAAsH,CACvH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gGAAgG;AAChG,qGAAqG;AACrG,+FAA+F;AAC/F,8FAA8F;AAC9F,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAC5B,KAA8B,EAC9B,SAAyE,EACzE,WAAoB;IAEpB,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,WAAW,GAA4B,EAAE,CAAC;IAChD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAE/C,wEAAwE;IACxE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,iFAAiF;IACjF,sFAAsF;IACtF,2FAA2F;IAC3F,wFAAwF;IACxF,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|