# Chatbot para agendamento online

## Informações Gerais

Um chatbot para agendamento online é um conjunto de funções de construtor de funil que permite automatizar o processo de agendamento de serviços para a sua empresa.

O fluxo de trabalho do bot é baseado na execução sequencial de funções: recebendo dados para exibir ao cliente e, em seguida, passando esses dados adiante 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ços) 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 sua progressão.

{% hint style="info" %}
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](broken://pages/de1694d8fc4f6428ae498d6725f3fe98cb380ff3) e [Dicionários](broken://pages/eb0fd65abf81b90166a8740b1cf88dd0ecd5e6a2).&#x20;

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](/doc/pt/chatbot/functions/calculadora/arrays.md).&#x20;
{% endhint %}

Abaixo está um diagrama do fluxo de trabalho do bot, em que cada bloco do diagrama representa uma chamada de função específica, e as setas indicam o fluxo de dados passados de um bloco para outro. As informações transmitidas nesses fluxos permitem filtrar os dados solicitados, bem como criar, cancelar ou modificar um horário de agendamento.

<figure><img src="/files/21ecf53cbac783e27927dbc112511f328922dffb" alt="" width="563"><figcaption><p>diagrama do chatbot</p></figcaption></figure>

{% hint style="info" %}
Para ver um diagrama detalhado de configuração do chatbot de agendamento online com as funções em uso, consulte a seção [Exemplo de Implementação do Bot](#example-of-bot-implementation) deste artigo.&#x20;
{% endhint %}

## Obtendo Informações da Filial

Para criar um funil de agendamento online e obter informações sobre as filiais do projeto, use a função get\_companies\_for\_booking.

A função retorna uma lista contendo dados de cada filial (funil) que tem “Agendamento Online” ativado em suas configurações.

Os dados são fornecidos em pares chave-valor e incluem o identificador da filial (id), nome (name) e endereço (address).

A função não recebe nenhum parâmetro.

### Exemplo de uso:

Chamada da função dentro de um bloco:

<figure><img src="/files/fade6d9b0d69e88807a4e1d8db52e9a6022deaeb" alt="" width="375"><figcaption></figcaption></figure>

Exemplo dos dados retornados:

<figure><img src="/files/a7479d386498787f7f0a041575e3830ef594ef77" alt="" width="375"><figcaption></figcaption></figure>

## Obtendo informações sobre cargos ou categorias de serviços

A função get\_categories\_for\_booking(company\_id) permite recuperar uma lista de todos os tipos de especialistas ou categorias de serviços de 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:

<table><thead><tr><th width="310">Parâmetro</th><th>Descrição</th></tr></thead><tbody><tr><td>company_id (obrigatório) </td><td>Identificador da filial, formato esperado — inteiro.</td></tr></tbody></table>

### Exemplo de uso:

Exemplo de chamada da função em um bloco de código:

<figure><img src="/files/bfdd4442b99d8e5e93abec2f239827a64dab5f6a" alt="" width="375"><figcaption></figcaption></figure>

## Obtendo 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 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:**

<table><thead><tr><th width="287"></th><th></th></tr></thead><tbody><tr><td>company_id (obrigatório)</td><td>Identificador da filial, formato esperado — inteiro;</td></tr><tr><td>service_ids (opcional)</td><td>ID do serviço ou uma lista de IDs de serviços, formato esperado — um inteiro ou uma lista de inteiros entre colchetes separados por vírgulas, por exemplo, [844, 845]</td></tr><tr><td>job_title_id (opcional)</td><td>ID do cargo, formato esperado — inteiro;</td></tr><tr><td>service_category_id (opcional) </td><td>Identificador da categoria de serviço, formato esperado — inteiro;</td></tr></tbody></table>

**Observação:**

Se você quiser recuperar todos os funcionários de uma filial, deixe os valores de service\_ids, job\_title\_id e service\_category\_id em branco.

* Exemplo de chamada: get\_employees\_for\_booking(14275391)

Para filtrar funcionários por uma lista de IDs de serviços, passe a lista como o segundo parâmetro e deixe job\_title\_id e service\_category\_id em branco.

* 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 em branco.

* 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 da função em um bloco de código:

<figure><img src="/files/5804e6d634dbc2e55e7b6ac283c7baae19455551" alt=""><figcaption></figcaption></figure>

Exemplo dos dados retornados:

<figure><img src="/files/418659f824405a31453f1988f37bd2c4ecced3c9" alt="" width="375"><figcaption></figcaption></figure>

## Obtendo informações sobre serviços

Para obter informações sobre os serviços prestados pela filial, use a **get\_services\_for\_booking** função.

Como resultado da chamada, o bot retornará uma lista contendo dados dos serviços. 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 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:**

<table><thead><tr><th width="310"></th><th></th></tr></thead><tbody><tr><td>company_id (obrigatório) </td><td>Identificador da filial, formato esperado – inteiro;</td></tr><tr><td>service_category_id (opcional) </td><td>Identificador da categoria de serviço, formato esperado – inteiro;</td></tr><tr><td>employee_id (opcional) </td><td>Identificador do funcionário, formato esperado – inteiro;</td></tr></tbody></table>

#### Observação na seção “Parâmetros”:

Se você quiser recuperar todos os serviços de uma filial, deixe os **service\_category\_id** e **employee\_id** valores em branco.

* 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 **service\_category\_id** e **employee\_id** parâmetros. 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) - filtragem por ambos os parâmetros;

