[reserve] Voucher I

me2kReWzbjo30YAv · FINALIZADO · ativo · 33 nós

Identidade

campovalor
nome[reserve] Voucher I
idme2kReWzbjo30YAv
estado no n8nativo
empresareserve-temporada
pilarReservas
bossBoss Reservas
workplaceFINALIZADO
IANÃO
triggerWebhook POST /voucher-parte1-dados-hospede — chamado pelo Form Página Dados
frequênciasob demanda — a cada envio de formulário
nós · conexões33 · 38
tagsaudit:revisado · workplace verificado · boss:reservas · audit:revisado-20260707 · tipo:webhook · empresa:reserve · canal:stays · pilar:reservas · audit:revisado-20260705
abrir no n8nhttps://n8n.rbrtecnologia.com.br/workflow/me2kReWzbjo30YAv

Papel

Recebe o formulário preenchido pelo hóspede e GRAVA no card do Notion. É a autoridade sobre os dados do hóspede a partir do momento em que ele preenche: o Stays só semeia no created, daqui em diante manda o que veio da página.

começa quando

Quando o Form Página Dados posta os dados em formato LABELS.

termina quando

Depois de gravar, avisar o hóspede pelo WhatsApp e registrar a telemetria.

o que NÃO faz

posição na jornada

Depois da página, antes da Conferência de Dados. Leva o card para Dados Recebidos.

Mapa nó a nó — ordem real de execução

