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

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

Обновлено 14 октября 2026 г.

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

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

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

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

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

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


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

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

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

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

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

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

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

3а. Сработал предохранитель

У функции может стоять предохранитель: условие, без которого платформа не даст ей выполниться, даже если бот решил её вызвать (нет чека, нет телефона, оплата ещё не прошла, другая функция ещё не отработала). Такой отказ записывается в логи с причиной, а боту возвращается объяснение, чего не хватает, и он просит это у клиента. Если бот «молчит» ровно на этом действии, проверьте условия предохранителя: не слишком ли они строгие.

3б. Бот сказал, что сделал, но функцию не вызвал

Модель иногда пишет «счёт отправил» или «передала менеджеру» без вызова. С 14 октября 2026 платформа сверяет такие заявления (на русском, казахском и английском) с журналом вызовов хода и даёт боту один круг на исправление: вызвать функцию или ответить честно. Не исправился, в рабочем чате клиенту уходит нейтральный ответ, а диалог получает пометку «ответьте руками» и запись action_claim_unbacked в логах. Если такие записи повторяются у одной функции, её описание не говорит боту, когда её звать: перепишите его от лица бота с условием вызова. В тест-чате бот в такой ситуации прямо говорит, что здесь счёт или бронь не выставляются.

3в. Клиент пишет не по-русски

Решение вызвать функцию принимается по смыслу сообщения, а не по языку: «кейін жазамын» и «I'll text you later» ставят паузу напоминаний так же, как «напишу позже». Описания стандартных функций поведения с 14 октября 2026 содержат примеры на трёх языках, и у всех проектов с функциями стоит общее правило «функции по смыслу на любом языке». Если своя функция срабатывает только на русские фразы, допишите в её описание примеры на казахском и английском.

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

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

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

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


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

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

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

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

Уведомление «функция проекта перестала работать»

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

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

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

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

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


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

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

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

Под капотом

  • Загрузка функций: 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 проекта и именем функции