### &#x20;Exemplo de uso:

Chamando a função dentro de um bloco:

<figure><img src="/files/2c4689e5a0930a17fd3d01b52b276c39f904603f" alt=""><figcaption></figcaption></figure>

Exemplo dos dados retornados:

<figure><img src="/files/5647e38f91bb722a089aadaef40a69a2674c28ff" alt="" width="375"><figcaption></figcaption></figure>

## Obtendo datas disponíveis para agendamento

Depois que o cliente selecionar os serviços para agendamento, ele precisa obter uma lista de datas disponíveis.

Para gerar essa lista, use a **get\_dates\_for\_booking** função.

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:

<table><thead><tr><th width="309.33941650390625"></th><th></th></tr></thead><tbody><tr><td>company_id (obrigatório) </td><td>identificador da filial, formato esperado – inteiro;</td></tr><tr><td>service_ids (opcional)</td><td>lista de identificadores de serviços para agendamento, formato esperado – inteiro ou uma lista de inteiros entre colchetes separados por vírgulas (por exemplo, 842 ou [842, 843]);</td></tr><tr><td>employee_id (opcional)</td><td>identificador do funcionário, formato esperado – inteiro. Se o valor do parâmetro for deixado em branco ou passado como uma string vazia “”, a função buscará datas disponíveis entre todos os funcionários que fornecem o conjunto completo de serviços da lista service_ids;</td></tr><tr><td>days_limit (opcional)</td><td>número de dias a partir da data atual dentro dos quais a busca por datas disponíveis é realizada, formato esperado – inteiro, valor padrão – 14 (dias);</td></tr></tbody></table>

### Exemplo de uso:

Chamando a função dentro de um bloco:

<figure><img src="/files/4a23b4e338d58d141756561bbc898b74a322220d" alt=""><figcaption></figcaption></figure>

Exemplo dos dados retornados:

<figure><img src="/files/5a0275386404361e824a9c43d5fb58b1304f65e8" alt="" width="375"><figcaption></figcaption></figure>

## Obtendo horários disponíveis para agendamento

Para obter uma lista de horários disponíveis para agendamento, use a **get\_slots\_for\_booking** função.

A função verificará o horário disponível 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:

<table><thead><tr><th width="284"></th><th></th></tr></thead><tbody><tr><td>company_id (obrigatório)</td><td>identificador da filial, formato esperado – inteiro;</td></tr><tr><td>service_ids (opcional) - </td><td>lista de identificadores de serviços para agendamento, formato esperado – inteiro ou uma lista de inteiros (por exemplo, 842 ou [842, 843]);</td></tr><tr><td>date (opcional) - </td><td>data para verificação de horários, formato esperado – string no formato “dia.mês.ano”, por exemplo “01.01.2024”;</td></tr><tr><td>employee_id (opcional)</td><td>identificador do funcionário, formato esperado – inteiro. Se o valor do parâmetro for deixado em branco ou passado como uma string vazia, a função buscará horários livres nas agendas de todos os funcionários que trabalham na data selecionada e fornecem o conjunto completo de serviços da lista service_ids;</td></tr><tr><td>slot_interval (opcional) </td><td>intervalo em minutos entre os horários disponíveis, formato esperado – inteiro, valor padrão – 30 (minutos);</td></tr></tbody></table>

