Saltar al contenido principal

Agente agendador

Asistente de programación que obtiene los servicios de la empresa, explica las reglas de reserva en portugués, verifica disponibilidad y crea eventos para un flujo de agendamiento estilo salón.

agent llm openai appointments scheduling services portuguese

Descargar ZIP

Qué está incluido

CampoValor
NombreAgente agendador
TipoAgent
Tipo de Assistantllm
Plataformaopenai
Modelogpt-4.1
Herramientas4

Dependencias Incluidas

info

El ZIP descargable incluye todas las dependencias listadas a continuación. Todas las referencias cruzadas se vinculan automáticamente durante la importación.

Servicios: Agendador Environment

Incluya estos servicios junto con el agente para que sus preActions puedan listar las ofertas y precios disponibles.

#Nombre
1Corte de cabelo
2Barba
3Corte + Barba
4Hidratação capilar
5Sobrancelha

JSON Completo

Clic para expandir
{
"description": "Scheduling assistant that fetches company services, explains booking rules in Portuguese, checks availability, and creates events for a salon-style appointment flow.",
"tags": [
"agent",
"llm",
"openai",
"appointments",
"scheduling",
"services",
"portuguese"
],
"linkedExamples": [
{
"type": "services",
"variant": "agendador-environment",
"relationship": "Seed these services alongside the agent so its preActions can list available offerings and prices."
}
],
"document": {
"name": "Agente agendador",
"assistantType": "llm",
"options": {
"log_level": "debug"
},
"platform": {
"openAi": {
"model": "gpt-4.1",
"temperature": 1,
"maxCharsPerMessage": 1024,
"preActions": [
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/security/auth/jwt/generate",
"actions/security/auth/jwt/generate": {
"is_advanced": false,
"duration": 300,
"ips": []
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/state/session/memory/mutate",
"actions/state/session/memory/mutate": {
"operation": "set",
"key": "apiToken",
"value": {
"expr": "step(0).jwt",
"onFailure": "keep"
}
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/state/session/memory/mutate",
"actions/state/session/memory/mutate": {
"operation": "set",
"key": "apiUrl",
"value": {
"expr": "\"https://api.autotalk.io/v1\"",
"onFailure": "keep"
}
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/data/company/resource/search",
"actions/data/company/resource/search": {
"dynadataItemType": "employees",
"filter": {
"expr": "{\"aclInfo.tenantId\": company._id}",
"onFailure": "throw"
},
"limit": 1,
"skip": 0
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/state/session/memory/mutate",
"actions/state/session/memory/mutate": {
"operation": "set",
"key": "employee",
"value": {
"expr": "step(3).data[0]",
"onFailure": "keep"
}
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/state/session/memory/mutate",
"actions/state/session/memory/mutate": {
"operation": "set",
"key": "today",
"value": {
"expr": "employee.workingSchedule[lowerAscii(format_datetime(now(), \"dddd\"))]",
"onFailure": "keep"
}
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/state/session/memory/mutate",
"actions/state/session/memory/mutate": {
"operation": "set",
"key": "now",
"value": {
"expr": "now()",
"onFailure": "keep"
}
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/state/session/memory/mutate",
"actions/state/session/memory/mutate": {
"operation": "set",
"key": "workingTime",
"value": {
"expr": "{\n \"openTime\": zoned_datetime(format_datetime(now(), \"YYYY-MM-DD\"), today.startTime, \"America/Sao_Paulo\"),\n \"closeTime\": zoned_datetime(format_datetime(now(), \"YYYY-MM-DD\"), today.endTime, \"America/Sao_Paulo\")\n}",
"onFailure": "keep"
}
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/network/http/request/send",
"actions/network/http/request/send": {
"method": "POST",
"purpose": "load available services",
"url": {
"expr": "apiUrl + \"/dynadata/type/services/list\"",
"onFailure": "keep"
},
"headers": [
{
"key": {
"expr": "\"x-jwt-token\""
},
"value": {
"expr": "apiToken"
}
}
],
"body": {
"expr": "{\n \"projection\": {\n \"_id\": 1,\n \"name\": 1,\n \"value\": 1,\n \"durationMinutes\": 1\n }\n}",
"onFailure": "keep"
},
"cache": true
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/state/session/memory/mutate",
"actions/state/session/memory/mutate": {
"operation": "set",
"key": "services",
"value": {
"expr": "step(8).data.items",
"onFailure": "keep"
}
}
}
}
],
"systemRoleMessages": [
{
"expr": "\"Voce e um assistente virtual do \" + employee.name + \", você é capaz de fazer agendamentos, voce esta conversando com um cliente chamado '\" + client.name + \"', se recuse a responder qualquer coisa não relacionada ao horário de atendimento, o endereço de atendimento, e os agendamentos do cliente. Caso seja um assunto que você não pode tratar, chame a função 'finaliza_atendimento'\"",
"onFailure": "throw"
},
{
"expr": "'O horário de funcionamento é: ' + toon_encode(employee.workingSchedule)",
"onFailure": "throw"
},
{
"expr": "\"Os serviços prestados são \\n\" + toon_encode(services)",
"onFailure": "throw"
},
{
"expr": "\"Agora são \" + format_datetime(now(), \"DD/MM/YYYY HH:mm\") + \", hoje é \" + format_datetime(now(), \"dddd\", \"America/Sao_Paulo\", \"pt-BR\") + \", \" +\n (today.isDayOff ? ('estamos fechados') : \" e agora são '\" + format_datetime(now(), \"HH:mm\", \"America/Sao_Paulo\", \"pt-BR\") + \", então \" + (is_before(now(), workingTime.openTime) ? \"ainda não estamos abertos\" : (is_after(now(), workingTime.closeTime) ? \"já estamos fechados\" : \"estamos abertos\"))) + \"!\"",
"onFailure": "throw"
},
{
"expr": "\"Antes de registrar o agendamento, descreva o agendamento em detalhes, com o preço total, se o cliente aprovar chame a 'fazer_agendamento'.\"",
"onFailure": "keep"
},
{
"expr": "\"Use a moeda 'BRL', mas utilize a notação humana. Para 'BRL' use 'R$' por exemplo.\"",
"onFailure": "keep"
},
{
"expr": "\"O fuso horário do cliente é America/Sao_Paulo -0300, o fuso horário do estabelecimento é America/Sao_Paulo -0300\"",
"onFailure": "keep"
},
{
"expr": "\"Seja gentil, use emojis\"",
"onFailure": "keep"
},
{
"expr": "\"Caso você perceba que o cliente \" + client.name + \" está querendo falar diretamente com o profissional \" + employee.name + \" ou querendo tratar de uma questão pessoal, finalize o atendimento chamando a função 'finaliza_atendimento'\"",
"onFailure": "throw"
},
{
"expr": "\"Caso o cliente queira marcar um agendamento envie para ele a lista de serviços disponíveis, não envie o ID do serviço.\"",
"onFailure": "keep"
},
{
"expr": "\"Não utilize Markdown nas respostas\"",
"onFailure": "keep"
}
],
"actions": [],
"tools": [
{
"type": "function",
"function": {
"name": "faz_agendamento",
"description": "Marca um agendamento de um cliente",
"parameters": [
{
"name": "horario",
"type": "string",
"description": "\"Horario do agendamento, deve ser no formato ISO 8601, 'YYYY-MM-DDTHH:mm:ssZ', exemplo: 2014-09-08T08:02:17-05:00\"",
"isRequired": true
},
{
"name": "servicos",
"type": "array",
"description": "IDs do serviços que serão feitos no agendamento",
"arrayItems": {
"name": "id_do_servico",
"type": "string",
"description": "ID do serviço a ser realizado no agendamento",
"isRequired": true
},
"isRequired": true
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/network/http/request/send",
"actions/network/http/request/send": {
"method": "POST",
"url": {
"expr": "apiUrl + \"/dynadata/type/events/create\"",
"onFailure": "keep"
},
"headers": [
{
"key": {
"expr": "\"Content-Type\""
},
"value": {
"expr": "\"application/json\""
}
},
{
"key": {
"expr": "\"x-jwt-token\""
},
"value": {
"expr": "apiToken"
}
}
],
"body": {
"expr": "{\n \"data\": {\n \"employeeId\": employee._id,\n \"startTimestamp\": horario,\n \"services\": servicos,\n \"contactId\": client._id\n },\n \"userOptions\": {\n \"notifyEmployee\": true,\n \"allowReminderCreation\": true\n }\n}",
"onFailure": "throw",
"strict": true
}
}
}
}
],
"output": {
"main": {
"expr": "(\n step(0).status == 200\n ? (\"Agendamento realizado com sucesso\")\n : (\n step(0).data.error == \"not_available\"\n ? \"Agendamento não realizado, \" +\n employee.name +\n \" não estará disponível \" +\n (step(0).data.reason != null ? step(0).data.reason : \"\")\n : \"Ocorreu um erro ao tentar fazer o agendamento\"\n )\n)",
"onFailure": "throw"
},
"execute_extra_completion": true
}
}
},
{
"type": "function",
"function": {
"name": "consulta_horarios_disponiveis",
"description": "Consulta horários disponíveis num determinado dia. Não leva um consideração a duração de um possível agendamento, dessa forma pode ser que um agendamento não possa ser realizado em um determinado horário dependendo de sua duração.",
"parameters": [
{
"name": "dia",
"type": "string",
"description": "Dia a ser consultado, no formato YYYY-MM-DD, exemplo: 2025-05-30",
"isRequired": true
}
],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/network/http/request/send",
"actions/network/http/request/send": {
"method": "POST",
"url": {
"expr": "apiUrl + \"/dynadata/type/employees/item/\" + employee._id + \"/executeFunction/giveEmployeeSchedule\"",
"onFailure": "keep"
},
"headers": [
{
"key": {
"expr": "\"Content-Type\""
},
"value": {
"expr": "\"application/json\""
}
},
{
"key": {
"expr": "\"x-jwt-token\""
},
"value": {
"expr": "apiToken"
}
}
],
"body": {
"expr": "{\n \"date\": dia,\n \"lang\": \"pt-BR\"\n}",
"onFailure": "keep"
}
}
}
}
],
"output": {
"main": {
"expr": "step(0).status == 200 ? step(0).data.result.text : \"Não foi possível consultar a agenda\"",
"onFailure": "keep"
},
"execute_extra_completion": true
}
}
},
{
"type": "function",
"function": {
"isZodTool": true,
"zodToolSchema": {
"expr": "{\n \"name\": \"finaliza_atendimento\",\n \"description\": \"Finaliza o atendimento automatizado do GPT e notifica o profissional\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"texto_da_notificacao\": {\n \"type\": \"string\",\n \"description\": \"O texto da mensagem que o profissional receberá explicando o motivo da finalização.\"\n }\n },\n \"required\": [\"texto_da_notificacao\"], // Obrigatório seguir este formato\n \"additionalProperties\": false // Recomendado para o modo 'Strict'\n }\n}",
"onFailure": "throw"
},
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/assistant/lifecycle/session/finalize",
"actions/assistant/lifecycle/session/finalize": {
"cooldown_minutes": 30
}
}
},
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/notifications/company/notification/create",
"actions/notifications/company/notification/create": {
"title": {
"expr": "client.name + \" solicita atendimento\"",
"onFailure": "keep"
},
"text": {
"expr": "texto_da_notificacao",
"onFailure": "keep"
},
"buttons": []
}
}
}
],
"output": {
"main": {
"expr": "\"O atendimento foi finalizado o profissional foi notificado\"",
"onFailure": "keep"
}
},
"parameters": []
}
},
{
"type": "function",
"function": {
"name": "busca_agendamentos",
"description": "Busca os ultimos agendamentos do cliente",
"parameters": [],
"actions": [
{
"condition": {
"expr": "true",
"onFailure": "keep"
},
"action": {
"actionType": "actions/network/http/request/send",
"actions/network/http/request/send": {
"method": "POST",
"url": {
"expr": "apiUrl + \"/dynadata/type/Event/list\"",
"onFailure": "keep"
},
"headers": [
{
"key": {
"expr": "\"Content-Type\""
},
"value": {
"expr": "\"application/json\""
}
},
{
"key": {
"expr": "\"x-jwt-token\""
},
"value": {
"expr": "userSpace.apiToken"
}
}
],
"body": {
"expr": "{\n \"page\": 1,\n \"pageSize\": 5,\n \"filter\": {\n \"contactId\": {\n \"$eq\": string(client._id)\n }\n },\n \"sort\": {\n \"startTimestamp\": -1\n }\n}",
"onFailure": "keep"
}
}
}
}
],
"output": {
"main": {
"expr": "step(0).status == 200 ? toon_encode(step(0).data.items) : \"Não foi possível buscar os agendamentos\"",
"onFailure": "throw"
},
"execute_extra_completion": true
}
}
}
]
}
},
"platformType": "openai"
}
}

Como Importar

  1. Descargue el archivo ZIP usando el botón de arriba
  2. Navegue a Configuración de la Empresa → Transferencia de Datos en su panel de AutoTalk
  3. Haga clic en Importar y seleccione el archivo ZIP descargado
  4. Revise el resumen de importación y confirme
  5. Todos los IDs de documentos se remapean automáticamente — no se necesita edición manual de IDs
tip

Este paquete incluye tanto el agente como sus dependencias. Todas las referencias cruzadas (IDs de workflow en acciones de herramientas) se vinculan automáticamente durante la importación.