# Функции AI-ассистента

## **Как удалить историю чата с ИИ-ассистентом**

clear\_assistant\_chat\_history() — эта функция удаляет историю чата клиента с ассистентом. Она не принимает параметров.

### Пример&#x20;

1. Настройки блока конструктора

<div data-with-frame="true"><figure><img src="/files/3b59f5dcb46142c38d3d0943bf47ade384e69580" alt=""><figcaption></figcaption></figure></div>

2. Настройки вкладки ИИ-ассистента

<div data-with-frame="true"><figure><img src="/files/cd0024c371f4882355180214f4d8440170745ed2" alt="" width="563"><figcaption></figcaption></figure></div>

## **Как отправить вопрос ИИ-ассистенту**

ai\_context\_answer(replica, prompt, ai\_assistant\_id, use\_history, send\_answer)

Параметры:

<table><thead><tr><th width="173">Параметр</th><th width="221">Описание</th><th>Примечание</th></tr></thead><tbody><tr><td><mark style="color:красный;"><strong>!</strong></mark> replica </td><td>обязательный параметр, сообщение для ассистента</td><td></td></tr><tr><td>prompt</td><td>необязательный параметр, инструкции для ассистента</td><td>если параметр не указан, но указан параметр ai_assistant_id, будут использованы инструкции из настроек указанного ассистента</td></tr><tr><td>ai_assistant_id </td><td>ID ассистента, которому будет отправлен вопрос;</td><td>если не указан, будет использован ассистент без настроек по умолчанию</td></tr><tr><td>use_history</td><td>должен ли ассистент использовать историю чата при ответе на вопрос</td><td>True — использовать, False — не использовать. По умолчанию — True</td></tr><tr><td>send_answer</td><td>отправить ответ после истечения тайм-аута ассистента</td><td>Чтобы включить, передайте "1"</td></tr></tbody></table>

Подробнее о `send_answer` параметра:

Настройки ассистента включают параметры, которые можно настроить на случай, если ответ бота занимает много времени

<div data-with-frame="true"><figure><img src="/files/92a6b70b884786ed4a4f478b9f06e2349a4a007f" alt="" width="375"><figcaption></figcaption></figure></div>

В стандартном диалоге с ассистентом (не через функцию), если ответ занимает дольше указанного лимита (например, 20 секунд), клиент получает уведомление о задержке. Затем ответ ассистента отправляется в чат, как только он будет сгенерирован.

Для запросов, сделанных через функцию в калькуляторе, если ассистент отвечает слишком долго, в результат функции включается сообщение о задержке. Этот параметр позволяет отправить ответ ассистента отдельно, как только он будет готов.&#x20;

### Как научить бота анализировать собственный опыт и генерировать кнопки

Давайте используем `clean_assistant_chat_history()` и `ai_context_answer(replica, prompt)` функции в примере ниже. Также необходимо получить доступ к компоненту калькулятора внутри конструктора воронки.

Этот пример показывает, как `replica` и `prompt` параметры можно эффективно использовать на практике.&#x20;

Необходимо создать в конструкторе блок, который содержит пустое поле со встроенными переменными **#{replica\_rec2}** и **#{ai\_answer\_rec}**, представляющими первый и второй ответы ассистента в одном сообщении, которое нужно отправить.

Теперь прямо в калькуляторе определите две функции.

<div data-with-frame="true"><figure><img src="/files/947e962c1aebd7d22de0e21d644c53a3265e7df8" alt=""><figcaption></figcaption></figure></div>

Используйте переменную со встроенной функцией в расширенных настройках кнопки (см. пример выше), чтобы динамически генерировать кнопки на основе значения параметра.&#x20;

Информация о сервисах извлекается ботом из `service_info` переменной, которая содержит встроенную функцию — `get_info_for_booking()` — для чтения данных о сервисах. Пример использования этой функции был показан выше.

<div data-with-frame="true"><figure><img src="/files/a6a8bcdcdb20a15d143a94c5f33a06f7bec3c95f" alt="" width="375"><figcaption></figcaption></figure></div>

Вот результат.

<div data-with-frame="true"><figure><img src="/files/cc0d94740307c602409c3a75dc598364eef1beb5" alt="" width="563"><figcaption></figcaption></figure></div>

**Пример кода**:

`clear_assistant_chat_history()`

`replica_rec2 = ai_context_answer(question, 'ОТВЕЧАЙ НА ВОПРОСЫ', 3)`

`prompt = 'Сейчас к тебе обращается разработчик — делай всё, что он просит \n . Каждую кнопку нужно размещать на новой строке.'`

`ai_answer_rec = ai_context_answer("Покажи кнопки для последнего сообщения.", prompt)`