### Exemplo de uso:

Chamada da função no bloco:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXc7GJ9EjdCro_idrF14dVYscslN653oUESQaAFjHBWZrSO8q4joGD95kXjFfaX-E2oRT_nLCdKNrGdN9j5wBVJFKOgiyG2ZGDJNjR-l3OAhvP2E0pPTA0dOiYD3WxGdxdD57bRO-UC3CoGVVO4XV3Cq5BNpc8cZ1S6S0lsnlw?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Exemplo dos dados retornados:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe6V_i1iPe4C6A6CDJPu6GNK4fFLzUzq4ktYRRf01jRRgvRl87Ir3hWs2GbWRsYatbz0o8srDyE6pHklrvZ129tilNr5fuR9C_lhQP75MO-_Mfi9JVgcTvHoldK6Y8dcZ_cQamJp2JDxBfA8OU3a9cDgPavncaz-9aU_p31qg?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Criando um agendamento

Para criar um agendamento online, use a **create\_booking** função.

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),&#x20;
* data (booking\_date),&#x20;
* horário (booking\_time),&#x20;
* nomes dos serviços (services),&#x20;
* duração do agendamento (service\_duration),&#x20;
* custo total (total\_cost),&#x20;
* nome do funcionário designado (employee\_name) e seu cargo (job\_title),&#x20;
* nome da filial (company\_name) e endereço da filial (company\_address)&#x20;

no formato “chave: valor”.

#### Ordem dos parâmetros:&#x20;

company\_id -> service\_ids -> booking\_date -> booking\_time -> employee\_id

Parâmetros:

<table><thead><tr><th width="288"></th><th></th></tr></thead><tbody><tr><td>company_id (obrigatório)</td><td>identificador da filial, formato esperado – inteiro;</td></tr><tr><td>service_ids (obrigatório)</td><td>lista de identificadores de serviços para agendamento, formato esperado – inteiro ou uma lista de inteiros (por exemplo, 5 ou [5, 10, 15]);</td></tr><tr><td>booking_date (obrigatório)</td><td>data do agendamento, formato esperado – string no formato “dia.mês.ano”, por exemplo “15.01.2024”;</td></tr><tr><td>booking_time (obrigatório) </td><td>horário do agendamento, formato esperado – string no formato “horas:minutos”, por exemplo “12:30”;</td></tr><tr><td>employee_id (opcional)</td><td>identificador do funcionário, formato esperado – inteiro. Se o valor do parâmetro for deixado em branco ou passado como uma string vazia “”, a função fará o agendamento com um funcionário aleatório que forneça o conjunto completo de serviços da lista service_ids, se eles estiverem disponíveis na data e hora especificadas;</td></tr></tbody></table>

### &#x20;Exemplo de uso:

Chamada da função no bloco:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdb3Fq2gqGtJ-QK342Hr12Ckv-krW_04_uAeJsCcnKpCq_iTC8mAxXjXvc_UqOVAOfm7WGcHYlfcvZjImoZXoNuPYCctsZOPB35toHI4zWMmK-sr3GoEdujlh8YQRxXsF_qN-I836wsU3AKhMvP8t0KiF0h6syWhECIxsynkQ?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Exemplo de resposta de agendamento bem-sucedido:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfsZPfW9v1VoJqC3nNqtnlLQJS-KhAaEi3uUzhz26vYmcxajMRMwd7NnZVZB2LpmavglbNibSpAAJIlo0mbge1_K6rguZTf1tE4NxkBPmKQ1GCy0x47vzfkIV5DTN-R-RlYpMZ-bfAQ-vrZ_tEM6mugSbn0E5BAjHCVN2Gdmw?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Ao criar agendamentos e, posteriormente, solicitar novamente os horários disponíveis, você notará que as listas ficaram menores. Por exemplo, em 05.02.2024, o horário de 18:00 não está mais disponível (ele estava livre apenas na agenda de Victoria) e, para Paul Thompson, os agendamentos para corte de cabelo masculino e modelagem de 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.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfglzV1DHx8clVfshVMInDi9MOS6sAlPGG8Axr6FYKBAeINwRaj2gvJMRYNcec7ZmDCnFKYCkU64AQqz2mgMWxCnp4G4YPRPb6C9D9g9KLKFM2e2bCVpBA2refY_fChq-W1uNy196r5d8dNZUudGRg-2qgN9NX20lCteL8AZw?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Obtendo informações sobre os próximos agendamentos de um cliente

