Документация › Инструменты бота › Функции
Функции (Инструменты бота): полный гайд
Обновлено 3 октября 2026 г.
Раздел «Функции» в проекте DOS AI. Путь:Проект → Функции(/projects/<id>/functions).Подзаголовок раздела: «Инструменты, которые ИИ сам решает когда использовать».

Этот документ объясняет фичу целиком, что это, как бот ими пользуется, как их создавать и настраивать, какие бывают, все встроенные функции с параметрами, кастомные вебхуки, лимиты, безопасность, тестирование и все крайние случаи. Написан для человека, который настраивает бота, а не только для программиста, но с технической глубиной там, где она нужна.
🆕 Обновление каталога (2026-06-13). Шаблоны теперь сгруппированы по задаче: Уведомления владельцу (Telegram, WhatsApp, почта), Запись на время (Calendar + движок окошек), Ресторан: iiko (гайд), Google Таблицы, Приём оплаты (Kaspi) (как работает), Поведение бота (теги, пауза дожимов, стоп-диалог), Фото и видео, Письмо клиенту (гайд). Что ещё изменилось:
- В модалке создания есть поиск по шаблонам: напишите «оплата», «запись», «уведомление».
- У каждого шаблона на карточке видно «цену входа» (сколько полей, сколько минут, что понадобится) и ссылку 📖 Инструкция.
- У шаблонных полей человеку показывается короткая подпись, а полная инструкция для ИИ спрятана в спойлер «Инструкция для ИИ».
- Проверить функцию можно прямо в мастере (кнопка «Проверить»), не закрывая его.
- Письмо клиенту через обычную почту теперь доступно как шаблон (см. «Письмо клиенту»); Gmail остался продвинутым вариантом.
- HTTP-запрос это не шаблон, а путь «Своя интеграция по API» (для разработчика). См. Кастомные вебхуки.
Оглавление
- Что такое функции и зачем они
- Как бот ими пользуется (механика)
- Страница «Функции»: весь интерфейс
- Как создать функцию
- Анатомия функции (из чего состоит)
- Параметры: подробно
- Какие функции есть
- Своя интеграция по API
- Поведение бота: теги, паузы, остановки
- Тестирование, версии, лог, импорт/экспорт
- Связь функций с промптом бота
- Лимиты и ограничения
- Безопасность и приватность
- Все статусы и состояния
- Лучшие практики и чек-лист
- FAQ и крайние случаи
- Глоссарий
1. Что такое функции и зачем они
Функция (инструмент) это действие, которое бот может выполнить во время диалога с клиентом. Сам по себе ИИ умеет только писать текст. Функции дают ему «руки»: записать клиента в календарь, добавить строку в Google-таблицу, выставить счёт на оплату, уведомить владельца в Telegram, поставить тег лиду и так далее.
Главная идея: вы не программируете «если клиент написал X, сделай Y». Вы просто описываете боту что умеет каждая функция и когда её вызывать, а ИИ сам решает в нужный момент диалога, какую функцию вызвать и с какими данными. Это принципиально отличается от жёстких сценариев-кнопок.
📌 Функция не создаёт лида. Карточку лида заводит статус лида, который бот ставит сам по ходу диалога: на уровне промпта, без функций. Функция «Уведомление владельцу» лишь сообщает вам о заявке; сам лид в CRM появляется из-за статуса. Для аналитики (диалоги/лиды/конверсия) функции тоже не нужны: она считается автоматически.
Пример. У стоматологии подключены две функции: «проверить свободное время» и «записать клиента». Клиент пишет «хочу на чистку завтра после обеда». Бот сам:
- вызывает
проверить свободное времяна завтра, - получает свободные слоты,
- предлагает клиенту «14:00 или 16:30?»,
- когда клиент выбрал, вызывает
записать клиента, - подтверждает: «Записала вас на завтра 14:00 ✅».
Никто не прописывал этот сценарий шагами. Бот связал функции сам, потому что у каждой было понятное описание.
Что важно понять с самого начала:
- Функция = пара «описание для ИИ (когда вызывать)» + «подключение (куда отправить данные)».
- Бот вызывает функцию, только если она включена и её описание подсказывает, что сейчас подходящий момент.
- Плохое описание = бот не вызывает функцию или вызывает не вовремя. Описание: самое важное поле.
2. Как бот ими пользуется (механика)
Простыми словами, что происходит под капотом на каждое сообщение клиента:
- Сборка инструментов. Платформа берёт все включённые функции проекта и превращает их в «меню инструментов» для модели (формат OpenAI
tools). Каждая функция = имя + описание + список параметров. - Решение модели. ИИ читает сообщение клиента, контекст диалога, системный промпт и это меню. Дальше он либо просто отвечает текстом, либо решает «здесь нужно вызвать функцию X с такими-то параметрами».
- Выполнение. Если ИИ вызвал функцию, платформа выполняет реальное действие (запрос в Google Calendar, HTTP-запрос на ваш сервер, запись в таблицу и т.д.) и получает результат.
- Возврат результата модели. Результат функции (успех/ошибка/данные) отдаётся обратно ИИ. Он смотрит на него и формулирует человеческий ответ клиенту на его основе.
- Цепочка. За один ход бот может вызвать несколько функций подряд (например, сначала проверить слот, потом записать). Это «round-trip»: вызов → результат → следующее решение.
Где это работает. Функции одинаково работают везде, где отвечает бот:
- тест-чат в кабинете (песочница: без реальных клиентов, но ответы бота списываются с баланса проекта, как обычные),
- боевые WhatsApp (по QR, привязанное устройство), Instagram и Telegram,
- ответ бота после оплаты счёта Kaspi.
То есть если функция работает в тест-чате, она так же сработает в бою. Дожимы функций не вызывают: это только текст. Чат на главной странице сайта это наш консультант, а не ваш бот.
Что НЕ является функцией:
- База знаний (RAG). Документы и факты, которые вы загрузили в «Базу знаний», бот использует автоматически: это не вызов функции, контекст подмешивается сам. В логах вызовов вы можете встретить служебный
kb_search, но настраивать его как функцию не нужно. - Системный промпт. Это «характер и правила» бота, отдельная настройка на вкладке «Промпт». Функции и промпт работают вместе (см. раздел 11).
3. Страница «Функции»: весь интерфейс
3.1 Шапка
- Заголовок: «Функции».
- Подзаголовок: «Инструменты, которые ИИ сам решает когда использовать».
- Кнопка «Импорт»: загрузить функции из JSON (см. 10.5).
- Кнопка «+ Новая функция»: создать новую (см. раздел 4). Становится неактивной при достижении лимита 40 функций.
- Счётчик функций
использовано / 40. Меняет цвет: серый → жёлтый (осталось ≤2) → красный (лимит).
3.2 Строка статистики
Показывает по проекту три цифры: Всего, Активных (включённых) и Подключено (с настроенным подключением). По ним сразу видно, работает ли у бота то, что вы для него собрали.
3.3 Полоса готовности (Readiness)
Сводка состояния одной строкой:
- «Все функции готовы» это всё в порядке.
- Жёлтые предупреждения с количеством: «N с ошибками», «N не упомянуты в промпте», «N не протестированы». Это подсказки, а не блокировки.
3.4 Фильтры и поиск
- Чипы-категории: «Все» + по типам (Calendar, Sheets, Telegram, Email, Webhook, CRM и т.д.), у каждого счётчик.
- Поиск по названию функции.
- Чекбокс «Только включённые»: спрятать выключенные.
3.5 Баннер рассинхрона с промптом
Жёлтый баннер появляется, если в системном промпте упоминается функция, которой не существует (например, вы написали в промпте «вызови book_table», а функции с таким именем нет). Баннер:
- показывает каждое недостающее имя,
- предлагает «возможно, имелась в виду
...», - даёт кнопку «Создать» недостающую функцию в один клик,
- ссылку «Открыть промпт бота».
3.6 Карточка функции
Каждая функция это карточка. У неё два режима отображения:
Бизнес-режим (по умолчанию):
- иконка + имя + бейдж типа («Оплата», «Google Calendar» и т.д.) + статус + переключатель вкл/выкл;
- описание (до 2 строк);
- для встроенных: инфо о ресурсе («ID таблицы…», «Календарь…», «⚠ не задано» если не настроено);
- параметры в виде цветных пилюль (имя + тип +
*если обязательный); - бейдж здоровья (если тестировалась): процент успеха, статус последнего вызова;
- алерт об ошибке (если последние вызовы падали) с куском текста ошибки;
- нижняя строка: статус • тип подключения • число параметров • таймаут • бейдж цепочки (если в цепочке);
- кнопки: «Проверить», «Редактировать», меню «⋯».
Меню «⋯»: Попробовать в чате • Превью запроса • Дублировать • История версий • Лог вызовов • Экспорт как JSON • Восстановить предыдущую версию • переключить Dev/Бизнес режим • Удалить.
Dev-режим (переключается в меню), техническая карта функции: HTTP-метод + URL, заголовки, JSON-схема параметров, готовая команда cURL с копированием, панель здоровья, таймлайн последних 5 вызовов, инлайн-форма редактирования.
3.7 Пустое состояние
Если функций нет:
- «Нет функций»,
- «Создайте первую функцию: ИИ будет сам решать когда её вызвать во время диалога»,
- три шага: «1. Создайте действие → 2. Укажите, куда отправить данные → 3. Бот сам вызовет, когда нужно»,
- кнопка «+ Новая функция».
3.8 Обновление в реальном времени
Список функций обновляется сам (realtime), без перезагрузки страницы. Если другая вкладка/сессия что-то изменила, вы увидите это сразу.
4. Как создать функцию
Нажмите «+ Новая функция». Открывается выбор пути:
Шаг 1. Выбор пути
- «Из шаблона», готовые обёртки: уведомления владельцу, запись на время, Google Таблицы, приём оплаты, поведение бота, фото и видео, письмо клиенту. Параметры уже настроены правильно, вам остаётся заполнить подключение. Рекомендуется в 90% случаев.
- «Кастомная»: свой запрос на любой сервер (вебхук). Для интеграции с вашей CRM, n8n, Zapier или собственным API.
Шаг 2. Выбор системы (для шаблона)
Показываются восемь групп: Уведомления владельцу (Telegram, WhatsApp, почта), Запись на время (Google Calendar и движок окошек), Ресторан: iiko, Google Таблицы, Приём оплаты (Kaspi), Поведение бота (теги, отложить дожимы, остановить диалог), Фото и видео, Письмо клиенту. У каждой: иконка, описание, число шаблонов. Плюс поиск по слову («оплата», «запись», «уведомление»).
Шаг 3. Выбор конкретного действия
Внутри группы, список шаблонов (например в Google Таблицах: «Узнать структуру таблицы», «Прочитать таблицу», «Найти в таблице», «Добавить строку», «Обновить запись в таблице», «Удалить строку»).
Шаг 4. Мастер настройки (ActionWizard)
Один экран с четырьмя секциями:
1) «Когда боту это вызывать»
- Название (
snake_case, только для кастомных; у шаблонов подставляется). Правило:^[a-z][a-z0-9_]*$, маленькие латинские буквы, цифры,_, начинается с буквы. Пример:create_appointment. - Описание для AI: критическое поле, минимум 5 символов. Пишите с точки зрения бота, когда и зачем вызывать. Кнопка «Улучшить с ИИ» дорабатывает формулировку автоматически.
2) «Подключение»
- Для встроенных: специфичная настройка (ID таблицы и лист; ID календаря и рабочие часы; токен и chat_id Telegram; и т.д.). Показывается email сервисного аккаунта, которому надо дать доступ к таблице/календарю.
- Для кастомных вебхуков, URL, HTTP-метод, таймаут и сворачиваемые блоки: Авторизация, Заголовки, Параметры URL, Тело запроса, Маппинг ответа, Повторы, Пагинация (см. Своя интеграция по API).
3) «Что бот спросит у клиента»: конструктор параметров (см. раздел 6). Показывается только для кастомных вебхуков, где вы сами проектируете, какие данные бот собирает. У встроенных функций набор параметров уже задан шаблоном и менять его нельзя, поэтому отдельной секции нет: встроенную функцию достаточно включить (и при наличии, потыкать настройки в «Подключении»). Справочный список «что бот соберёт» для встроенных доступен read-only в блоке «Дополнительно».
4) «Дополнительно» (сворачиваемое): триггеры, поведение при ошибке (fallback), цепочки. Для встроенных функций здесь же: read-only список параметров, заданных шаблоном.
Кнопка «Создать функцию» (или «Сохранить» при редактировании). При редактировании есть автосохранение со статусом «Сохранение… / Сохранено / Ошибка сохранения».
5. Анатомия функции (из чего состоит)
Каждая функция хранит набор полей. Самые важные для вас: первые три.
| Поле | Что это | Кто видит |
|---|---|---|
Имя (name) | Техническое имя, snake_case, уникально в проекте, 2-64 символа | ИИ (как имя инструмента) |
Описание (description) | Когда и зачем вызывать, 5-1000 символов | ИИ (решает по нему) |
Параметры (parameters) | Какие данные бот соберёт у клиента (до 20 шт.) | ИИ + клиент |
Тип действия (action_type) | Куда направить: webhook или один из builtin_* | система |
| Подключение | URL вебхука или builtin_config (ID таблицы, токен и т.д.) | система |
Включена (is_active) | Доступна ли боту прямо сейчас | вы (переключатель) |
| Таймаут | Сколько ждать ответа: от 1 до 60 секунд (1000-60000 мс) | система |
Триггер (trigger_type) | ai_decides (по умолчанию) / по событию / по заполнению переменной | вы |
Предохранитель (preconditions) | Условия, без которых функция не выполнится, даже если бот решит её вызвать | вы |
Поведение при ошибке (fallback_behavior) | silent / notify / retry / transfer + текст сообщения | вы |
Цепочка (chain_group, chain_order) | Группировка и порядок связанных функций | вы |
| Иконка, категория | Для отображения | вы |
Имя, правила и подводные камни:
- только
a-z,0-9,_, начинается с буквы; - уникально в рамках проекта (регистронезависимо);
- нельзя использовать зарезервированные слова языков программирования (
if,for,function,awaitи ещё ~200): система отклонит.
Тип действия (action_type) это все допустимые значения:webhook, builtin_calendar, builtin_sheets, builtin_booking, builtin_telegram, builtin_email, builtin_whatsapp, builtin_crm, builtin_edu_crm, builtin_gmail, builtin_lead_meta, builtin_owner_payment, builtin_send_media.
5.1 Предохранитель: как запретить боту то, о чём вы его просили не делать
Описание функции читает ИИ, и это просьба. Обычно её достаточно, но у необратимых действий (сообщить о приходе денег, выставить счёт, записать на приём) цена ошибки другая: бот может решить, что шаг пора закрыть, и вызвать функцию, хотя её собственные условия не выполнены. Типичный пример: в описании функции написано «вызывать только при реальном чеке», клиент пишет «оплатил, чек позже», и бот отвечает «оплата учтена», хотя чека в диалоге нет.
Предохранитель отказывает. Вы отмечаете факт, который должен быть в диалоге, и платформа проверяет его сама, до выполнения функции. Не сходится, функция не выполняется вовсе, а боту возвращается объяснение, чего не хватает, чтобы он попросил это у клиента.
Открывается на шаге «Когда выполнять» в конструкторе функции, там же, где триггер и поведение при ошибке.
| Условие | Что проверяет | Когда ставить |
|---|---|---|
| Клиент прислал файл | Фото или документ среди последних сообщений клиента (число сообщений задаёте вы) | Подтверждение оплаты по чеку, приём документов |
| Заполнено поле лида | Например phone: без телефона счёт отправлять некуда | Выставление счёта, запись, доставка |
| Сначала отработала другая функция | Названная функция уже успешно вызывалась в этом же диалоге | Подтверждать оплату только после того, как счёт реально выставлен |
| Клиент написал хотя бы N сообщений | Длина разговора | Защита от срабатывания на первом же «здравствуйте» |
| Оплата реально прошла | По этому диалогу есть счёт со статусом «оплачен», подтверждённый банком, а не словами клиента | Запись на время, отгрузка, выдача доступа после предоплаты |
Условий можно поставить несколько, тогда должны выполниться все.
«Счёт выставлен» и «деньги пришли» это разные условия, не путайте их. Первое даёт «Сначала отработала другая функция», и оно проходит уже в момент, когда бот отправил ссылку на оплату. Второе даёт «Оплата реально прошла», и оно ждёт ответа банка. Для записи на время берите второе: между выставленным и оплаченным счётом клиент успевает сказать «я оплатил», и на этих словах бот займёт время, за которое никто не заплатил.
Что вы увидите. На карточке функции появляется отметка «Предохранитель». Каждый отказ попадает в раздел Логи проекта с причиной, поэтому «функция молчит» никогда не остаётся без объяснения.
Чего предохранитель не делает. Он не проверяет содержимое: платформа видит, что клиент прислал документ, но не читает сумму в чеке, это по-прежнему работа бота и ваша. И если база на секунду недоступна, функция выполнится: блокировать живой разговор из-за сбоя связи хуже, чем пропустить одну проверку.
6. Параметры: подробно
Параметр это данные, которые бот соберёт у клиента в разговоре и передаст в функцию. Например: имя, телефон, дата, сумма. В конструкторе каждый параметр: карточка с номером.
6.1 Поля параметра
- Тип:
String(Aa) /Number(#) /Boolean(да-нет) /Array(список[]) /Object(объект{}). Для массива дополнительно указывается тип элементов. - Обязательность: переключатель *« ОБЯЗ»** / «НЕОБЯЗ». Обязательный параметр бот будет добиваться у клиента, прежде чем вызвать функцию.
- Имя (
snake_case). - Описание, что бот спросит у клиента. Пишите как живой вопрос: «На какую дату вы хотите записаться?». От этого зависит, поймёт ли ИИ, что туда подставить.
- Enum (для строк), фиксированный список допустимых значений через запятую:
low, normal, high. ИИ выберет только из них. - Перемещение (↑ ↓) и удаление (✕).
6.2 Подсказки для ИИ (делают функцию точнее)
У параметра можно задать (в шаблонах часто уже заданы):
- examples: примеры значений, помогают ИИ понять формат;
- minimum / maximum: границы для чисел;
- format:
date,date-time,email; - pattern: регулярное выражение (например дата
^\d{4}-\d{2}-\d{2}$).
6.3 Заблокированные параметры (locked): «ШАБЛОН»
У шаблонных функций часть параметров помечена бейджем «ШАБЛОН» и заблокирована: их нельзя переименовать, удалить или сменить тип. Это сделано специально, они завязаны на встроенный обработчик (например start_time у записи в календарь). Описание у некоторых можно дополнить, структуру, нет. Не заблокированные параметры шаблона (например необязательное customer_name) редактировать можно.
6.4 Пустое состояние
Если параметров нет: «Параметры, данные, которые бот соберёт у клиента. Например: имя, телефон, дата, услуга.» Кнопка «+ Параметр».
7. Какие функции есть
Готовые функции добавляются из каталога: Функции → Новая функция → Из готового шаблона. Полный список с техническими именами в справочнике функций, а как настроить каждую группу, в своей статье:
| Категория каталога | Что умеет бот | Статья |
|---|---|---|
| Уведомления владельцу | сообщить вам в Telegram, WhatsApp или на почту | Уведомления владельцу |
| Запись на время | свободное время и запись в Google Календарь, движок окошек для нескольких специалистов | Запись на время · Google Календарь |
| Ресторан: iiko | свободные комнаты и столы, бронь на кассу, стоп-лист | iiko |
| Google Таблицы | читать, искать, добавлять и обновлять строки | Google Таблицы |
| Приём оплаты (Kaspi) | выставить клиенту счёт прямо в чате | Бот выставляет счёт |
| Поведение бота | теги, пауза и отключение дожимов, остановка диалога | раздел 9 ниже · Теги |
| Фото и видео | отправить материал из медиатеки | Медиа-библиотека |
| Письмо клиенту | письмо на адрес, который назвал клиент | Письмо клиенту |
Две вещи общие для всех готовых функций:
- Поля настройки (ссылка на таблицу, ID календаря, токен) заполняете вы один раз, модель их не видит и не меняет. Параметры собирает бот у клиента в каждом вызове.
- Функции CRM и АльфаCRM в каталоге не нужны: подключили CRM на странице «Интеграции», и бот получает её инструменты сам (CRM).
8. Своя интеграция по API
Нужной готовой функции нет, а у вашего сервиса есть API (своя CRM, склад, сайт): Функции → Новая функция → Своя интеграция по API. Адрес, метод, тело, авторизация, маппинг ответа, повторы и защита адресов разобраны в отдельной статье: Своя интеграция по API. Пример на настоящем сервисе: МойСклад.
У старых функций, созданных до появления полного редактора, встречается «простой режим» (только POST и все параметры одним JSON). Новые функции создаются сразу с полным набором вкладок.
9. Поведение бота: теги, паузы, остановки
Четыре функции управляют не внешним миром, а самим разговором. Три про паузы и остановки стоят у каждого проекта с рождения и включены, у проектов с 14 сентября 2026 к ним добавлена «Помечать лида тегами». Управляются здесь же, в разделе «Функции»: выключить тумблером, поправить описание «когда вызывать» под свою нишу, удалить.
9.1 Помечать лида тегами (set_lead_tags)
- Бот добавляет теги к уже стоящим, не затирая операторские. Снять или заменить тег он может, только если включён тумблер «Разрешить боту снимать/менять теги».
- Выбирает из словаря проекта (страница «Теги», с описаниями) или создаёт новый, если включён тумблер «Разрешить боту создавать новые теги».
- Максимум 20 тегов на лида. Подробно: Теги и сегментация.
9.2 Отложить дожимы (pause_followups)
Когда: клиент написал «напишу в четверг», «наберу после 15-го», «свяжусь сам», «подумаю», «позже».
- ставится пауза до даты (до 09:00 по поясу проекта, если указана только дата; либо точное время), а без даты на сутки;
- счётчики дожимов сбрасываются, чтобы по истечении паузы пришло одно мягкое напоминание;
- бот в чате НЕ выключается: если клиент напишет раньше, ответит как обычно;
- пауза соблюдается, даже если раздел «Дожимы» выключен: в назначенный срок бот вернётся одним сообщением о договорённости.
9.3 Остановить диалог (stop_dialog)
Когда: клиент явно просит не писать или окончательно отказался после отработки возражений. На первое «дорого / подумаю» не вызывается: это возражение.
- бот выключается на этом диалоге до ручного включения оператором;
- причина «клиент попросил», и автовозобновление этот диалог не оживит;
- все дожимы по диалогу отменяются автоматически.
Зачем так строго: защита от назойливости и от блокировки WhatsApp за спам.
9.4 Отключить дожимы (stop_followups)
Когда: клиент просит не напоминать («не надо дожимать», «сам напишу, когда решу», «еске салмаңыз»), но вопросы задавать продолжает.
- автонапоминания по этому клиенту выключаются насовсем;
- бот остаётся включённым и отвечает как раньше;
- вернуть дожимы можно вручную в таблице дожимов.
Три способа одним взглядом: пауза = помолчи с напоминаниями до срока, отключить дожимы = напоминаний больше нет, бот отвечает, стоп-диалог = замолчи совсем.
9.5 Как вообще останавливается диалог
Бот никогда не решает остановиться сам: он дообщается с клиентом, пока его не остановят явно. Способов четыре:
- функция «Остановить диалог» (бот вызывает её, когда клиент просит не писать);
- галочка «Завершать диалог после выполнения этой функции» у любой функции (внизу настроек): функция успешно отработала, и бот выключается на этом чате и отменяет дожимы (удобно после записи или передачи заявки менеджеру);
- состоявшийся звонок, если включена настройка «Выключать ИИ после состоявшегося звонка» (включена по умолчанию, справочник настроек);
- вручную: тумблер ИИ в шапке диалога.
Рядом с галочкой «Завершать диалог» есть вторая, «Останавливать дожимы после этой функции»: она решает только судьбу напоминаний и не трогает бота. Включайте, когда после функции напоминать не о чем (заявку передали человеку, клиента записали, оплату приняли). Оставляйте выключенной для уведомлений, которые разговор не заканчивают: эскалация вопроса, пометка отказа, сигнал о жалобе.
Третья галочка, «Это заявка: создать лида и сделку в CRM», ставится у функции, которая передаёт заявку человеку (менеджеру, администратору, юристу). Сработала такая функция, значит у диалога появляется карточка лида, а если подключена CRM, то и сделка в ней. Это происходит, даже если бот оценил клиента осторожнее, чем «готов»: без галочки бывало, что заявка уже лежит в Telegram-группе менеджеров, а в CRM клиента нет. Эскалациям вопроса, пометкам отказа и уведомлениям о новом диалоге галочку не ставьте: это не заявки.
Все три галочки действуют на вызовы, которые делает сам бот по ходу разговора. Если у функции выбран автозапуск (по событию или по смене статуса лида), этот путь галочки не учитывает; в настройках такой функции стоит та же пометка.
«Передать оператору» как отдельной встроенной функции нет: это уведомление владельцу (notify_telegramи соседи) плюс галочка «Завершать диалог после выполнения», если бот после передачи должен замолчать, и галочка «Это заявка», чтобы у клиента появились карточка лида и сделка в CRM.
10. Тестирование, версии, лог, импорт/экспорт
10.1 Тест функции («Проверить»)
Кнопка «Проверить» на карточке открывает тест-модалку «Тест: <имя>»:
- кнопка «Заполнить пример» подставляет примеры;
- по каждому параметру, поле ввода (для enum, выпадающий список), с подсказкой формата;
- «Отправить тест» реально выполняет вызов (для вебхука: шлёт запрос на ваш URL);
- результат: код статуса, отформатированный JSON-ответ, длительность (мс), ошибка если была.
Используйте перед запуском, чтобы убедиться, что подключение настроено верно.
10.2 Попробовать в чате
Пункт меню «Попробовать в чате» открывает тест-чат, где можно проверить, вызовет ли бот функцию сам по описанию (а не только технически работает ли вебхук). Это проверка качества описания.
10.3 История версий
Каждое изменение функции сохраняет снимок (хранятся последние ~50 версий). Меню → «История версий» → список с датами → «Восстановить» любую (с подтверждением). Спасает, если случайно сломали настройку.
10.4 Лог вызовов (Executions)
Меню → «Лог вызовов», все реальные вызовы функции ботом: статус (успех/ошибка), время, длительность, разворачиваемые детали запроса/ответа. Первое место, куда смотреть, если «функция не сработала».
10.5 Импорт / экспорт
- Экспорт как JSON (меню карточки): выгрузить одну функцию.
- Импорт (кнопка в шапке): вставить JSON одной функции или массива, либо перетащить файл (до 1 МБ). Удобно переносить функции между проектами.
10.6 Дублировать и превью
- Дублировать: копия функции (быстро сделать похожую).
- Превью запроса: посмотреть, как будет выглядеть запрос, не отправляя его.
10.7 «Улучшить с ИИ»
Кнопка у поля описания: ИИ дорабатывает формулировку описания, чтобы бот точнее понимал, когда вызывать функцию.
11. Связь функций с промптом бота
Функции и системный промпт (вкладка Промпт) работают вместе:
- Описание функции говорит ИИ, что она делает и когда её звать. Это первично.
- Промпт задаёт общий характер, правила и может явно направлять: «когда клиент готов записаться, вызови
book_appointment». - Если в промпте упомянута функция, которой нет на странице «Функции» появится баннер рассинхрона (см. 3.5) с кнопкой создать её.
- Полоса готовности предупреждает: «N не упомянуты в промпте», это намёк, что функция есть, но бот может про неё «забыть», если в промпте нет подсказки. Для важных функций стоит и хорошее описание, и упоминание в промпте.
Правило большого пальца: описание для понимания «что это», промпт для управления «в какой момент сценария это использовать».
12. Лимиты и ограничения
| Ограничение | Значение |
|---|---|
| Функций на проект | 40 |
| Имя функции | 2-64 символа, ^[a-z][a-z0-9_]*$, без зарезервированных слов |
| Описание | 5-1000 символов |
| Параметров на функцию | 20 |
| Значений enum на параметр | 50 |
| Описание параметра | до 500 символов |
| Таймаут | 1000-60000 мс (1-60 секунд) |
| Заголовков | по стандарту HTTP; имя 1-200 символов, без переносов строк |
| Полей маппинга ответа | 50, путь 1-200 символов, обрезка 500-20000 символов |
| Параметров URL (query) | 30 |
| Шаблон тела | 50 КБ |
| Повторов (retry) | 1-5 |
| Страниц пагинации | 1-10 |
| Версий на функцию | ~50 |
| Медиа на диалог | 3 / 60 сек |
| Тегов на лида | 20 |
| Лог вызовов (хранение) | ~90 дней |
При попытке создать 41-ю функцию кнопка заблокируется, а импорт вернёт ошибку «лимит достигнут».
13. Безопасность и приватность
- Секреты не показываются. Токены, пароли, ключи (
bot_token,api_key,access_token,password,secretи т.п.) наружу не отдаются никогда: в ответах API вместо них стоит***hidden***, а ключ авторизации (Bearer, Basic, API Key, свой заголовок) приезжает пустым, рядом с пометкой «сохранён» и последними четырьмя знаками для узнавания. - Пустое поле ключа означает «не менять». Открыли функцию на правку и не трогали поле с ключом, значит сохранится прежний ключ. Чтобы заменить, впишите новый; чтобы убрать, выберите тип авторизации «Без авторизации». Прислать обратно скрытое значение (
***hidden***или точки) тоже безопасно: платформа поймёт, что поле не меняли, и ключ останется прежним. Если прежнего ключа нет, а поле пустое, сохранение честно откажет, а не запишет пустоту. - Шифрование. Конфиги авторизации и встроенных функций хранятся в зашифрованном виде (AES-GCM).
- Защита от SSRF. URL вебхуков нельзя указывать на внутренние адреса (
127.0.0.1,10.x,192.168.x, IPv6-приватные): защита от обращения бота к внутренней инфраструктуре. Проверка идёт с учётом DNS-резолва. - Заголовки чистятся от переносов строк (защита от инъекций).
- Права доступа. Создавать/менять/удалять функции может участник проекта с ролью editor и выше; просматривать, viewer. URL и секреты не отдаются участникам без прав владельца.
- Аудит. Каждое создание/изменение пишется в журнал аудита.
14. Все статусы и состояния
Статус функции на карточке:
| Статус | Цвет | Что значит | Что делать |
|---|---|---|---|
| Работает | зелёный | последние вызовы успешны | ничего |
| Не проверена | жёлтый | ещё не тестировалась/не вызывалась | нажмите «Проверить» |
| Ошибка | красный | последние вызовы падали | откройте «Лог вызовов», смотрите текст ошибки |
| Выключена | серый | переключатель выключен | включите, если нужна боту |
Предупреждения полосы готовности:
- «N с ошибками»: функции с красным статусом.
- «N не упомянуты в промпте»: есть функция, но в промпте нет наводки (бот может её не звать).
- «N не протестированы»: нажмите «Проверить».
UX-состояния страницы: загрузка (скелетоны), пусто (см. 3.7), ошибка загрузки (инлайн-сообщение, не белый экран).
15. Лучшие практики и чек-лист
Описание функции:
- Пишите от лица бота: «Записывает клиента на приём. Вызывай, когда клиент подтвердил время.»
- Укажите когда вызывать и когда НЕ вызывать.
- Не пишите формально «Функция записи»: ИИ не поймёт момент.
Параметры:
- Описание параметра = живой вопрос клиенту.
- Помечайте обязательным только то, без чего действие невозможно.
- Используйте
enumдля фиксированных вариантов иexamplesдля форматов.
Подключение:
- Для Sheets/Calendar: выдайте доступ сервисному аккаунту (его email показан при настройке).
- Для вебхука: верните боту короткий понятный ответ, а не сырой JSON (настройте маппинг).
- Поставьте разумный таймаут (медленный сервер = клиент ждёт спиннер).
Перед запуском:
- ☐ Нажал «Проверить», подключение работает.
- ☐ «Попробовал в чате»: бот вызывает функцию сам по описанию.
- ☐ Функция включена.
- ☐ Если важная, упомянул её в промпте.
- ☐ Статус «Работает», полоса готовности зелёная.
Сценарии управления:
- Возражение «дорого/подумаю» → отрабатывай или
pause_followups, неstop_dialog. - «Не пишите мне» →
stop_dialog. - Готов платить →
create_payment_invoice(не выдумывай сумму: уточни).
16. FAQ и крайние случаи
Бот не вызывает функцию, хотя она включена.
Причина почти всегда в описании. Откройте «Попробуй в чате» и проверьте, понимает ли ИИ момент. Улучшите описание (кнопка «Улучшить с ИИ»), при необходимости добавьте наводку в промпт.
Функция вызывается не вовремя / слишком часто.
Описание слишком широкое. Добавьте «вызывай ТОЛЬКО когда…» и «НЕ вызывай если…».
В тест-чате работает, в бою, нет.
Проверьте, что функция включена в боевом проекте, подключение настроено (не ⚠ не задано), и канал/интеграция активны. Логика ИИ одинаковая во всех 5 точках входа: расхождение обычно в настройке подключения.
Достиг лимита 40 функций.
Удалите неиспользуемые или объедините близкие. Часто несколько узких вебхуков можно заменить одним с параметром «действие».
Два клиента бронируют один слот.
Для Sheets используйте update_row с expected_current_value/expected_other_cell (запись только если слот свободен). Для Calendar: check_available_slots непосредственно перед book_appointment.
Случайно сломал настройку функции.
Меню → «История версий» → «Восстановить» нужную.
Нужно перенести функции в другой проект.
«Экспорт как JSON» в одном → «Импорт» в другом.
Где функции send_lead / escalate_to_owner / kb_search?send_lead / escalate_to_owner это кастомные функции конкретных проектов (вебхуки или Telegram-уведомления), а не встроенные шаблоны. kb_search: служебный поиск по базе знаний, он работает автоматически, настраивать его как функцию не нужно.
17. Глоссарий
- Функция / Инструмент / Tool: действие, которое бот может выполнить (синонимы).
- action_type, тип действия:
webhook(свой HTTP) илиbuiltin_*(встроенный обработчик). - builtin_config: настройки встроенной функции (ID таблицы, токен и т.д.), которые ИИ не видит.
- Параметр: данные, которые бот собирает у клиента и передаёт в функцию.
- locked / ШАБЛОН: заблокированный параметр шаблона, его нельзя ломать.
- enum: фиксированный список допустимых значений параметра.
- Цепочка (chain): группа связанных функций с порядком вызова.
- fallback: поведение при ошибке функции (silent / notify / retry / transfer).
- Дожим (follow-up): автоматическое напоминание клиенту; управляется
pause_followups/stop_dialog. - Сервисный аккаунт: технический Google-аккаунт DOS AI, которому вы даёте доступ к таблице/календарю.
- RAG / База знаний: автоматический поиск по вашим документам, НЕ функция.
- Где работает бот: тест-чат, WhatsApp, Instagram, Telegram и ответ после оплаты; функции работают одинаково везде. Дожимы функций не вызывают.
Простыми словами (вся статья в двух минутах)
Обычный бот умеет только разговаривать. Функции это «руки» бота: они позволяют ему делать дела, а не только отвечать словами, записать клиента в календарь, добавить строку в Google-таблицу, выставить счёт на оплату в Kaspi, скинуть тебе заявку в Telegram, отправить клиенту видео, поставить пометку на клиента. Каждая функция это «одно умение».
Самое важное и непривычное: ты не программируешь сценарий «если клиент сказал X, сделай Y». Ты просто по-человечески описываешь каждое умение: «эта функция записывает клиента, вызывай её, когда он подтвердил время», а бот сам решает, когда им воспользоваться, прямо посреди разговора. Поэтому в функциях главное поле, описание. Плохо описал, бот не поймёт, когда применять; хорошо описал, он сам всё свяжет (сначала проверит свободное время, потом запишет, потом подтвердит).
Делать функции можно двумя путями. Из шаблона это готовые умения (Google Таблицы, Календарь, Telegram, приём оплаты, отправка фото): тебе остаётся только подключить свою таблицу или номер, всё остальное уже настроено. Кастомная, если у тебя своя система (CRM, сайт), бот может «постучаться» на твой адрес и передать туда данные.
Есть и особые функции, которые управляют самим ботом: поставить напоминания на паузу («клиент сказал, напишу в четверг»), совсем остановить диалог («клиент попросил не писать»), пометить клиента тегом, выставить счёт. Их тоже бот применяет сам по смыслу разговора.
Что важно помнить на каждый день:
- Функция работает, только если она включена и у неё настроено подключение (для таблицы, дать доступ, для оплаты: подключить Kaspi).
- Всё новое проверяй в тест-чате: там видно, вызвал ли бот функцию или только написал «записал» словами.
- Функций можно сделать до 40 на проект.
- Секреты (токены, пароли) платформа прячет и шифрует, участники их не видят.
- Не получается? Загляни в «Лог вызовов» функции: там видно, что именно пошло не так.
Если в двух словах: функции превращают болтливого бота в работающего сотрудника, который не только отвечает, но и записывает, считает и принимает оплату, а ты лишь объясняешь ему словами, что и когда делать.
Документ описывает раздел «Функции» DOS AI по состоянию на август 2026. Каталог встроенных функций, источник истины: packages/@dos/admin/src/function-templates.ts. Логика выполнения: packages/@dos/ai-pipeline/src/pipeline/tool-executor.ts.