#tiporeceberegra / condiçãoescreve / efeitosaídapróximoem falha
1Webhook · Form SubmitwebhookPOST com as 30 chaves em formato LABELSsemprebodybodyCode · Parse FormHTTP 500
2Code · Parse Formcodebody do webhooknormaliza os LABELS para o objeto f; monta os 4 corpos de update; aplica KEEP/SET/CLEARbody inteiro{f, compl_block, acomp_block, qtd_informada, removidos[], notion_update_*}Set · Config
3Set · Configsetsaída do Parsesempredefine base do Notion, versão, data_source de Hóspedes, telefone do Rafael e modo_testeconfiguraçãoNotion · Query Hospede by Reserva Stays
4Notion · Query Hospede by Reserva StayshttpRequestconfig + id_staysbusca TODOS os cards com aquela Reserva StaysNotion Hóspedesresults[]Code · Branch (route)HTTP 500
5Code · Branch (route)coderesults da query0 cards → B_create · status ≤ Envio ao Proprietario → A_update_dados · adiante → C_update_envio. Também compara 22 campos do form contra o card para decidir regen do Voucher IIresults + f do Parse{route, count, page_id, page_ids_extra[], status_atual, data_changed, regen, diffs, boss_tail, qtd_contratada, qtd_informada, adicionais, upsell, dedup_key}Switch · Route
6Switch · Routeswitchsaída do Branchroutejson.route3 saídasA · Notion Update · B · Notion Create Page · C · Notion Update
7A · Notion Update → Dados RecebidoshttpRequestrota Acard existe e está ≤ Envio ao Proprietarionotion_update_dadosPATCH no card: identidade, contato, endereço, acompanhantes e status → Dados Recebidospágina atualizadaA · Code · Build Body · Code · Extras · Upsell?HTTP 500
8B · Notion Create PagehttpRequestrota Bnenhum card encontradonotion_createCRIA o card do zeropágina criadaSet · Boss Reservas msg (B - sem card)HTTP 500
9C · Notion Update → Envio ProprietariohttpRequestrota Ccard já adiante (Pendente Assinatura ou mais)notion_update_envioPATCH dos dados SEM regredir o statuspágina atualizadaRegen Voucher II? · Code · Extras · Upsell?HTTP 500
10A · Code · Build Bodycodesaída da rota ANUNCA (19/08: desligado do grafo — a Conferência assumiu a mensagem; nó mantido para rollback)results da query, f do Parse, page_idPATCH nos cards IRMÃOS da reserva dividida (replica os dados, preserva as datas de cada perna){krolik_body, extras_patch}WAHA Reserve · Check Hosp (A)try/catch no laço dos irmãos — falha não derruba o envio
11Code · Extras (multi-unit)coderotas A e Creserva dividida: prepara o PATCH dos demais cardspage_ids_extracorpo do PATCHNotion · PATCH Extras
12Notion · PATCH ExtrashttpRequestsaída do Extrassempre que houver irmãosPATCH nos cards irmãosfim
13Upsell? (adicionais > 0)ifrotas A e Cadicionais > 0 — e adicionais só existe se contratada E informada existiremBranch: adicionaispassa adianteBoss Concierge · msg (hóspedes adicionais)
14Boss Concierge · msg (hóspedes adicionais)setsaída do IFsempre que chegou aquicontratada, informada, adicionais, dedup_keymonta o evento com notify=true{boss:concierge, evento, message, dedup_key, ...}Boss Concierge · envia (v1)
15Boss Concierge · envia (v1)executeWorkflowevento montadosemprechama o [Workplace] Telegram OutboundfimcontinueOnFail
16Set · Boss Reservas msg (B - sem card)setrota Bsemprereserva, hóspedemonta o aviso{boss, evento, message}Telegram · Boss Reservas (B)
17Telegram · Boss Reservas (B)executeWorkflowaviso montadosemprechama o OutboundCode · Telemetria
18Regen Voucher II?ifrota Cstatus = Pendente Assinatura E algum dado relevante mudouregen do Branchdois ramosTrigger Voucher II (regen) · ou Set (C - alterou)
19Trigger Voucher II (regen)httpRequestramo regensempre que chegou aquidispara o Voucher II para regerar o PDFSet · Boss Reservas msg (C - alterou)
20Set · Boss Reservas msg (C - alterou)setrota Csempreboss_tail e diffs do Branchmonta o aviso do que mudou{boss, evento, message}Telegram · Boss Reservas (C)
21Telegram · Boss Reservas (C)executeWorkflowaviso montadosemprechama o OutboundCode · Telemetria
22WAHA Reserve · Check Hosp (A)httpRequestkrolik_bodyNUNCA (19/08: desligado do grafo — a Conferência assumiu a mensagem; nó mantido para rollback)telefone do titularconsulta check-exists no WAHA{numberExists, chatId}IF · Hóspede tem WhatsApp?
23IF · Hóspede tem WhatsApp?ifresposta do checkNUNCA (19/08: desligado do grafo — a Conferência assumiu a mensagem; nó mantido para rollback)json.numberExistsdois ramosWAHA Send · ou Alerta Boss
24WAHA Reserve · Send Hosp (A)httpRequestkrolik_bodyNUNCA (19/08: desligado do grafo — a Conferência assumiu a mensagem; nó mantido para rollback)template com os dados conferidosWhatsApp ao hóspede pela sessão Reserve{id da mensagem}Kuma · push OK · IF · WA falhou?
25HTTP · Alerta Boss (hóspede sem WhatsApp)httpRequestramo sem WhatsAppNUNCA (19/08: desligado do grafo — a Conferência assumiu a mensagem; nó mantido para rollback)POST no rt-boss-notifyCode · Telemetria
26Kuma · push OKhttpRequestenvio feitosemprepush no Kuma{ok}Code · Telemetria
27IF · WA falhou?ifresposta do envioNUNCA (19/08: desligado do grafo — a Conferência assumiu a mensagem; nó mantido para rollback)resposta do WAHAum ramoHTTP · Alerta Boss (WA falhou)
28HTTP · Alerta Boss (WA falhou)httpRequestramo de falhaNUNCA (19/08: desligado do grafo — a Conferência assumiu a mensagem; nó mantido para rollback)POST no rt-boss-notifyfim
29Code · Telemetriacode4 fins de rota mutuamente exclusivostry/catch em toda leitura upstream — nó que não rodou lança em n8nParse Form, Branch, resposta do WAHA{reserva, rota, cards, contratada, informada, adicionais, removidos, waha, erros, sucesso}HTTP · Execution Lognunca derruba
30HTTP · Execution LoghttpRequestsaída da TelemetriasempreRPC cockpit_execution_log, correlation_id voucher1-<reserva>confirmaçãofimonError=continueRegularOutput
31Boss Reservas · msg (Dados Recebidos)setNADA — órfãoÓRFÃO DE PROPÓSITO: 'Dados Recebidos' de rotina não é material (Silent by Default)Boss Concierge · envia (v1), se fosse ligadonunca executa
32Set · rid p/ Conferênciasetsaída do A · Notion Update → Dados Recebidosrota A, sempreid_stays do Code · Parse Form{rid}Conferência · evento (imediato)
33Conferência · evento (imediato)executeWorkflow{rid}rota A, semprechama [reserve] Conferência de Dados em modo evento e espera terminarresultado da ConferênciaKuma · push OKonError continueRegularOutput — a Conferência falhar não pode derrubar a gravação já feita

