Verboo

Conversas de Exemplo

Três cenários reais mostrando como o Claude encadeia as tools do MCP em uma conversa de verdade. Use como referência para entender o que pedir e como o LLM responde.


Cenário 1: Criar um agente de vendas do zero e testar

Cria o assistente, configura um gatilho de captura de lead com webhook, e roda um teste end-to-end com create_session + send_message.

VVocê

Crie um assistente "Bia: Vendas Loja XYZ" com prompt de SDR para uma loja de roupas, em português, temperature 0.6. Em seguida adicione um gatilho que captura nome, email e telefone quando o cliente quiser comprar e dispara um POST para https://api.lojaxyz.com/leads com header Authorization: Bearer SECRET_TOKEN.

CClaude

Vou em três passos: assistente, gatilho, action de webhook.

▸ toolcreate_assistant
id 87
name        = "Bia: Vendas Loja XYZ"
prompt      = "Você é a Bia, SDR da Loja XYZ. Qualifique o lead, entenda a necessidade e direcione para fechamento."
language    = "brazil-portuguese"
temperature = 0.6
▸ toolcreate_trigger
id 153
assistantId    = 87
name           = "captureLead"
description    = "Coleta nome, email e telefone quando o cliente demonstra intenção de compra."
parametersJson = {
  "type": "object",
  "properties": {
    "nome":     { "type": "string", "description": "Nome completo do cliente" },
    "email":    { "type": "string", "description": "Email do cliente" },
    "telefone": { "type": "string", "description": "Telefone com DDD" }
  },
  "required": ["nome", "email", "telefone"]
}
▸ toolcreate_action
criada
assistantId = 87
triggerId   = 153
type        = "WEBHOOK"
actionJson  = {
  "url":     "https://api.lojaxyz.com/leads",
  "method":  "POST",
  "body":    "{\"nome\":\"$nome\",\"email\":\"$email\",\"telefone\":\"$telefone\"}",
  "headers": [{ "key": "Authorization", "value": "Bearer SECRET_TOKEN" }]
}

Pronto. Assistente 87, trigger 153, webhook configurado. Quer rodar um teste?

VVocê

Quero. Simula um cliente que quer comprar uma camisa M branca: "Oi, quero comprar uma camisa M branca. Meu nome é João Silva, joao@email.com, 11999990000".

CClaude
▸ toolcreate_session
test_8a3f
assistant_id = 87
▸ toolsend_message
200 OK
session = "test_8a3f"
message = "Oi, quero comprar uma camisa M branca. Meu nome é João Silva, joao@email.com, 11999990000"

A Bia respondeu confirmando o pedido e o gatilho captureLead disparou. O webhook foi chamado com sucesso (HTTP 200). Para ver o histórico completo posso rodar get_session("test_8a3f").


Cenário 2: Agendamento Feegow com referência a parâmetros

Mostra como referenciar parâmetros do gatilho dentro do actionJson, e como encadear duas actions Feegow para resolver paciente_id a partir de um CPF.

VVocê

No assistente 42 (clínica), quero um gatilho scheduleAppointment que coleta CPF do paciente, ID do profissional, ID do procedimento, data (YYYY-MM-DD) e horário (HH:MM), e cria o agendamento no Feegow.

CClaude

Vou criar o trigger com os 5 parâmetros e a action FEEGOW APPOINTMENT_CREATE. Lembre que dentro de actionJson os valores são nomes dos parâmetros, não placeholders.

▸ toolcreate_trigger
id 211
assistantId    = 42
name           = "scheduleAppointment"
description    = "Cria um agendamento no Feegow após coletar CPF, profissional, procedimento, data e horário."
parametersJson = {
  "type": "object",
  "properties": {
    "patientCPF":     { "type": "string", "description": "CPF do paciente, só dígitos" },
    "professionalId": { "type": "number", "description": "ID do profissional no Feegow" },
    "procedureId":    { "type": "number", "description": "ID do procedimento" },
    "date":           { "type": "string", "description": "Data no formato YYYY-MM-DD" },
    "time":           { "type": "string", "description": "Horário no formato HH:MM" }
  },
  "required": ["patientCPF", "professionalId", "procedureId", "date", "time"]
}
▸ toolcreate_action
criada
assistantId = 42
triggerId   = 211
type        = "FEEGOW"
actionJson  = {
  "type": "APPOINTMENT_CREATE",
  "data": {
    "paciente_id":     "patientCPF",
    "profissional_id": "professionalId",
    "procedimento_id": "procedureId",
    "data":            "date",
    "horario":         "time",
    "local_id":        1
  }
}
⚠️Dois pontos importantes
  1. O local_id ficou fixo em 1. Se a clínica tiver mais unidades, adicione unitId aos parâmetros do gatilho e troque por "local_id":"unitId".
  2. O Feegow exige paciente_id numérico, não CPF. O ideal é o trigger ter uma action FEEGOW PATIENT_SEARCH antes (recebe cpf, devolve o ID) e o LLM encadeia. Quer que eu adicione?
VVocê

Sim, adiciona o PATIENT_SEARCH antes.

CClaude
▸ toolcreate_action
id 488
assistantId = 42
triggerId   = 211
type        = "FEEGOW"
actionJson  = {
  "type": "PATIENT_SEARCH",
  "data": { "paciente_cpf": "patientCPF", "photo": false }
}

O trigger 211 agora tem 2 actions executadas em ordem: primeiro PATIENT_SEARCH resolve o paciente_id a partir do CPF, depois APPOINTMENT_CREATE usa o ID retornado.


Cenário 3: Investigar uma conversa em produção

Mostra o ciclo completo de incidente: encontrar a sessão problemática usando as tools de histórico, identificar a causa, corrigir o prompt do assistente e validar com um teste.

VVocê

Recebi uma reclamação que o assistente 42 mandou um link errado para um cliente hoje à tarde. Acha a sessão e me diz o que aconteceu.

CClaude

Vou listar as sessões recentes do assistente 42 e procurar pelo link.

▸ toollist_generative_sessions
18 sessões
assistantId = 42
perPage     = 20
▸ toollist_generative_messages
match às 14:32
assistantId = 42
perPage     = 50
// match: link "lojaxyz.com/promocao-velha"
// session: whatsapp:5511988887777
▸ toolget_session
12 mensagens
session = "whatsapp:5511988887777"

O fluxo: o cliente perguntou sobre a promoção de Black Friday, e o assistente respondeu citando a URL da promoção do ano passado. Olhando o assistente:

▸ toolget_assistant
200 OK
id = 42

O prompt tem um trecho hardcoded: "Nossa promoção atual está em https://lojaxyz.com/promocao-velha". É isso que precisa sair.

VVocê

Tira esse trecho do prompt e bota uma instrução pro assistente sempre consultar a base de conhecimento pra promoções ativas.

CClaude
▸ toolupdate_assistant
atualizado
id     = 42
prompt = "...prompt original sem o link hardcoded, agora terminando com:
         'Para qualquer pergunta sobre promoções, consulte a base
          de conhecimento: nunca cite URLs de memória.'"

Quer que eu rode um teste agora pra confirmar que ele vai buscar na base ao invés de cuspir o link velho?

VVocê

Roda.

CClaude
▸ toolcreate_session
test_re9c
assistant_id = 42
▸ toolsend_message
200 OK
session = "test_re9c"
message = "Oi, qual a promoção de Black Friday de vocês?"

Resposta: "Deixa eu confirmar a promoção atual...": o assistente disparou a busca na base de conhecimento e devolveu o link correto. Bug resolvido.