Você pode visualizar os agendamentos atuais de um cliente chamando a **get\_bookings\_info** função.

A resposta retornará uma lista de agendamentos ativos, juntamente com informações detalhadas de cada agendamento.

As informações do agendamento são fornecidas no formato “chave: valor” e incluem:

* identificador do agendamento (booking\_id),&#x20;
* data (booking\_date),&#x20;
* horário (booking\_time),&#x20;
* identificadores (service\_ids) e nomes (service\_names) dos serviços selecionados,&#x20;
* duração do agendamento (booking\_duration),&#x20;
* custo total dos serviços (total\_cost),&#x20;
* identificador (employee\_id) e nome (employee\_name) do funcionário designado, e seu cargo (job\_title),&#x20;
* identificador da filial (company\_id)&#x20;
* nome da filial (company\_name) e endereço (company\_address).

#### Parâmetros:

<table><thead><tr><th width="253"></th><th></th></tr></thead><tbody><tr><td>client_id (opcional)</td><td>ID do cliente, req – Este parâmetro é obrigatório se você quiser recuperar agendamentos de um cliente específico; por padrão, usa o ID do cliente da conversa com o bot.</td></tr></tbody></table>

### Exemplo de uso:

Chamada da função no bloco:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeKlJcFxIx3cc_3vb8g0MARiqu6iNE4eW8BEmVY21MjT74GxS2U7JKFaAn6Sia99v4kQ4O8HuHFYkQJs8jCNmtpZHIkKq1SZ3_3BCBSA7mCs_iXVk6Ucu8hWTOHN7mPa0J5LGG5QSRK8TSP9BEZracVVNQBZKuZkLJx36r_TA?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Exemplo dos dados retornados:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcHzfzRWdUXAmr-iwrHhcdpHYraOD--i4jjI5ftsc-KRzzEOOFArT3hKZE--WucI4m3_b2v0DK99dV4EL2BQ9d0U2q-2fGHM6RiCHX_YUl7kgI-SA4zJIHs4zFte6GhgQAMfUY9Qim4THusxMhKielEnXQuHzapLqmh_oZm?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Alterando a data e a hora do agendamento

Um cliente pode alterar independentemente a data e a hora do agendamento. Para isso, ele precisa acessar o bloco do funil onde a **modify\_booking\_time** função é 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) “Horário do agendamento modificado” no formato “chave: valor”.

#### Ordem dos parâmetros:&#x20;

order\_id -> new\_date -> new\_time

#### Parâmetros:

<table><thead><tr><th width="300"></th><th></th></tr></thead><tbody><tr><td>order_id (obrigatório) </td><td>identificador do agendamento, valor esperado – inteiro;</td></tr><tr><td>new_date (obrigatório)</td><td>nova data do agendamento, formato esperado – string no formato “dia.mês.ano”, por exemplo “16.01.2024”;</td></tr><tr><td>new_time (obrigatório)</td><td>novo horário do agendamento, formato esperado – string no formato “horas:minutos”, por exemplo “14:30”;</td></tr></tbody></table>

### Exemplo de uso:

Chamada da função no bloco:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcDyllYwQDcuLOWIAFTCHb4A765baTgyFrir86V0h3ja3OQpECP2D5TszmK-M_PbKmQRVbp1LFLUMc_JIU4m9562kGnWz9WILVhjpMhf1jZw5bOUXCuBbUasMKWeaTo0pATOPujX4QK6laEk2TlXPU6Qycc7xlih1KbEBxK?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdKqYrp28WS18aq3-_0I_3iDJUc2FmzwsilP1-5do9jmVjjVJ3Igfflo9rMnU_KEWWdAUYSZtjp6B0bVxwBcc7P21RvWVIeCOEAq0pNEh1KYDxJATu71S1Fiil4gicJeFuq5MAcp7bnQdUqRf8kjrWMXuA2_Fl09tjKwEPI?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