Ramos

Webhook → Parse Form → Config → Query → Branch → Switch
├─[A] card ≤ Envio ao Proprietario
│ └→ Notion Update (Dados Recebidos)
│ ├→ Build Body → Check WhatsApp
│ │ ├─[tem]──→ Send → Kuma ─────────→ Telemetria
│ │ │ └→ IF WA falhou? → Alerta Boss
│ │ └─[não tem]→ Alerta Boss ───────→ Telemetria
│ ├→ Extras → PATCH irmãos
│ └→ Upsell? ─(adicionais>0)→ Boss Concierge
├─[B] nenhum card
│ └→ Create Page → Boss msg → Telegram (B) → Telemetria
└─[C] card já adiante
└→ Notion Update (sem regredir)
├→ Regen Voucher II? ─(Pendente Assinatura + mudou)→ Trigger Voucher II
│ └→ Set (C-alterou) → Telegram (C) → Telemetria
├→ Extras → PATCH irmãos
└→ Upsell? ─(adicionais>0)→ Boss Concierge

ÓRFÃO: Boss Reservas · msg (Dados Recebidos) — nunca executa, de propósito.

Dados e autoridade

campoautoridadequem escrevequandoquem NÃO sobrescreve
nome · CPF · RG · nascimento · e-mail · telefone · endereçoPÁGINA / este workfloweste workflowno submito Stays no reservation.modified NÃO sobrescreve (regra de 14/08)
acompanhantes (14 propriedades)este workfloweste workflowno submitvazio é KEEP — só remove_hospede_N ou remover_hospedes[] geram CLEAR
Status Autorização de Reservaeste workflowrota A leva a Dados Recebidosno submitrota C NÃO regride o status
Check-in · Check-outStaysgqo5d5created/modifiedsaíram do update deste workflow em 14/08
Qtd Hóspedes ContratadosStaysgqo5d5createdeste workflow só lê, para calcular adicionais

Status

aspectodetalhe
status lidosStatus Autorização de Reserva de todos os cards da reserva
status escritosDados Recebidos (rota A) · o create da rota B semeia
transições bloqueadasrota C NÃO regride: card já em Pendente Assinatura ou adiante recebe os dados e mantém o estágio
regen do Voucher IIsó quando status = Pendente Assinatura E algum dos 22 campos comparados mudou. Nunca regenera voucher já assinado

Comunicações

públicoidentidadecanalcondiçãodeduptexto validadoconteúdomaterialidade
hóspedeReserveWhatsAppWAHA Reserve · Send Hosp (A)rota A e o hóspede tem WhatsAppum envio por submissãoSIM — validada pelo Rafael em 17/08confirmação dos dados + links de confirmar e corrigir + ingressosmaterial
Boss ConciergeTelegram via OutboundBoss Concierge · msgadicionais > 0dedup_key ups-<reserva>-<qtd_informada>, TTL 24h no motor_signal_gaten/aoportunidade de hóspedes adicionais, sem cobrança automáticamaterial
Boss ReservasTelegram via OutboundTelegram (B) e (C)rota B (card faltando) ou rota C (alteração pós-envio)Signal Gaten/aaviso operacionalmaterial
Boss Reservasrt-boss-notifyAlerta Boss (sem WhatsApp / WA falhou)hóspede sem WhatsApp ou falha no envion/an/aescalada para contato humanomaterial
WhatsApp ao hóspede (rota A)DESATIVADO em 19/08quem fala com o hóspede depois do formulário passou a ser a Conferência de Dados, dona única da mensagem

Integrações

