Pular para o conteúdo principal

API de Simulação de Jornadas

A API de Simulação de Jornadas permite que sistemas externos (como agentes de IA) interajam com jornadas de forma conversacional sem enviar mensagens reais pelo WhatsApp. Isso é útil para testes, pré-visualizações e integração da lógica de jornadas em fluxos de trabalho externos.

atenção

Esta API está em desenvolvimento ativo e mudanças incompatíveis são esperadas nos próximos meses. A compatibilidade com versões anteriores não é garantida até pelo menos agosto de 2026.

A autenticação ocorre como em outras chamadas de API, com um token da Turn.io especificado no header HTTP Authorization, prefixado por Bearer e seguido de um token emitido pela interface do usuário da Turn.io.

Como funciona

O endpoint de simulação utiliza uma única rota POST que gerencia tanto a criação de novas simulações quanto o envio de entradas para simulações existentes:

  • Se não existir uma simulação para o simulation_id fornecido: uma nova sessão de simulação é criada e a jornada começa a ser executada.
  • Se já existir uma simulação para o simulation_id fornecido: a entrada (input) fornecida é enviada para a sessão existente.

O simulation_id é sempre obrigatório e fornecido pelo chamador. Pode ser qualquer identificador de string entre 6 e 24 caracteres. O endpoint usa a combinação do UUID da jornada (da URL) e do simulation_id (do corpo da requisição) para identificar sessões de simulação.

Iniciando uma simulação

Para iniciar uma nova simulação, faça a seguinte requisição:

$ curl -X POST "https://whatsapp.turn.io/v1/stacks/<uuid-da-jornada>/simulation" \
-H "Authorization: Bearer token" \
-H "Content-Type: application/json" \
-d '{
"simulation_id": "minha-sessao-001",
"revision": "production",
"contact": {
"name": "Usuário Teste",
"language": "eng"
}
}'

> {
"simulation_id": "minha-sessao-001",
"state": "waiting_for_input",
"message": "Bem-vindo! Qual é o seu nome?",
"context": {
"contact": {
"name": "Usuário Teste",
"language": "eng"
}
}
}

Parâmetros

NomeObrigatórioPadrãoDescrição
simulation_idsimUm identificador de string fornecido pelo chamador (6 a 24 caracteres) para rastrear a sessão.
revisionnão"production"Qual revisão da jornada simular. Deve ser "production" ou "staging".
contactnão{}Um objeto com atributos de contato para preencher o contexto do contato simulado.
inputnãoEntrada inicial opcional a ser fornecida ao iniciar a simulação.

Campos da resposta

NomeDescrição
simulation_idO identificador da sessão de simulação.
stateO estado atual da simulação: "waiting_for_input" (a jornada espera uma resposta) ou "end" (a jornada terminou).
messageA saída de texto da jornada. Inclui conteúdo de mensagem, opções de botões e URLs de mídia.
contextO contexto de variáveis atual da simulação, incluindo campos de contato e variáveis definidas pela jornada.

Enviando entrada para uma simulação

Quando uma simulação está no estado waiting_for_input, envie a entrada do usuário fazendo outra requisição com o mesmo simulation_id:

$ curl -X POST "https://whatsapp.turn.io/v1/stacks/<uuid-da-jornada>/simulation" \
-H "Authorization: Bearer token" \
-H "Content-Type: application/json" \
-d '{
"simulation_id": "minha-sessao-001",
"input": "Santiago"
}'

> {
"simulation_id": "minha-sessao-001",
"state": "end",
"message": "Obrigado Santiago! Seu cadastro está completo."
}

Parâmetros

NomeObrigatórioDescrição
simulation_idsimO mesmo ID de simulação usado ao iniciar a sessão.
inputsimA resposta do usuário como uma string. Deve ser não vazia.

Exemplo de múltiplos turnos

Uma simulação típica de múltiplos turnos envolve iniciar a jornada e depois enviar entradas para cada etapa que requer uma resposta.

Etapa 1: Iniciar a jornada

$ curl -X POST "https://whatsapp.turn.io/v1/stacks/d144cb30-f759-4260-82ba-07353f0e389f/simulation" \
-H "Authorization: Bearer token" \
-H "Content-Type: application/json" \
-d '{
"simulation_id": "sessao-demo-01",
"revision": "production",
"contact": {
"name": "Maria",
"language": "eng"
}
}'

> {
"simulation_id": "sessao-demo-01",
"state": "waiting_for_input",
"message": "Olá Maria! Como podemos ajudá-la hoje?\n\nResponda exclusivamente com uma das seguintes opções:\nAgendar consulta, Verificar status, Falar com atendente",
"context": {
"contact": {
"name": "Maria",
"language": "eng"
}
}
}

Etapa 2: Enviar entrada do usuário

$ curl -X POST "https://whatsapp.turn.io/v1/stacks/d144cb30-f759-4260-82ba-07353f0e389f/simulation" \
-H "Authorization: Bearer token" \
-H "Content-Type: application/json" \
-d '{
"simulation_id": "sessao-demo-01",
"input": "Agendar consulta"
}'

> {
"simulation_id": "sessao-demo-01",
"state": "waiting_for_input",
"message": "Ótimo! Qual data funciona para você?"
}

Etapa 3: Continuar a conversa

$ curl -X POST "https://whatsapp.turn.io/v1/stacks/d144cb30-f759-4260-82ba-07353f0e389f/simulation" \
-H "Authorization: Bearer token" \
-H "Content-Type: application/json" \
-d '{
"simulation_id": "sessao-demo-01",
"input": "Próxima segunda-feira"
}'

> {
"simulation_id": "sessao-demo-01",
"state": "end",
"message": "Sua consulta está agendada para a próxima segunda-feira. Até lá!"
}

Respostas de erro

A API retorna códigos de status HTTP e mensagens de erro apropriados:

StatusErroDescrição
400simulation_id is requiredO campo simulation_id está ausente no corpo da requisição.
400simulation_id must be between 6 and 24 charactersO simulation_id é muito curto ou muito longo.
400Invalid Journey UUIDO UUID da jornada na URL não é um UUID válido.
400Journey has no published production revisionA jornada não possui uma revisão de produção publicada.
400Journey has no staging revisionA jornada não possui uma revisão de staging (quando revision é "staging").
400Journey is disabledA jornada está desativada.
400Journey has been deletedA jornada foi excluída.
400Invalid revision, must be 'production' or 'staging'Um valor inválido de revision foi fornecido.
400Invalid input, must be a non-empty stringO campo input está vazio ou não é uma string.
404Journey not foundNenhuma jornada existe com o UUID fornecido.
404Simulation not found or expiredA sessão de simulação expirou ou não existe.

Observações

  • As sessões de simulação são efêmeras e expiram após um período de inatividade. Se uma sessão expirar, inicie uma nova com um simulation_id diferente.
  • Nenhuma mensagem real do WhatsApp é enviada durante uma simulação. A lógica da jornada é executada em memória.
  • Conteúdo de mídia (imagens, vídeos, áudio, documentos) nas mensagens da jornada é retornado como texto descritivo com URLs, por exemplo: "Image available at: https://...".
  • Quando a jornada inclui opções de botões ou listas, elas são adicionadas ao texto da mensagem, por exemplo: "Exclusively reply with one of the following options: Opção1, Opção2".
  • Blocos de agente de IA com memória ativada mantêm o contexto da conversa entre os turnos da simulação, permitindo que a IA faça referência a mensagens anteriores na sessão.