O horário de 16:00 anteriormente ocupado agora está disponível para agendamento, e a criação de um novo agendamento para os mesmos serviços agora só pode ser feita a partir de 11:00

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeM-8-vu5dfYf4DlMnzlWTk08tQm80ne-qTBJleANK0Mjn-TuZWyMbO13Hex4FzdwvCgQspNeErgWwQkTZIejzDWK1BItCGxrLpAi9D0XFx75rqFvUF9UChQ_LoZqUNozZzKwubmGkx7XSgsTm-_1CBORCt5Nidh5X4ohbx?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeCyMMrRSlqAdCpmu0-HWsS6iKxW6xHjdtcnZ2NjxLTaRy7W_w3mhyLZQ2PjZgpvbmHRnRML-5A6hTwHpgpLaTerklX-opM8_UTQAeuT-ev2bd7AvC6N1ynPf50EUVRs6m4hZU4YIKnWQRamRcGbror5uJ7ElZ2v2KPtX1NxQ?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Cancelando um agendamento

Um cliente pode cancelar independentemente um agendamento existente. Para isso, ele precisa acessar o bloco onde a **cancel\_booking** função é chamada.

Um cancelamento bem-sucedido retornará o status da operação (status) com o valor True e uma mensagem (message) “Agendamento excluído” no formato “chave: valor”.

Ordem dos parâmetros:

pipeline\_id -> order\_id

Parâmetros:

<table><thead><tr><th width="321"></th><th></th></tr></thead><tbody><tr><td>pipeline_id (obrigatório)</td><td>identificador da filial, valor esperado – inteiro;</td></tr><tr><td>order_id (obrigatório)</td><td>identificador do agendamento, valor esperado – inteiro;</td></tr></tbody></table>

### Exemplo de uso:

Chamada da função no bloco:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdWFqf619l5j1eQoe4p6QCPqGGsqcyEefKLs5PJxPwecillJaxUnQSC5eHFcT2olsrM62PHJDVGyxeD6Tl2xg3id27f-p51spmVZFjlDhSwzw3TwMx-CbQT9n3fnjYLPCO4wlqtKdB0cd1W36dp9wXYg4gEVJh6eketyDUQ?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Resposta do bot para um cancelamento bem-sucedido:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe7FcrjKQxzoEgo3wfMuUt0a9zkPVkb02ojx5pZ3KYWU5NfLazmLhgCaNxvigreYXXfzYFEhd5KyF7D3808VLBGl5Cte7YRXI0cWQK3J9ZV05G5y5XUIXGq1Arcac2KrPmHnCCakarcTFXd_9X5_4yYsI6j4rpMySaZr3lA?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcRLLDJ0un8QPUj11yC8VDy2TlbbgUHuDd13YSQ3AZU3ey4Cg00SMEke5LFPKWGHR8em7BWHiH8l-bSqGICNAU5CP9ORBGI9CFMKziB0JQLZA0QUvYJ8q-SXXQGQsPCnEWdNrDZ1G7bZupR4zOLgGpJt9TgZBxG_R1MPf9f?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Exemplo de implementação do bot

### Configurações do chatbot

**Bloco nº 1.** Início. Nenhuma ação especial é necessária

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcXoXRmydVuSiBv9lAWBG-5rDy8cIcNbk2zjsJ7o5kxShJEExU13A9O2v9pFuqG6oTndOvrnRft3jHQaZFf-7RGYiFM09FPzpQdrdS47_ttQcgLvbDExj9xIBEjJ80qVPHSAFzfth5zcO_rCvqk66FaK-Nx?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption><p>Bloco 1.</p></figcaption></figure>

**Bloco nº 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 formato 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 de passagem para o próximo bloco

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdLGPcvhDRumGklk525zCB4VEqziavYPoNoqJiC3XD036d1R_jcSF2yeDhFZvrTOTxFrALYNF9_ezfdbKxgn6fSuIkTyCzHb9Cxaw3cW9ywtyUbvf3Bezb3ukuZC3fFuM5e0Jb8tNCyWRqUv-8aev2MHeo?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption><p>Bloco nº 2</p></figcaption></figure>

**Bloco nº 3**. Recupere e exiba os 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á exibido como botões abaixo da 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, a descrição e o preço do serviço selecionado pelo cliente

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfoMVt3v-buSCBlpe9hKGoFoemSKQW0oeLLZ7LZwZ24vR507mCOTzuewDhUsfCangNsex0sKbdc9k-HeJXQ-ermTNsf_p3O4xtlpygOhFmzyWZ2cjCDxHUUdZq0gCsiSGJmSWIkN04n4XOkpX2t6nHVORhb?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption><p>Bloco nº 3</p></figcaption></figure>

**Bloco nº 4.** Exibir datas de agendamento disponíveis

