DOS_AI/ Документация
ОтзывыДля когоАгентствамВозможностиЦенаFAQОбучениеДокиВойтиСтарт
← Руководство
Старт
  • Что такое DOS AI
  • Как бот думает
  • Быстрый старт: первый бот за 30 минут
  • Карта кабинета (навигация)
  • Глоссарий
Проект и бот
  • Создание проекта
  • Системный промпт (характер бота)
  • JSON-ответ бота (статусы, стадии, флаги)
  • Выбор AI-модели
  • Тестовый чат
  • Продвинутые настройки бота
  • Загрузить знания о бизнесе в бота (что куда)
Каналы
  • Обзор каналов
  • Подключить WhatsApp (по QR)
  • Подключить Telegram-бота
  • Гигиена и антибан (WhatsApp)
Инструменты бота
  • Функции (инструменты бота)
  • База знаний (RAG)
  • Медиа-библиотека
  • Дожимы (follow-up)
  • Теги и сегментация
  • Уведомления владельцу (Telegram и почта)
  • Запись на время (Calendar и движок окошек)
  • Бот выставляет счёт (Kaspi)
  • Письмо клиенту
  • Рассылки по базе контактов
  • Исходящие диалоги (бот пишет первым)
Работа с клиентами
  • Диалоги, лента, перехват, «AI на паузе»
  • Лиды и их статусы
  • Стадии диалога (воронка)
  • Аналитика
  • Логи событий
  • Авто-отчёты владельцу (Telegram и почта)
Интеграции
  • Обзор интеграций + сервисный аккаунт Google
  • Google Sheets
  • Google Calendar
  • Gmail
  • CRM, Bitrix24 / amoCRM / AlphaCRM
  • Вебхуки и безопасность (SSRF)
  • МойСклад: наличие и цены в ответах бота
Деньги
  • Биллинг проекта: токены, подписка, пополнение
  • Сколько стоит сообщение
  • Приём оплат от клиентов (Kaspi)
  • Промокоды и партнёрская программа
Команда и аккаунт
  • Роли и права (viewer / tester / editor / admin / owner)
  • Участники и приглашения
  • Профиль, пароль, безопасность
  • Уведомления и личные настройки
  • Удаление, передача, дублирование проекта
Для разработчиков
  • Публичный API и ключи dos_sk_live_…
  • Кастомные вебхуки (продвинутый режим)
  • Язык выражений (expressions)
  • Формат данных и интеграция фронта
  • Подключить ИИ-агента: Claude Code, Codex, Cursor (MCP)
Решение проблем
  • Бот не отвечает, диагностика
  • Функция не вызывается / падает
  • Канал отвалился / WhatsApp забанили
  • Платёж не прошёл
  • Частые вопросы (FAQ)
  • Лиды из рекламы приходят с задержкой
Справочники
  • Каталог встроенных функций
  • Справочник настроек (agent_config)
  • Коды ошибок и состояния
  • Стадии, статусы лида, типы клиента
  • Лимиты и квоты
  • Переменные и хелперы выражений
  • Типы уведомлений

Документация › Решение проблем › Функция не вызывается / падает

Функция не вызывается / падает

Две разные проблемы: бот не вызвал функцию (хотя должен был), или вызвал, но она упала. Чинятся они по-разному. Эта статья, как отличить и где смотреть.

⏱ 10 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Не вызвал? Проверь: функция включена? описание понятное? не требует ли она от модели посчитать что-то (координаты/индексы: модель этого не умеет)?
  • Упала? Бот видит ошибку и обычно переспрашивает или сообщает клиенту, не молчит. Смотри причину в Диалогах или тест-чате.
  • Где смотреть: карточки вызовов функций видны в Диалогах и в тест-чате («Что понял бот»): там видно имя функции, аргументы, результат/ошибку.
  • Частое: функция требует подключённой интеграции (Google Sheets/Calendar), а её нет.

Сначала пойми: не вызвал или упал?

СимптомЭтоКуда смотреть
Бот «не сделал» действие, в логах вызова функции нетне вызвалраздел «Не вызывается»
В логах вызов есть, но с ошибкой; бот переспросил/извинилсяупалраздел «Падает»

Открой тест-чат → блок «Что понял бот»: там видно, какие функции бот дёрнул, с какими параметрами и что вернулось. Если функции в списке нет, он её не вызвал.


Бот не вызывает функцию

1. Функция выключена

У каждой функции есть переключатель (is_active). Если она выключена, платформа не передаёт её модели, бот физически не может её вызвать. Проверь в разделе «Функции», что нужная функция включена.

2. Модель не поняла, когда её звать

Бот решает вызвать функцию по её описанию. Если описание размытое («работа с таблицей»), модель не сообразит, в какой момент её применить. Чините описанием, а не уговорами в промпте: опиши понятно, что функция делает и когда её звать. → Функции: как писать описание

3. Не хватает обязательного параметра

Если функция требует параметр, которого в разговоре ещё нет (например, телефон для заявки), модель либо переспросит клиента, либо не вызовет. Это нормально, добавь в промпт, что нужно сперва собрать.

4. Функция требует «посчитать», а модель не умеет считать