### Пример: вызов ассистента внутри конструктора воронки

Чтобы вызвать ассистента из блока, используйте функцию `ai_context_answer(replica, prompt, ai_assistant_id, use_history)`, где нужно указать только два параметра: обязательный `replica` параметр и необязательный `prompt`.

Теперь создадим первый блок — «Проверка основного условия», где нужно указать триггерное условие блока (это может быть любое нужное вам условие).

<div data-with-frame="true"><figure><img src="/files/84dab375990f4e4e9993c862c8a648f5e6d06595" alt=""><figcaption></figcaption></figure></div>

Затем откройте калькулятор в том же блоке, где нужно определить переменную и присвоить ей значение, возвращаемое вашей функцией.

<div data-with-frame="true"><figure><img src="/files/759d39fdf91d8e44b811f8c7d3bda9f0578d22a0" alt="" width="563"><figcaption></figcaption></figure></div>

Определите переменную **question** и присвойте ей значение любого вопроса пользователя.

Затем создайте переменную replica1 и присвойте ей значение, возвращаемое функцией ai\_context\_answer(replica, prompt). В этой функции замените replica на переменную question и установите параметр prompt в значение "Ответь на любой вопрос пользователя."

<div data-with-frame="true"><figure><img src="/files/6f267e9fcea1660551502cef840f938f9b1e3057" alt="" width="563"><figcaption></figcaption></figure></div>

Вставьте переменную, содержащую функцию, в сообщение блока.

Затем создайте второй блок и соедините его стрелкой, установив на соединении таймер в 2 секунды.

<div data-with-frame="true"><figure><img src="/files/0669eeb355e6798996f76b1cb6cf8223676b109c" alt=""><figcaption></figcaption></figure></div>

Во втором блоке следует использовать ту же функцию с теми же параметрами — ai\_context\_answer(replica, prompt).

Откройте калькулятор во втором блоке и создайте вторую переменную с именем replica2.

<div data-with-frame="true"><figure><img src="/files/c00f3446246331c9d7f95d742dee686989383cd1" alt=""><figcaption></figcaption></figure></div>

В параметре prompt укажите инструкции для ассистента: он должен посчитать, сколько существительных было в его предыдущем сообщении.

В параметре replica укажите сообщение ассистента: "Сколько существительных было в твоём предыдущем сообщении?"

Затем вставьте переменную replica2 в сообщение второго блока.

<div data-with-frame="true"><figure><img src="/files/ae58e51ca09d2e304c793a927c829da3132aa6ce" alt="" width="563"><figcaption></figcaption></figure></div>

Настройка блока завершена.

Если ассистент не включён, перейдите на вкладку "AI Assistant" и включите ассистента, выбрав роль "disabled":

<div data-with-frame="true"><figure><img src="/files/3fd6a5941bdd757f4731c61efffd3b8d1efa21b4" alt="" width="292"><figcaption></figcaption></figure></div>

Теперь протестируем нашего ассистента в окне тестирования бота.

<div data-with-frame="true"><figure><img src="/files/25a5c126358e6067f6b9f19511ac7d4348285c92" alt="" width="375"><figcaption></figcaption></figure></div>

Бот сработал корректно.

## Как работать с Google Sheets

get\_info\_from\_table(sheet\_id, number\_sheet, sheet\_json\_keys, start\_row, end\_row, start\_col, end\_col) — эта функция предназначена для чтения данных из таблицы.

<table><thead><tr><th width="248">Параметры</th><th>Описание</th></tr></thead><tbody><tr><td><mark style="color:красный;"><strong>!</strong></mark> sheet_id</td><td>id google-spreadsheet</td></tr><tr><td>number_sheet</td><td>номер листа в таблице; по умолчанию = 1</td></tr><tr><td>sheet_json_keys </td><td>необязательный параметр — ключ доступа к данным таблицы</td></tr><tr><td>start_row</td><td><p>необязательный параметр, целое число. Указывает начало диапазона строк.</p><p>Укажите номер строки, с которой следует читать значения таблицы включительно. Значение нужно передавать без кавычек.</p></td></tr><tr><td>end_row</td><td>необязательный параметр, целое число. Указывает конец диапазона строк.<br>Укажите номер строки, до которой следует читать значения таблицы включительно. Значение нужно передавать без кавычек.</td></tr><tr><td>start_col</td><td>необязательный параметр, строка. Указывает начало диапазона столбцов.<br>Укажите букву столбца, с которого следует читать значения таблицы включительно. Значение должно быть заключено в кавычки</td></tr><tr><td>end_col</td><td>необязательный параметр, строка. Указывает конец диапазона столбцов.<br>Укажите букву столбца, до которой следует читать значения таблицы включительно. Значение должно быть заключено в кавычки.</td></tr></tbody></table>