print\_dates - use a função para obter as datas de agendamento disponíveis para o serviço selecionado

print\_dates - adicione a string “Voltar para a lista de serviços” ao array de datas se quiser que esse botão apareça junto com as datas.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeNbqnf6RHcvKlt8ECsxm7uUQpLClSJ2kVgW9HPi35Pmq5XtsAR_yXWCxHr_0CYwJ4whUQfdof71uxnPt8BHxobfYJdxGeDhmf3BXd5NHAPyC12RT6cRIzn8g_Kda70WRAhjYhJ85Vfhi9i40aqUu-Kvg8E?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcuUIlqDrtiEGIX7Dk8d1YILa_s9F2bRzrgcgQ_eytukzhEe2IDatqW7VPPgyQeLfzOYqtY-vL2rdCaGYSf3PSRpe4JSXlHD68TJHrOHec6tBRvMOp_sIMs3bqWAQKX9jWPDsWjY-CGQnZEc8QPr2ZGikXQ?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Bloco nº 5.**\
No bloco nº 5 salvamos a data escolhida pelo cliente. Isso deve ser feito em um bloco separado porque, nas etapas seguintes, ao retornar ao Bloco 6, a variável question já não conterá a data escolhida pelo cliente.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfBnoXAoC-hwhm7MJk242wb1qbGz4qwZr-L180d271_eNanul0suKBZUdiYAy95nTZD7rVZv5bYgnB8dZ3u0pW75yMtdz2mQ6bzqTTAxEhVZAihD-VCj-45M9jldb6Ic_JuyDEWsvlodPlxY-2150k62HuW?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Bloco nº 6.** Seleção e exibição de horários disponíveis para agendamento.

data - obtemos os horários disponíveis.

A lógica é a mesma do Bloco nº 4 com a exibição das datas disponíveis. Também é importante não esquecer de configurar uma prioridade maior para a seta “Voltar para a seleção de data”

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdO4UUM3CyFvJN5lNulwUwHbEWQhng6kaW_YVmOrbkP-2VoQHB3Sg09TkpPv5joYo3EV_9iaFI68B4dfgzL49RveaMzZHQIOs7mKyzFgsA6PKrwrKM0oMKZVGMZjbyz2rxIi0kpaOZFZIStEzUvASiyunli?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Bloco nº 7.** Salvamento do horário escolhido em uma variável e tentativa de agendar o cliente.&#x20;

choosed\_time - salvamos o horário

a - tentativa de agendar o cliente

booking\_result - obtemos o resultado da execução da função.&#x20;

É necessário obter o resultado, pois várias pessoas podem tentar agendar para o mesmo horário ao mesmo tempo.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXczzYBOEvinNi3ixDewD_V6XrrfAwjChrujdPmo7MK1m1qV-8depW4IV8_-VxA6_u2RKwTBYifAi4q5kxN1OEG_6m9exNS-hAvtB2VH49kP-X5uuAboxpgb--ugGdit-JI6inwRHXMQtbPbqSy-oe3ZvLi_?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Bloco nº 7.1.** Não foi possível agendar o cliente.

Este bloco é necessário apenas para exibir a mensagem de erro. Após o envio da mensagem, retornamos o cliente para a seleção do horário de agendamento

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXflFxwu5IdfEsIzK1dpt4STbIc6GY2HDz-NvpW6vmG12aBRj5TWgaN2O_YWlLaCSN3B52bMDf8EIMo2kKofNkTzD_TqRWu7F5rEL1NiFrlPiJwLntEG9DgdSKYocFtNQMADKTMJFHADE4fPUgeFJJ5crM3y?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Bloco nº 8.** Agendamento realizado com sucesso.

Informamos ao cliente que ele foi agendado para o serviço e exibimos o botão para pagamento.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXebWZ4RSKanJHHLwJmqRzx_sQAwEqpnz7hMmMOqJziY9J4IpSAPevmApHRz_oR3GEIuceV_IOAi1XdpUMqNtgC5nI-vB75hIq_9NDudNSGzYESotA-rl-WCFjLtcVQA6kiFvcDvij0koA2ttg4NVvwwiQI?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

Exemplo de configuração dos botões.&#x20;