🚫 Ключевое правило. Языковая модель плохо считает: координаты ячеек, индексы строк, «какая буква колонки», арифметику. Если функция ждёт от неё вычисленный адрес (G7, номер строки), она будет ошибаться или не вызывать.

✅ Решение архитектурное, не промптовое. Функция должна принимать человеческие метки («запиши к инструктору Вячеслав на 14:00»), а адрес/ячейку сервер вычисляет сам. У платформы для этого есть label-based функции (например, бронь по target_cell с описанием строки/колонки, а не по координате). Если своя функция упирается в «модель не туда пишет», переведи её на метки. Никакие уточнения в промпте «считай внимательно» это не лечат.

→ Подробнее об этом классе проблем: Функции


Функция падает (возвращает ошибку)

Хорошая новость: ошибки не теряются. Когда функция падает, платформа возвращает модели структурированную ошибку ({ error, error_code }), и бот её видит, обычно переспрашивает клиента или вежливо сообщает, что не получилось. Молча проглотить ошибку он не должен.

Типичные причины

ЧтоПоведение ботаКак чинить
Нет обязательного параметра{ error, missing_params } → бот переспрашиваетнорма; убедись, что промпт собирает данные
Неверное значение (вне допустимого набора/диапазона){ error, invalid_params } → бот пробует сновапроверь enum/границы в настройке функции
Интеграция не подключена (Google Sheets/Calendar)бот говорит «владелец не подключил…»подключи интеграцию и укажи ID таблицы/календаря
Внешний сервис не ответил (таймаут/5xx)бот предлагает попробовать позжевременное; для своих вебхуков настрой retry
Приём оплаты не настроен (sub_merchant_not_connected)бот: «приём оплаты сейчас недоступен»подключи приём оплат

Таймауты и повторы

  • У функции есть таймаут, по умолчанию 10 секунд, настраиваемый в пределах 1-60 сек.
  • Для своих вебхук-функций («Своя интеграция по API») можно настроить повторы: при кодах 429/502/503/504 платформа повторяет с нарастающей задержкой, уважая Retry-After.
  • Внешние интеграции (Google/оплата) возвращают понятный клиенту русский текст ошибки, а не технический трейс.

Защита от зацикливания

Бот может вызвать несколько функций за один ход, но не бесконечно: лимит, 15 раундов вызовов на один ответ. Если упёрся в потолок, платформа аккуратно завершает ход осмысленной репликой, а не ошибкой (и пишет событие tool_rounds_exceeded). Если видишь такое часто, функция, вероятно, возвращает данные, которые провоцируют новый вызов по кругу; упрости сценарий.


Где увидеть вызовы функций

Все вызовы пишутся в журнал событий (events_log, тип function_call) и показываются:

  • в Диалогах: карточками прямо в ленте переписки (имя функции, успех/ошибка);
  • в тест-чате: в блоке «Что понял бот».
📌 Важно: вызовы функций живых диалогов лежат в журнале событий, а не среди сообщений. Поэтому в «сырой» переписке их не видно: смотри именно карточки функций в Диалогах. Секреты (токены/ключи в параметрах) в журнале маскируются.

Под капотом

  • Загрузка функций: loadProjectFunctions() фильтрует .eq("is_active", true), выключенные не попадают в схему для модели (tool-executor.ts).
  • Валидация аргументов: перед выполнением аргументы приводятся к типам (coerceArgs) и проверяются по ограничениям (validateArgConstraints: enum/min/max/pattern). Невалидные → ошибка модели на самокоррекцию.
  • Детект ошибки результата: toolResultHasError() считает результат ошибкой, если есть error, success:false или непустой errors.
  • Логирование: logFunctionCall() пишет event_type:"function_call" с function_name / duration_ms / success / error / request / response; чувствительные ключи редактируются (REDACT_KEYS), payload обрезается до 2000 символов.
  • Игнор устаревших полей: если модель вернёт selected_service / services (удалённая фича «Услуги»), схема ответа их молча отбрасывает (ai-response-schema.ts): это не ошибка.

Простыми словами

С функциями бывает две разные беды, и их легко перепутать.

Первая: бот вообще не вызвал функцию. Чаще всего она просто выключена (проверь тумблер в «Функциях»), либо у неё непонятное описание, и бот не сообразил, когда её применять. И есть особый случай, если функция требует от бота что-то посчитать, номер ячейки, координату, индекс, он будет ошибаться, потому что языковая модель считать не умеет. Лечится это не уговорами в промпте, а тем, чтобы функция принимала понятные слова («запиши к Вячеславу на 14:00»), а все вычисления делал сервер.

Вторая беда: функция вызвалась, но упала. Тут хорошая новость: бот ошибку видит и обычно либо переспрашивает клиента, либо честно говорит «не получилось, попробуем позже», он не зависает молча. Самая частая причина, функция лезет в Google-таблицу или календарь, которые не подключены. Подключи интеграцию, и заработает.

А чтобы понять, что вообще произошло, открой тест-чат или Диалоги: там каждый вызов функции показан карточкой, видно, что бот дёрнул, с какими данными и что вернулось. Это лучшее место для диагностики.


Дальше: → Канал отвалился / WhatsApp забанили
Связано: Функции (полный гайд) · Интеграции · Тест-чат · Бот не отвечает
Не получилось? → напиши в саппорт с ID проекта и именем функции