Ошибки
HTTP-коды
400 — неверный запрос, 401 — токен или подпись, 403 — недостаточно прав/лимит, 404 — сущность недоступна, 409 — конфликт имени, 413 — слишком большой файл, 422 — ошибка поля, 429 — лимит запросов, 5xx — временная ошибка платформы.
Повтор запроса
Повторяйте только идемпотентные операции и 429/5xx с exponential backoff и jitter. Для отправки сообщения всегда задавайте idempotency_key.
Ошибка в чате
Если callback не выполнен, кнопка возвращается из состояния загрузки, а пользователю показывается системное сообщение. Не публикуйте stack trace или внутренний ответ webhook.
Практика с SDK
Разделяйте окончательные 4xx и временные 429/5xx. Повторяйте запросы с exponential backoff и jitter, сохраняя исходный idempotency_key.
Логируйте request id, HTTP status и безопасную часть ответа, но удаляйте токены, webhook secrets и пользовательские вложения.
Примеры использования
import { KeyChatError } from '@keychat/bots';
try { await bot.sendMessage(input); }
catch (error) {
if (error instanceof KeyChatError && (error.status === 429 || error.status >= 500)) scheduleRetry(input);
else throw error;
}