Para a configuração, usamos as variáveis que obtivemos no bloco nº 3:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcuWNRouJXZN4GcbOP_g5b2cBGtzMjW3t20fJDYvPqy02QHr_Mx7seJfSJSjnieOxRiuZ2eQ8F8iJEcBkllOYNYR4cXYGFfuK69jsVhnLUuq-3a2a5Lts8UXEJyP1m0DvNoEmyDiMcXXpLQX8srFEgvnSo?key=Gdkru5ZyRiCm0ujtl74quw" alt="" width="375"><figcaption></figcaption></figure>

**Bloco nº 8.1.**

Neste bloco, confirmamos o pagamento bem-sucedido. Configuramos a transição para o bloco de acordo com o sistema de pagamento utilizado

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcKwiimzQWaWQdY87DhVF0EHgXGIN1am1ybhpQIN2ZjubanvoORX4nF86oxQfeDUH0rSfPPLQp4BVRDYJh0wMWQRp-ko-Dm8PmWeBPyA9KvPiSwDt6GkzUrsFw9ITDDjH7-JsG97mxgwZ_8OtCMFVVkhPza?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Bloco nº 8.2.** O 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 a execução da função, obtemos a resposta sobre se o cancelamento foi concluído com sucesso.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe0S7A8roVZ-cqy20A7SABHlZEH561HeUudCIFcTEmV19DibNgEWLoEqZ45pWtukMuEdaxuJ1KjsvAiR7hFeGCrNLIMBghZIglifArlGWnBA1O6uKfGoeHRyfYihmIH1EalHVrqOKJKW6AsvOraqTIM2k6j?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXf4JnYF9gJdYh1IeHnh0KIP8TBthzNABp_TjejLyQXugQBBb_Xvz4yfoedExR9VJy6koxfpNqGkYe38fioTFrzuuioJjVVVp2HLB9w8gRt5LqMcFX5samcaj30aBLV69MVTCNrg2bEbnVaoxv5IuUidtB3Y?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

Esquema completo:<br>

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXelLMX7_UQ0Op_QDn8S-GKMp68O-cJDYMFviZLju8TUjMMYKIMwyv9AePru93ccedeKajHSx4kP5e4t1XFfAtabSJBfluvE7q-VsZkx1rO3ICGBm0dvVUtEriaro8UXixY6XratDgILrSOMHfXIpfaHb8Y?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

### Demonstração<br>

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcgQC7kI1xOkzZOYyijAdDELqmlgit1O615fU0RQjYF-g-ztgkNayFf2gaPupplvgiAoE1T_bOdSh-dLO4Oaqu2AVnmh-5uooWhCc3BOqqdIzgQh6gV4r3l86VJHRgXEOZTmKD3HqbXoTuRrpZ8qYJOj4Ol?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcMs9Sg7IOqKfcvVdL5ud1odnPrlHg0Acfa71bnpFAfmQ_7GP4AsKI7JI2GVzAQZV9a2d0jMGmFamGiuD_mMG00SsfAQZvje_aPGybcmsKBU0F2VpTbv5H9qPPA5gszFwQyZaaG3TH9HDutSZE19JzNo5nV?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

## Callback do agendamento

Após o agendamento, um callback — notificação de agendamento — chegará à conversa com o cliente com o seguinte formato:

<figure><img src="/files/607d4169ca5dc95a0c0b2b51a57a4f16fc3358aa" alt="" width="464"><figcaption></figcaption></figure>

<mark style="color:orange;">**new\_order\_in\_calendar**</mark> - parte imutável do callback&#x20;

&#x20;<mark style="color:yellow;">**\[489046159]**</mark> - order\_id identificador da solicitação&#x20;

<mark style="color:red;">**Agendamento de data\_hora\_adicionado**</mark>

<mark style="color:purple;">**por 30 minutos**</mark> - duração do serviço&#x20;

<mark style="color:red;">**Ao objeto: Teste 30**</mark> - a qual objeto exatamente foi adicionado o agendamento

Formato do próprio callback:

***`new_order_in_calendar: [489046159] Agendamento adicionado de 2025-06-01 14:00 até 2025-06-01 14:30 por 30 minutos. Ao objeto: Teste 30`***

Você pode configurar a reação ao callback definindo o valor na condição do bloco:

<figure><img src="/files/c2d005f59d48419c76e4fd94b657d3b91823b0c0" alt=""><figcaption></figcaption></figure>

No bloco, você pode escrever a mensagem de resposta necessária para o cliente.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/pt/booking/chatbot.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