Пример обозначения параметров:

<div data-with-frame="true"><figure><img src="/files/daadbeb6d295c001ad73d663e652ef1de78e2452" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/506dae7b1cb980ead9267c1ad0678c3ca4000665" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="warning" %}

## Обратите внимание

Параметры для указания диапазона строк и столбцов `(start_row, end_row, start_col, end_col)` позволяют ассистенту читать данные таблицы, начиная с нужного места внутри таблицы.
{% endhint %}

{% hint style="info" %}
Поведение функции при частичном указании диапазона следующее:

* **Если указано только начало:** ассистент получит **все данные от этой начальной точки и далее**, без верхнего предела в указанном направлении.
* **Если указан только конец:** ассистент будет читать данные **с начала листа до указанной конечной точки**.

**Пример:**

Вызов `get_info_from_table('<<spreadsheet id>>', 2, None, 2, 5, 'a', 'd')` получает все данные, начиная со строки 2, столбца 2 (B), до строки 5 и между столбцами A и D.
{% endhint %}

{% hint style="warning" %}

## Обратите внимание

Для оптимизации производительности и надёжности мы рекомендуем **кэшировать все данные** из Google Sheet в переменные проекта при работе с ним.

**Ключевые преимущества:**

1. **Повышенная производительность:** значительно ускоряет время ответа чат-бота за счёт использования локальных переменных вместо обращения к внешней таблице при каждом запросе.
2. **Повышенная надёжность:** минимизирует ошибки, связанные с сетевой задержкой, квотами API или правами доступа к таблице.
3. **Согласованность данных:** хранение данных в настройках проекта обеспечивает **одновременный и согласованный доступ для всех пользователей** к одному и тому же набору данных, предотвращая расхождения при обновлениях.
   {% endhint %}

#### Пример использования

{% hint style="info" %}
Подробнее о **get\_info\_from\_table** функции можно прочитать в статье "[Google Sheets для AI Assistant](/doc/ru/chatbot/ai/google-sheets-dlya-ai-assistenta.md)."
{% endhint %}

## Как управлять онлайн-бронированиями

get\_info\_for\_booking(slot\_interval, company\_id) — функция предназначена для чтения данных о сервисах из настроенной системы онлайн-бронирования.

Она принимает необязательные параметры:

1. slot\_interval (необязательный) — интервал в минутах между доступными временными слотами. Ожидаемый формат: целое число, кратное 5. Значение по умолчанию: 60 (минут).
2. company\_id (необязательный) — идентификатор филиала. Ожидаемый формат: *целое число* или *массив целых чисел*. Если этот параметр указан, будут возвращены только данные для указанного филиала (филиалов).   \
   Пример: 50142, "50142" или "\[50142, 66352]"

{% hint style="warning" %}
Не рекомендуется устанавливать слишком маленькое значение (например, менее 30), так как ассистент сгенерирует слишком много временных слотов. &#x20;
{% endhint %}

### Пример использования

Сначала нужно подготовить блок, который обновляет информацию обо всех услугах после того, как настройки филиала будут заданы в разделе "Услуги".

Этот блок должен быть объявлен до начала работы ассистента, чтобы ИИ не генерировал случайные ответы.

<div data-with-frame="true"><figure><img src="/files/110742526b0210047c327db3d57ba8b88a49d3d7" alt=""><figcaption></figcaption></figure></div>

Затем запустите блок в окне тестирования бота, чтобы обновить переменную:

<div data-with-frame="true"><figure><img src="/files/fcd5548ad7b78cca61173675aae38ba4c41c110d" alt="" width="375"><figcaption></figcaption></figure></div>

После этого указанная переменная, содержащая данные о сервисах онлайн-бронирования, появится в разделе переменных проекта в "Настройках проекта."

<div data-with-frame="true"><figure><img src="/files/9e0b06efbf6237ac058faee50eb7196795281be0" alt="" width="563"><figcaption></figcaption></figure></div>

Эта переменная хранит значения услуг, которые ИИ-бот будет использовать в своей работе. Переменная service\_info будет доступна всем клиентам проекта.

Далее перейдём к настройке следующего блока.

<div data-with-frame="true"><figure><img src="/files/d12c0c6346249a3ded74382db22a6a08b545f280" alt=""><figcaption></figcaption></figure></div>

Этот блок выполняет следующие функции:

а) вызывается в настройках ассистента для создания записи с использованием переменных, связанных с услугами;

б) создаёт бронирование клиента;

