Ferramenta que permite disponibilizar ao cliente diferentes tipos de informações — como produtos, contratos ou comunicados — a partir dos textos definidos nos scripts
Antes de tudo:
Imagine uma linha principal de conversa (o script jornada). Em certos momentos, em vez de seguir só essa linha, você pode abrir outros roteiros — por exemplo, um texto só para quem escolheu “cartão” e outro só para “empréstimo”. O Multi Case existe para isso: um convite pode carregar a jornada e vários roteiros auxiliares (casos), e o sistema decide qual trecho faz sentido naquele atendimento.
- O que o usuário final percebe: uma conversa guiada; em alguns pontos o conteúdo pode mudar conforme dados da proposta ou do cliente.
- O que a empresa configura uma vez (no script): mensagens, transições entre mensagens e, onde precisar, caminhos alternativos (
alternativePaths) com ou sem condições. - O que muda a cada convite: quais roteiros entram naquele link (
script.cases), valores de variáveis (fields) e dados do cliente — é isso que personaliza a experiência sem reescrever o roteiro inteiro.
Analogia: a jornada é a trilha principal; os casos são blocos de conteúdo que só entram quando o convite e as regras permitem.
Mini-glossário
| Termo | Significado |
|---|---|
| Script jornada | Roteiro principal por onde a experiência começa. Um script vira jornada quando ao menos uma transição tem alternativePaths. |
| Script de caso (ou filho) | Outro roteiro (produto, proposta, comunicado) ligado ao convite e acionado nas transições. É um script sem alternativePaths. |
| Convite (invite) | Registro criado pela API que gera o link da experiência e carrega jornada + casos + dados. |
| Campo / variável | Par chave-valor usado nas mensagens como {{label}} (ex.: {{nome}}, {{product}}). |
alternativePaths | Configuração na transição entre duas mensagens: permite desviar para mensagens de outros scripts definidos no convite. |
conditions | Regras (caminho, operador, valor) que decidem para qual script seguir, quando há condições. |
scriptReference | Identificador do script (UUID ou reference cadastrada). Aparece nas condições do script e nos itens do convite. |
identifier | Rótulo de cada caso dentro do convite (ex.: Proposta 4547). Use um valor único por caso. Não é usado nas condições: elas usam scriptReference. |
O que é Multi Case (conceito)
O Multi Case permite que a partir de uma mensagem da jornada o sistema redirecione o fluxo para mensagens de outros scripts. Isso se liga em dois lugares:
- Na criação do script: em uma message transition, o campo
alternativePathsindica que, saindo da mensagem pai (parentId), o fluxo pode entrar em outros roteiros antes de seguir para a mensagem destino (messageId), conforme as regras. Ao terminar um caso, o fluxo volta para essa mesma transição e, quando não há mais casos a abrir, segue para a mensagem destino. - Na criação do convite multicase: você informa a jornada (
script.journey) e a lista de casos (script.cases) — cada item aponta para umscriptReferencee trazfieldsusados nas condições e nos textos.
Sem o convite multicase, os “outros scripts” não estão disponíveis naquela sessão da forma descrita aqui.
Como Script e Convite se encaixam
| Onde | O que você define |
|---|---|
| Script (API de criação de script) | Mensagens, transições, alternativePaths com ou sem conditions. |
| Convite multicase (API de invite) | script.journey (qual jornada + fields da jornada), script.cases (lista ordenada: cada caso com scriptReference, identifier, fields), customer, datas, etc. |
Lembrete: o roteiro diz em que ponto pode haver desvio; o convite diz quais roteiros e quais valores entram naquela sessão.
Ordem de criação: crie primeiro os scripts de caso e depois a jornada. Ao criar a jornada, cada scriptReference usado nas condições precisa apontar para um script de caso já existente, habilitado e diferente da própria jornada.
Nomes nos scripts vs nomes no JSON do convite (importante)
Nas condições do script, o campo path usa textos fixos do tipo invite.scripts.fields... e invite.customer.fields.... No JSON real do convite, os valores vêm de outras chaves. Use a tabela abaixo para não misturar.
path na condição (exemplo) | De onde vem o valor no convite |
|---|---|
invite.scripts.fields.product | script.cases[].fields do próprio caso avaliado, com label = product. Os fields da jornada (script.journey.fields) não entram nas condições. |
invite.customer.fields.age | customer.fields com label = age. |
invite.customer.affirmative_answer | Resposta do cliente que causou uma interrupção (afirmativa ou não). Veja Resposta afirmativa após interrupção. |
Erro comum: copiar o texto invite.scripts.fields para o JSON do convite. No payload, use script.journey e script.cases como na documentação da API.
Fluxo do usuário (visão geral)
O que este desenho mostra: o cliente entra pela jornada; num ponto com alternativePaths, o sistema avalia regras e/ou percorre os casos do convite; depois a linha continua na jornada (próxima mensagem).
Na transição, quando há condições, o sistema compara path, operator e value com os dados do convite. Quando não há lista de conditions, o comportamento é outro (veja a próxima seção).
Convite multicase: o que enviar e o que pode dar erro
Endpoint (referência): criação de convite multicase na API pública da NuVidio (veja Criar invite multicase). Base de exemplo: https://apigw.nuvidio.com/video-agreement.
Lembrete: no schema público, expiresAt é obrigatório no corpo da criação; customer costuma exigir cpf e fields (com label e value em cada item). Confira a referência OpenAPI para o contrato exato.
Jornada e casos
- O script informado em
script.journeyprecisa ser uma jornada comcustomerJourneyTypeagreement. - Cada item de
script.casesprecisa ser um script de caso, habilitado e diferente da jornada.
Datas
Use ISO 8601 com milissegundos, no formato:
YYYY-MM-DDTHH:mm:ss.SSS
Exemplo de parte da data: 2025-03-29 (ano-mês-dia), depois T, depois hora 17:21:00.000.
Campos script.journey.fields (jornada)
script.journey.fields (jornada)- Toda variável usada nas mensagens da jornada precisa ter valor coberto aqui (labels/values correspondentes). Se faltar, a criação do convite falha.
- CPF nas mensagens: recomenda-se formato legível para leitura por IA, por exemplo
111.222.333-44.
Campos script.cases[].fields (cada caso)
script.cases[].fields (cada caso)- Se uma variável aparece no texto do caso e não veio em
script.cases[].fields, o sistema usa o valor descript.journey.fields. - Se ainda assim não houver valor, a criação do convite falha.
- Esse aproveitamento vale só para os textos. Condições com
invite.scripts.fields.{nome}olham apenas osfieldsdo próprio caso.
Resposta de sucesso (resumo)
Em caso de sucesso (201), você recebe dados como inviteId, inviteUrl, janelas availableAt / expiresAt e outras URLs úteis ao fluxo. O detalhe completo dos campos está na referência OpenAPI oficial.
Condicionais: com e sem conditions
conditionsAs condições só se aplicam ao modelo em que customerJourneyType do script é agreement.
Modo multicase
Informar alternativePaths na transição ativa o script em modo multicase naquele ponto: a partir da mensagem pai, o fluxo pode ir para mensagens de outros scripts que você associou ao convite multicase.
Sem lista de conditions
conditionsSe existir alternativePaths mas não houver condições configuradas, o fluxo percorre todos os casos informados em script.cases, um de cada vez, na ordem em que aparecem no convite. Depois do último caso, segue para a mensagem destino da transição.
Com lista de conditions
conditionsCada item costuma ter:
path: onde buscar o valor (veja tabela de paths na próxima subseção).operator: como comparar (veja tabela de operadores).value: valor esperado na comparação (quando o operador exige).scriptReference: para qual roteiro ir se a condição for atendida. Se você omitirscriptReference, o fluxo segue para todos os casos do convite que atendem à condição.
As condições são avaliadas na ordem em que aparecem em conditions. Cada condição abre os casos que ela seleciona, um de cada vez; quando eles terminam, o fluxo volta para a transição e passa para a próxima condição. Cada condição é avaliada uma única vez por atendimento. Depois da última, o fluxo segue para a mensagem destino da transição.
Paths permitidos em path
pathpath | Uso |
|---|---|
invite.scripts.fields.{nome} | Valores enviados nos fields de cada caso no convite (script.cases[].fields), por exemplo product. |
invite.customer.fields.{nome} | Campos do cliente no convite, por exemplo age. |
invite.customer.affirmative_answer | Resposta afirmativa ou não após interrupção; veja Resposta afirmativa após interrupção. |
Operadores (referência rápida)
| Operador | Ideia |
|---|---|
equal / not_equal | Igual ou diferente ao valor. |
greater / less / greater_or_equal / less_or_equal | Comparações. Funcionam como número quando o value é numérico (ex.: idade) e como data quando o value é uma data. |
in | Valor está em uma lista. Envie a lista em uma única string, separada por vírgula (ex.: "São Paulo,Rio de Janeiro"). |
not_in | Valor não pode estar na lista (mesmo formato do in). |
like | Correspondência por padrão, usando % como curinga (ex.: %vidio casa com “Nuvidio”). Diferencia maiúsculas de minúsculas. |
not_like | Exclui valores que casam com o padrão, no mesmo formato do like. |
is_null / is_not_null | Valor ausente ou presente; não envie value nesses casos. |
Para o path invite.customer.affirmative_answer, o único operador aceito é equal, com value "true" ou "false".
Exemplo mínimo: condição em campo de script (product)
product)Propósito: no roteiro, ao ir da mensagem A para a B, se o campo de script product for “emprestimo”, desviar para o roteiro referenciado.
Trecho da criação do script (transição):
{
"parentId": "mensagem_a",
"messageId": "mensagem_b",
"alternativePaths": {
"conditions": [
{
"path": "invite.scripts.fields.product",
"operator": "equal",
"value": "emprestimo",
"scriptReference": "script_emprestimo"
}
]
}
}Propósito do convite: enviar product nos fields do caso correspondente em script.cases, de forma consistente com o que as condições esperam:
"cases": [
{
"identifier": "Proposta 4547",
"scriptReference": "script_emprestimo",
"fields": [
{ "label": "product", "value": "emprestimo" }
]
}
]Exemplo mínimo: condição em campo do cliente (age)
age)Propósito: desviar para um roteiro se a idade do cliente for maior que 30.
Trecho da criação do script:
{
"parentId": "mensagem_a",
"messageId": "mensagem_b",
"alternativePaths": {
"conditions": [
{
"path": "invite.customer.fields.age",
"operator": "greater",
"value": "30",
"scriptReference": "script_maior_30"
}
]
}
}Propósito do convite: incluir em customer.fields um item com label age e o value desejado (ex.: "35").
Gatilho de interrupção
Em uma frase
Em uma jornada multicase, quando o cliente está dentro de um caso e dá uma resposta de voz ou texto diferente da esperada, o caso é encerrado e o fluxo volta para a transição da jornada que o abriu. A partir daí, segue para um caso selecionado por invite.customer.affirmative_answer ou para a próxima mensagem da jornada.
Onde isso aparece na API
Endpoint de recuperação de script do cliente (veja Links oficiais).
- Convites multicase: a interrupção atua sempre nas mensagens dos casos, independente do campo
interruptionTrigger, que é ignorado em multicase. Nas mensagens da jornada principal, a interrupção não se aplica. - Convites single case (o script do convite é um caso, não uma jornada): a interrupção só atua se o script tiver sido criado com
interruptionTrigger: true. Nesse caso, o cliente é levado direto à mensagem final do script.
Quem decide se a resposta "bate" com o esperado
Nossa I.A compara o que o cliente disse com a lista expectedResponses da mensagem. Se não bater, o cliente envia isExpectedAnswer: false no payload da requisição de recuperação de script.
Lembrete: se
isExpectedAnswernão vier (ausente), o sistema não trata a resposta como interrupção e o fluxo segue o padrão.
Cenários
| Situação | O que acontece |
|---|---|
| Multicase: resposta inesperada numa mensagem da jornada principal | Interrupção não se aplica; fluxo normal. |
| Multicase: resposta inesperada numa mensagem de um caso | Interrupção dispara: as mensagens restantes do caso são puladas e o fluxo volta para a transição da jornada que abriu o caso. |
| Multicase: resposta inesperada na última mensagem de um caso | Não interrompe, pois não há mensagens para pular; o caso termina normalmente. |
Single case com interruptionTrigger: true | Interrupção dispara e leva à mensagem final do script, exceto quando a mensagem respondida já é a final ou a penúltima. |
Single case sem interruptionTrigger | Não interrompe; fluxo normal. |
Resposta esperada (isExpectedAnswer: true) | Transições normais; próximo nó. |
isExpectedAnswer ausente | Não interrompe por esse mecanismo. |
Resposta afirmativa após interrupção
Em uma frase
Quando um caso é interrompido, o fluxo volta para a transição da jornada que abriu esse caso e avalia as condições com o path invite.customer.affirmative_answer. Assim você direciona o cliente para outro caso conforme a resposta que causou a interrupção tenha sido afirmativa ou não. Os valores aceitos são "true" ou "false", em string, e o único operador permitido é equal.
Quem valida se a fala do cliente foi afirmativa é a nossa I.A. A informação é enviada no campo isAffirmativeAnswer, na mesma requisição que traz isExpectedAnswer: false.
Regras para funcionar
- A condição
affirmative_answerdeve ficar na mesma transição da jornada que abre o caso da pergunta. Em uma transição posterior ela não é avaliada. - A condição que abre o caso da pergunta deve vir antes da condição
affirmative_answer. Fora de uma interrupção, a condiçãoaffirmative_answeré ignorada e marcada como já avaliada. Se estiver primeiro, ela é descartada antes de a pergunta ser feita. - A pergunta não pode ser a última mensagem do caso. Sem mensagens depois dela, não há interrupção e a condição não é avaliada.
- Em
expectedResponses, mantenha apenas as respostas afirmativas (ex.:["Sim"]). - O
scriptReferenceda condição é areference(ou o UUID) do script do caso. Oidentifierusado no convite não serve aqui.
Com resposta afirmativa (esperada), não há interrupção e a condição affirmative_answer não é avaliada. O fluxo segue para a próxima mensagem da jornada.
Exemplo mínimo na transição (condição)
Propósito: abrir o caso da pergunta e, se o cliente responder de forma negativa, seguir para o roteiro script_emprestimo.
"alternativePaths": {
"conditions": [
{
"path": "invite.customer.fields.destino",
"operator": "equal",
"value": "pergunta",
"scriptReference": "script_pergunta"
},
{
"path": "invite.customer.affirmative_answer",
"operator": "equal",
"value": "false",
"scriptReference": "script_emprestimo"
}
]
}O convite multicase deve listar os casos (script.cases) com os scriptReference e fields coerentes com os roteiros que podem entrar após essa decisão. Neste exemplo, script_pergunta e script_emprestimo, além de customer.fields com label destino e value pergunta.

