Informações Gerais
Um chatbot para agendamento online é um conjunto de funções de construção de funil que permitem automatizar o processo de agendamento de serviços para sua empresa.
O fluxo de trabalho do bot é baseado na execução sequencial de funções: receber dados para exibir ao cliente, depois passar esses dados para acionar novas funções e obter novos resultados.
À medida que o cliente avança pelo funil, você deve passar para cada bloco subsequente apenas os dados que correspondem à escolha do cliente — use esses dados para configurar as próximas chamadas de função.
Graças à capacidade de recuperar dados intermediários (por exemplo, cargos de funcionários e categorias de serviço) e passá-los adiante para filtrar funcionários e serviços, você pode configurar seu funil de forma flexível e dar ao cliente controle sobre as etapas de seu progresso.
Todos os métodos descritos neste artigo retornam um array de dicionários.
Para trabalhar com eles de forma conveniente, recomendamos revisar as seções Arrays e Dicionários.
Além disso, para usar a função de geração de ações do usuário (seleção de serviço, data, agendamento), sugerimos considerar o método tools_make_button_str_checker.
Abaixo está um diagrama do fluxo de trabalho do bot, onde cada bloco do diagrama representa uma chamada de função específica, e as setas indicam o fluxo de dados passados de bloco para bloco. As informações passadas nesses fluxos permitem filtrar os dados solicitados, bem como criar, cancelar ou modificar um horário de agendamento.

Para ver um diagrama de configuração detalhado do chatbot de agendamento online com as funções em uso, consulte a seção Exemplo de Implementação do Bot deste artigo.
Recuperando Informações da Filial
Para criar um funil de agendamento online e recuperar informações sobre as filiais do projeto, use a função get_companies_for_booking.
A função retorna uma lista contendo dados para cada filial (funil) que tenha “Agendamento Online” habilitado em suas configurações.
Os dados são fornecidos como pares chave-valor e incluem o identificador da filial (id), nome (name) e endereço (address).
A função não aceita parâmetros.
Exemplo de uso:
Chamada de função dentro de um bloco:

Exemplo de dados retornados:

Recuperando informações sobre cargos ou categorias de serviço
A função get_categories_for_booking(company_id) permite recuperar uma lista de todos os tipos de especialistas ou categorias de serviço para uma filial.
Cada item na lista retornada contém um identificador (id), um nome (name) e uma descrição (description) do cargo ou categoria de serviço. Os dados são representados como pares "chave-valor":
Parâmetros:
Exemplo de uso:
Exemplo de chamada de função em bloco de código:

Recuperando informações sobre funcionários
Se você precisar fornecer informações sobre os funcionários da filial, use a função get_employees_for_booking.
A chamada retornará uma lista de dados contendo o identificador do funcionário (id), nome (name), informações (information) e cargo (job_title).
Você também pode filtrar funcionários por lista de serviços, cargo ou categoria de serviço. Para fazer isso, passe um parâmetro adicional na chamada da função: service_ids, job_title_id ou service_category_id.
Ordem dos parâmetros:
company_id -> service_ids -> job_title_id -> service_category_id
Parâmetros:
Nota:
Se você quiser recuperar todos os funcionários de uma filial, deixe os valores para service_ids, job_title_id e service_category_id vazios.
- Exemplo de chamada: get_employees_for_booking(14275391)
Para filtrar funcionários por uma lista de IDs de serviço, passe a lista como o segundo parâmetro e deixe job_title_id e service_category_id vazios.
- Exemplo de chamada: get_employees_for_booking(14275391, [844, 845])
Para filtrar funcionários por cargo, passe o ID para o parâmetro job_title_id e deixe service_ids e service_category_id vazios.
- Exemplo de chamada: get_employees_for_booking(14275391, “”, 1021)
Para obter funcionários que prestam serviços de uma categoria específica, deixe service_ids e job_title_id como strings vazias e passe o ID da categoria selecionada para service_category_id.
- Exemplo de chamada: get_employees_for_booking(14275391, “”, “”, 1019)
Exemplo de uso:
Chamada de função em um bloco de código:

Exemplo de dados retornados:

Obtendo informações sobre serviços
Para obter informações sobre os serviços prestados pela filial, use a função get_services_for_booking.
Como resultado da chamada, o bot retornará uma lista contendo dados do serviço. Cada entrada de serviço inclui um identificador (id), um nome (title), uma descrição (description), um preço (price) e a duração do serviço em minutos (duration).
Você pode filtrar a lista resultante por categoria de serviço, por funcionário, ou por ambos simultaneamente. Para fazer isso, passe os parâmetros adicionais service_category_id e/ou employee_id ao chamar a função.
Ordem dos parâmetros:
company_id -> service_category_id -> employee_id
Parâmetros:
Nota para a seção “Parâmetros”:
Se você quiser recuperar todos os serviços de uma filial, deixe os valores service_category_id e employee_id vazios.
- Exemplo de chamada: get_services_for_booking(14275391)
Se você quiser filtrar serviços por categoria e/ou funcionário, passe os identificadores correspondentes nos parâmetros service_category_id e employee_id. Para filtrar por apenas um parâmetro, forneça uma string vazia para o outro.
Exemplos de chamadas:
- get_services_for_booking(14275391, 1018) - filtro por categoria de serviço;
- get_services_for_booking(14275391, “”, 512978) - filtro por funcionário;
- get_services_for_booking(14275391, 1018, 463665) - filtro por ambos os parâmetros;
Exemplo de uso:
Chamando a função dentro de um bloco:

Exemplo de dados retornados:

Obtendo datas de agendamento disponíveis
Depois que o cliente selecionar os serviços para agendamento, ele precisa recuperar uma lista de datas de agendamento disponíveis.
Para gerar esta lista, use a função get_dates_for_booking.
A função verificará os horários disponíveis e retornará uma lista de datas adequadas no formato “dia.mês.ano”.
A ordem dos parâmetros é a seguinte:
company_id -> service_ids -> employee_id -> days_limit
Parâmetros:
Exemplo de uso:
Chamando a função dentro de um bloco:

Exemplo de dados retornados:

Obtendo horários de agendamento disponíveis
Para obter uma lista de horários de agendamento disponíveis, use a função get_slots_for_booking.
A função verificará a disponibilidade de horário na data selecionada e retornará uma lista de horários livres no formato “horas:minutos”, por exemplo [“09:00”, “11:00”, “14:30”, “16:00”].
A ordem dos parâmetros é a seguinte:
company_id -> service_ids -> employee_id -> slot_interval
Parâmetros:
Exemplo de uso:
Chamada de função no bloco:

Exemplo de dados retornados:

Criando um agendamento
Para criar um agendamento online, use a função create_booking.
Se o agendamento for bem-sucedido, a função retornará informações sobre o status da operação (status) com o valor True e os detalhes do agendamento (booking) no formato “chave: valor”.
Os dados do novo agendamento incluem:
- identificador (id),
- data (booking_date),
- horário (booking_time),
- nomes dos serviços (services),
- duração do agendamento (service_duration),
- custo total (total_cost),
- nome do funcionário designado (employee_name) e seu cargo (job_title),
- nome da filial (company_name) e endereço da filial (company_address)
no formato “chave: valor”.
Ordem dos parâmetros:
company_id -> service_ids -> booking_date -> booking_time -> employee_id
Parâmetros:
Exemplo de uso:
Chamada de função no bloco:

Exemplo de uma resposta de agendamento bem-sucedida:

Ao criar agendamentos e subsequentemente solicitar horários disponíveis novamente, você notará que as listas encurtaram. Por exemplo, em 05.02.2024, o horário das 18:00 não está mais disponível (estava livre apenas na agenda da Victoria), e para Paul Thompson, os agendamentos para corte de cabelo masculino e barba agora podem ser feitos das 9:00 às 14:00, já que a duração total dos serviços é de 1 hora e 45 minutos, e Pavel já tem outro agendamento às 16:00.

Obtendo informações sobre os próximos agendamentos de um cliente
Você pode visualizar os agendamentos atuais de um cliente chamando a função get_bookings_info.
A resposta retornará uma lista de agendamentos ativos, juntamente com informações detalhadas para cada agendamento.
As informações do agendamento são fornecidas no formato “chave: valor” e incluem:
- identificador do agendamento (booking_id),
- data (booking_date),
- horário (booking_time),
- identificadores (service_ids) e nomes (service_names) dos serviços selecionados,
- duração do agendamento (booking_duration),
- custo total dos serviços (total_cost),
- identificador (employee_id) e nome (employee_name) do funcionário designado, e seu cargo (job_title),
- identificador da filial (company_id)
- nome da filial (company_name) e endereço (company_address).
Parâmetros:
Exemplo de uso:
Chamada de função no bloco:

Exemplo de dados retornados:

Alterando data e horário do agendamento
Um cliente pode alterar independentemente a data e o horário do agendamento. Para fazer isso, ele precisa acessar o bloco do funil onde a função modify_booking_time é chamada.
Se a operação for bem-sucedida, a função retornará o status da operação (status) com o valor True e uma mensagem (message) “Booking time modified” no formato “chave: valor”.
Ordem dos parâmetros:
order_id -> new_date -> new_time
Parâmetros:
Exemplo de uso:
Chamada de função no bloco:

Resposta do bot para uma operação bem-sucedida:

O horário das 16:00 anteriormente ocupado agora está disponível para agendamento, e criar um novo agendamento para os mesmos serviços agora só pode ser feito a partir das 11:00

Nas informações de agendamento do cliente, você também verá o horário de agendamento atualizado:

Cancelando um agendamento
Um cliente pode cancelar independentemente um agendamento existente. Para fazer isso, ele precisa acessar o bloco onde a função cancel_booking é chamada.
Um cancelamento bem-sucedido retornará o status da operação (status) com o valor True e uma mensagem (message) “Booking deleted” no formato “chave: valor”.
Ordem dos parâmetros:
pipeline_id -> order_id
Parâmetros:
Exemplo de uso:
Chamada de função no bloco:

Resposta do bot para um cancelamento bem-sucedido:

Após o cancelamento, os horários “09:00” e “10:00” estão disponíveis para agendamento novamente:

Exemplo de implementação do bot
Configurações do chatbot
Bloco №1. Início. Nenhuma ação especial necessária

Bloco №2. Neste bloco, recuperamos os dados que serão fornecidos ao cliente.
Descrição do conteúdo da calculadora:
- comp_id - identificador do bloco de serviço, que pode ser encontrado na seção “Serviços”;
- data - informações sobre os serviços prestados
- res - dicionário com dados necessários para gerar botões e definir condições
- numbered_list - pode ser útil se a lista de serviços precisar ser duplicada em forma de texto
- buttons - array de botões gerados a partir dos dados do serviço
- checker - array de nomes de serviços, usado para definir condições para avançar para o próximo bloco

Bloco №3. Recuperar e exibir dados sobre o serviço selecionado.
title - no array de dicionários data, encontre o dicionário onde a chave title é igual a question. Desse dicionário, obtenha o valor para a mesma chave title
description - da mesma forma, obtenha o valor para a chave description
price - da mesma forma, obtenha o valor para a chave price
serv_id - da mesma forma, obtenha o valor para a chave id
b - crie um array de strings que serão exibidas como botões sob a mensagem
res - a partir do array b, crie um array de dicionários como no bloco anterior
buttons - obtenha o array para exibir os botões
Agora temos variáveis contendo o nome, descrição e preço do serviço selecionado pelo cliente

Bloco №4. Exibir datas de agendamento disponíveis
print_dates - use a função para obter datas de agendamento disponíveis para o serviço selecionado
print_dates - adicione a string “Voltar à lista de serviços” ao array de datas se você quiser que este botão apareça junto com as datas.

Para a seta que retorna ao passo anterior, defina uma prioridade maior do que a seta com #{checker}, porque #{checker} também contém a condição “Voltar à lista de serviços”.

Bloco №5.
No bloco №5, salvamos a data selecionada pelo cliente. Isso precisa ser feito em um bloco separado porque, nas etapas seguintes, ao retornar ao Bloco 6, a variável question não conterá mais a data selecionada pelo cliente.

Bloco №6. Seleção e exibição dos horários disponíveis para agendamento.
data - obtemos os horários disponíveis.
A lógica é a mesma do Bloco №4 com a exibição das datas disponíveis. Também é importante não esquecer de configurar a prioridade aumentada para a seta “Voltar à seleção de data”

Bloco №7. Salvar o horário selecionado em uma variável e tentar agendar o cliente.
choosed_time - salvamos o horário
a - tentativa de agendar o cliente
booking_result - obtemos o resultado da execução da função.
É necessário obter o resultado, pois várias pessoas podem tentar agendar o mesmo horário ao mesmo tempo.

Bloco №7.1. Não foi possível agendar o cliente.
Este bloco é necessário apenas para a mensagem de erro. Após enviar a mensagem, retornamos o cliente para a seleção de horário para agendamento

Bloco №8. Agendamento bem-sucedido.
Informamos ao cliente que ele foi agendado para o serviço e exibimos um botão para pagamento.

Exemplo de configuração dos botões.
Para a configuração, usamos as variáveis que obtivemos no bloco №3:

Bloco №8.1.
Neste bloco, confirmamos o pagamento bem-sucedido. A transição para o bloco é configurada de acordo com o sistema de pagamento utilizado

Bloco №8.2. Cliente não pagou pelo serviço. Cancelamento do agendamento
Se o cliente não pagar pelo serviço a tempo, podemos cancelar o agendamento, se necessário.
or_id - obtemos o id do pedido
cancel_status - após executar a função, obtemos a resposta se o cancelamento foi bem-sucedido.

Neste exemplo, o cliente entra no bloco de cancelamento 5 segundos após receber o link de pagamento; em uma situação real, você pode definir o tempo necessário, apenas não se esqueça de ativar o interruptor “Cancelar se saiu do bloco”.

Esquema completo:

Demonstração


Callback sobre o agendamento
No diálogo com o cliente, após o agendamento, será recebido um callback — notificação sobre o agendamento — com a seguinte aparência:

new_order_in_calendar - parte imutável do callback
[489046159] - order_id identificador da solicitação
Adicionado agendamento data_e_hora_do_agendamento
por 30 minutos - duração do serviço
Objeto: Teste 30 - a qual objeto o agendamento foi adicionado
A aparência do callback:
new_order_in_calendar: [489046159] Adicionado agendamento de 2025-06-01 14:00 até 2025-06-01 14:30 por 30 minutos. Objeto: Teste 30
Você pode configurar a reação ao callback inserindo o valor na condição do bloco:

No bloco, você pode inserir a mensagem de resposta necessária ao cliente.