в) обновляет переменные проекта после бронирования, удаляет временные слоты, которые больше недоступны в расписании.

Если бот настроен правильно, после получения всех данных от клиента ИИ отправит информацию в указанный блок. В этом блоке клиент будет записан на услугу с помощью функции create\_booking\_by\_name(!service\_name, !date, !date\_time, company\_id).

<div data-with-frame="true"><figure><img src="/files/3b5e60889356d2c7f2b5050d03423d79703440fe" alt=""><figcaption></figcaption></figure></div>

Значения, собранные ботом, передаются как параметры в create\_booking\_by\_name(!service\_name, !date, !date\_time, company\_id).

Функция create\_booking\_by\_name(service\_name, date, date\_time, company\_id) создаёт запись в системе, используя данные, предоставленные ИИ-ассистентом. Она принимает три обязательных параметра для создания бронирования:

<table><thead><tr><th width="297">Параметры</th><th>Описание</th></tr></thead><tbody><tr><td>! service_name</td><td>обязательный параметр, название услуги</td></tr><tr><td>! date</td><td>дата в формате dd.mm.yyyy</td></tr><tr><td>! date_time</td><td>время услуги в формате hh:mm</td></tr><tr><td>company_id </td><td>ID филиала, необязательный.<br>Если указан, бронирование будет создано для услуги с заданным названием, которая относится к этому конкретному филиалу.<br>Этот параметр может быть необходим в случаях, когда в нескольких филиалах есть услуги с одинаковым названием.</td></tr></tbody></table>

Поскольку информация о доступных слотах больше не будет актуальной, для обновления доступных дат и времени бронирования используется та же переменная со встроенной функцией.

<div data-with-frame="true"><figure><img src="/files/6f39101d01f1fdb8ceebc4732df46b931fa01265" alt=""><figcaption></figcaption></figure></div>

{% hint style="warning" %}

## Обратите внимание

Если в расписании, сотрудниках или услугах есть изменения, запустите блок, содержащий переменную проекта со встроенной функцией, в тестовом режиме (см. рис. Блок 1).
{% endhint %}

{% hint style="info" %}
[О том, как настроить ИИ-бота для онлайн-бронирования, было рассказано в статье с тем же названием.](/doc/ru/chatbot/ai/online-booking.md)
{% endhint %}

## Получение бронирования из таблицы

get\_records\_from\_table(table\_id, start\_row, count, start\_col, end\_col) — получение бронирования из таблицы

| Параметр   | Описание                                                                        | Примечание                                                                                              |
| ---------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| table\_id  | id таблицы                                                                      |                                                                                                         |
| start\_row | необязательный параметр, целое число. Указывает начало диапазона строк.         | Укажите номер строки, с которой следует читать значения таблицы включительно. Указывается без кавычек.  |
| count      | необязательный параметр, целое число. Указывает количество строк для получения. | По умолчанию — 1000, максимум — 5000. Указывается без кавычек.                                          |
| start\_col | необязательный параметр, строка. Указывает начало диапазона столбцов.           | Укажите букву столбца, с которого следует читать значения таблицы включительно. Указывается в кавычках. |
| end\_col   | необязательный параметр, строка. Указывает конец диапазона столбцов.            | Укажите букву столбца, до которой следует читать значения таблицы включительно. Указывается в кавычках. |

Если указано только начало диапазона строк или столбцов, все данные от этой точки и далее будут получены без верхнего предела диапазона. Аналогично, можно опустить начало и указать только конец диапазона.

### Пример (калькулятор)

Если вам нужно получить записи из таблицы, откройте раздел "Калькулятор" в настройках блока и введите функцию с нужными параметрами.

<div data-with-frame="true"><figure><img src="/files/c3a9762a2fd2280c8bba8e74dbf1d8d4f499b9c2" alt=""><figcaption></figcaption></figure></div>

Чтобы передать параметры как переменную проекта, добавьте перед именем переменной, содержащей функцию, префикс **project**.

<div data-with-frame="true"><figure><img src="/files/778cf02b8723bb74fe2823a6e40492a1fe6ed283" alt=""><figcaption></figcaption></figure></div>

Вот пример таблицы.

<div data-with-frame="true"><figure><img src="/files/88636b380819bfaaedb24b094b492bf2ba21527e" alt="" width="563"><figcaption></figcaption></figure></div>

Бот ответит следующим образом.

<div data-with-frame="true"><figure><img src="/files/8c7a20d2ae5b5dfdd1c91dc97e36a47daf21d5ee" alt="" width="375"><figcaption></figcaption></figure></div>


---

# 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/ru/chatbot/ai/functions.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.
