Тестирование и отладка функций

Тестирование и отладка функций

Содержание:


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

Метод 1. Тестирование через кнопку «Тестировать»

Шаг 1. Заполните тестовые аргументы

В окне редактирования функции найдите поле «Тестовые аргументы» на вкладке «Описание» и введите пример данных в формате JSON:

{
  "order_id": 12345
}

ℹ️ Совет

Если вы не заполнили это поле заранее, данные можно ввести прямо перед тестированием.

Шаг 2. Нажмите «Тестировать»

Внизу окна редактирования нажмите синюю кнопку «Тестировать». Система возьмёт данные из поля «Тестовые аргументы», отправит запрос на ваш API по указанным настройкам и покажет результат.

Кнопка «Тестировать»

Шаг 3. Проанализируйте результат

При успехе вы увидите JSON, который вернул ваш API — или его часть, если указан response_path. При ошибке система покажет код и сообщение.

ОшибкаПричинаРешение
404 Not FoundНеверный URL или ресурс не найденПроверьте request_url и переменные
401 UnauthorizedНеверный токен или авторизацияПроверьте заголовки Authorization
400 Bad RequestНеверные параметры запросаПроверьте request_body_template и схему
500 Internal Server ErrorОшибка на вашем сервереПроверьте логи вашего API
TimeoutПревышено время ожиданияУвеличьте timeout_ms или оптимизируйте API

⚠️ Если получили 401 при верном токене

Значение заголовка, отмеченного как секретное, хранится зашифрованным и не возвращается обратно в форму. Если вы перезагрузили страницу после сохранения функции, кнопка «Тестировать» отправит запрос без этого заголовка — и API ответит 401, хотя сама функция настроена верно. Проверить такую функцию по-настоящему можно в диалоге с ботом: там вызывается сохранённая версия с реальным ключом.

Результат тестирования функции
Ошибка при тестировании функции

Метод 2. Тестирование в диалоге с ботом

Это самый реалистичный способ проверки — вы общаетесь с ботом как обычный пользователь.

  1. В левом меню выберите «Тестирование».

    Раздел «Тестирование»
  2. Вверху страницы выберите режим, в котором хотите проверить бота.
  3. Задайте вопрос, который должен вызвать функцию. Например: Какой статус у моего заказа под номером 12345?
  4. Проанализируйте ответ.

Если функция сработала, бот получит данные от API и сформулирует ответ: «Статус вашего заказа под номером 12345 — "Доставляется". Ожидаемая дата доставки — 15 июня 2026 года.»

Если не сработала, причин обычно четыре:

  1. модель не распознала намерение — улучшите description функции;
  2. модель не извлекла параметры — проверьте input_schema_json;
  3. функция неактивна — проверьте is_enabled;
  4. у бота отключены функции — проверьте главный переключатель «Использование функций в запросах».

Проблема 1. Функция не вызывается

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

Плохое описание функции

❌ Так не стоит

"description": "API функция"

✅ Так нужно

"description": "Возвращает статус заказа по номеру заказа. Используйте, когда клиент спрашивает о статусе."

Непонятное имя функции

❌ Так не стоит

"name": "func1"

✅ Так нужно

"name": "get_order_status"

Также проверьте, что is_enabled: true, что включён главный переключатель «Использование функций в запросах» и что выбрана модель, поддерживающая вызов функций.

Проблема 2. Неправильно извлекаются параметры

Симптомы: бот вызывает функцию, но с пустыми или неверными параметрами; появляется ошибка валидации аргументов.

Неполная JSON Schema

❌ Так не стоит

{
  "type": "object",
  "properties": {}
}

✅ Так нужно

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "integer",
      "description": "Номер заказа"
    }
  },
  "required": ["order_id"]
}

Неправильный тип данных. Если в сообщении клиента число, а в схеме указан string, извлечение может не сработать. Указывайте integer.

Отсутствует description у параметра. Без описания модель не понимает, что именно искать в сообщении:

❌ Так не стоит

"order_id": {
  "type": "integer"
}

✅ Так нужно

"order_id": {
  "type": "integer",
  "description": "Номер заказа"
}

Проблема 3. Ошибка при отправке запроса

Симптомы: функция вызывается, но запрос не доходит до API — ошибка соединения или таймаут.

  1. Неверный URL. Проверьте, что адрес начинается с https://, что нет опечаток и что переменные записаны в одинарных фигурных скобках: {order_id}.
  2. Заблокированный адрес. Запрещены localhost, *.local и приватные IP. Используйте публичный HTTPS-адрес.
  3. Слишком маленький таймаут. Если API отвечает медленно, увеличьте timeout_ms — например, до 15000.
  4. Проблемы с авторизацией. Проверьте заголовки Authorization, актуальность токена и что чувствительные значения отмечены как is_secret: true.

Проблема 4. Неправильный ответ от API

Симптомы: запрос уходит успешно, но бот получает не те данные — либо ответ слишком большой и сложный.

Не указан response_path. Если API возвращает вложенную структуру, укажите путь до нужной части:

{
  "data": {
    "result": {
      "status": "Доставляется"
    }
  }
}

Для такого ответа указывается "response_path": "data.result".

Неверный формат пути. Путь записывается только через точку:

✅ Так нужно

"response_path": "data.result.status"

❌ Так не стоит

"response_path": "data[0].status"

Слишком большой ответ. Увеличьте max_response_bytes или, что лучше, используйте response_path, чтобы вернуть только нужные данные.

Советы по отладке

  1. Включите логирование на своём API. Проверяйте, какие запросы приходят от Helpfy: метод, URL, заголовки и тело запроса. Это сразу покажет, правильно ли они формируются.
  2. Используйте тестовые среды. Сначала проверьте функцию на staging-контуре и только потом подключайте продакшн.
  3. Начинайте с простого. Сначала настройте функцию без авторизации, потом добавьте заголовки, затем усложняйте логику.
  4. Проверяйте JSON Schema онлайн-валидаторами — опечатка в схеме выглядит как «модель не поняла запрос».
  5. Тестируйте с разными данными: корректными, некорректными, с отсутствующими обязательными полями и с граничными значениями.