sistemapapel exato
NotionPATCH e POST no banco de Hóspedes, incluindo os cards irmãos da reserva dividida
WAHA Reservecheck-exists + envio ao hóspede
Voucher IIPOST para regerar o PDF quando o dado muda em Pendente Assinatura
WorkplaceRPC cockpit_execution_log
Boss Event[Workplace] Telegram Outbound e rt-boss-notify
Kumapush após o envio — semântica errada, mede WhatsApp e não saúde
Supabase Rentalindireto, via sync a cada 2 min
Cloudflare WorkerNÃO SE APLICA — quem fala com o Worker é o Form
sub-workflows[Workplace] Telegram Outbound

Reserva dividida

SIM — grava em TODOS os cards da reserva, não só no da URL. O Build Body replica os dados nos irmãos preservando as datas de cada perna, e o Code · Extras faz o mesmo por outro caminho (dívida de desenho conhecida: dois caminhos paralelos, idempotentes). A mensagem ao hóspede mostra o período GLOBAL.

Idempotência e deduplicação

Tratamento de falhas

Alterações feitas na auditoria

datadefeito anteriorconsequênciacorreçãoevidênciatocou negócio?
14/08vazio no formulário apagava identidade, contato e endereço já gravadosprefill mascarado + reenvio destruía dado real do hóspedeKEEP/SET/CLEAR: vazio preserva; só sinal explícito remove acompanhante26 das 29 propriedades apagavam antes; nenhuma apaga agorasim
14/08Check-in e Check-out saíam do updatea data é autoridade do Staysremovidos das rotas A e Csim
17/08rótulo externo dizia 'ID Stays:'a palavra Stays vazava para o hóspedevirou 'Código da reserva:' por patch de âncora, sem reescrever o Code de 8 KBtexto vivo entregue e validado pelo Rafaelnão — só texto
17/08nenhum evento de upsellhóspede informava mais gente que o contratado e ninguém via a oportunidadeadicionais = max(0, informada − contratada), nas rotas A e Cdedup provado ponta a ponta no motor_signal_gate, TTL 24hsim
17/08sem telemetriaexecução não registradaCode · Telemetria → Execution Log, 4 fins de rota exclusivosnão
19/08/2026Parou de mandar a própria confirmação ao hóspede. A aresta para A · Code · Build Body saiu e entrou a chamada à Conferência de Dados em modo evento. Extras (multi-unit) e Upsell seguem ligados — a replicação nos cards irmãos nunca dependeu do Build Body, era duplicata. O Kuma da rota A pendurava no WAHA desligado e foi rependurado na Conferência, com onError para nunca derrubar a telemetria.

Prova

EXECUÇÃO REAL

itemvalor
execução876841 · 16/08 20:22 · rota A
efeito verificadoPATCH do card confirmado, WhatsApp enviado ao hóspede
descoberta nessa execuçãoa resposta do Notion listou 'Qtd Hóspedes Contratados' entre as propriedades — foi assim que se provou que a property existia, sem usar o token em linha de comando
prova do upselldedup_key lido no Code · Normaliza Boss Event V2 do Outbound e repassado ao motor_signal_gate
telemetriainstalada em 17/08 — sem execução desde então; a gravação viva sai na próxima submissão

Limites — o que NÃO é defeito deste workflow

itemcamadaestado
trusted IP e botão de remover acompanhanteForm Página Dados / Workerbackend daqui já aceita o sinal; o front não emite
Kuma medindo WhatsApp em vez de saúdeinfraestrutura do PilarBLOQUEIO EXTERNO — sem admin
token do Notion literal no A · Code · Build Bodyhardening transversalPENDENTE — server-side, não exposto ao browser
órfão Boss Reservas · msg (Dados Recebidos)desenhoINTENCIONAL — não religar
dois caminhos paralelos de escrita nos irmãosdívida de desenhoidempotente — não vira trabalho

Veredito

FINALIZADO — Grava o que promete com KEEP/SET/CLEAR provado, não regride status, a comunicação foi validada e o upsell tem dedup real de ponta a ponta.

Fonte: estrutura-workflows.json (definição viva do n8n PROD, sanitizada) + fichas-detalhe.json · gerado por scripts/gerar-fichas.py. Nenhum token, senha ou PII nesta página.