Что проверить до выбора провайдера
В одном чате встречаются вопросы с разной ценой ошибки. «Где найти счёт?» можно обработать быстро. Возврат денег требует проверки заказа и участия сотрудника. Поэтому сначала разложите задачи, а потом сравнивайте API: гладкое демо ломается, когда клиент повторяет сообщение, запрос уходит в таймаут или оператору нужна вся переписка.
| Проверка | Что нужно | Тест до запуска |
|---|---|---|
| Модели и формат | ID из живого каталога, понятный endpoint и формат ошибок | Отклонять неизвестные ID при деплое; прогнать один тестовый диалог через свой SDK и шлюз |
| Лимиты и ошибки | Лимит на ключ, проект или маршрут | Создать отдельный ключ бота и намеренно упереться в лимит; смоделировать таймаут, rate limit, неверный ключ и пустой баланс |
| Надёжность | Таймаут, повтор с паузой, защита от дублей | Отключить upstream и посмотреть, что стало с очередью |
| Данные об использовании | История запросов и канал связи при сбое | Сопоставить тестовый request ID с моделью, длительностью, статусом и аккаунтом |
| Приватность | Выбор логируемых полей и срок хранения | Выписать все поля, уходящие провайдеру, убрать лишние и отправить тест с маркерами персональных данных |
| Переключение | Второй маршрут без переписывания бизнес-логики | Менять ID через конфигурацию, а не в коде обработчика |
Хороший провайдер не прячет отказ за ответом «попробуйте позже». Клиент получает код, request ID и безопасное сообщение, а оператор видит причину в закрытом логе. Список доступных ID лежит в документации по моделям, перепроверяйте его при каждом деплое роутера.
Какую модель брать под какую задачу
Это маршрут для проверки, а не рейтинг. ID сверены с каталогом codexkey 3 и 4 октября 2026 года. Прогоните их на своих обезличенных обращениях по одному набору критериев приёмки.
| Задача | Критерий приёмки | ID для теста |
|---|---|---|
| Тема обращения и короткий FAQ | JSON парсится, ответ не выходит за политику | claude-sonnet-5, gpt-6-sol, gpt-6-luna, deepseek-v4-flash |
| Ответ по базе знаний | Следует источнику, отказывается при нехватке данных | claude-sonnet-5, gpt-6-sol, gemini-3.7-flash |
| Длинная переписка или разбор аккаунта | Лимит контекста под контролем, условия и следующие шаги сохранены | claude-opus-5-5, gpt-6-astra, gpt-6.1-sol, gemini-3.8-flash |
| Второй маршрут для сравнения | Один и тот же тест даёт результат, который можно проверить | claude-fable-5-1, gpt-6-sol, qwen3.8-flash |
| Сложный случай для оператора | Метаданные, таймаут, повтор без дубля тикета; возврат и смена аккаунта не выполняются сами | Любая модель из разрешённого маршрута, затем человек |
Архитектура для Telegram и чата
Telegram-слой держите тонким: он аутентифицирует чат, нормализует апдейт и отправляет ответ. Бизнес-правила живут в сервисе, который может переиспользовать веб-чат или консоль оператора.
Telegram webhook
-> chat authentication and idempotency
-> support service and knowledge retrieval
-> model router
-> provider gateway
-> policy check and human handoff
-> Telegram response
Внутри сервиса backend присваивает сообщению внутренний ID, убирает лишние персональные данные и определяет тему. Поиск по базе знаний возвращает выдержки с версией документа и датой обновления. Модель получает вопрос, выдержки и короткие правила ответа, а валидатор проверяет формат и запрещённые действия. Если данных не хватает, создаётся тикет, и пользователь честно узнаёт, что дело передано оператору.
Между webhook и генерацией ставьте очередь, если ответ может занять дольше окна запроса Telegram, и храните ID апдейта, чтобы отбрасывать повторную доставку: пользователь нажимает дважды, сеть делает ретраи. Боту не нужен доступ к базе заказов. Когда заказ надо проверить, backend после авторизации берёт минимум полей и отдаёт модели только то, что нужно для формулировки ответа.
Серверный вызов с request ID
Ключ API живёт в окружении сервера, не в браузере и не в сообщении Telegram. В codexkey можно создать отдельный ключ для бота, ограничить его назначение и сравнить несколько моделей на одном наборе диалогов.
const baseURL = process.env.CODEXKEY_BASE_URL ?? "https://api.codexkey.ru";
const apiKey = process.env.CODEXKEY_API_KEY;
if (!apiKey) {
throw new Error("CODEXKEY_API_KEY is missing");
}
const response = await fetch(`${baseURL}/v1/messages`, {
method: "POST",
headers: {
authorization: `Bearer ${apiKey}`,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
"x-request-id": requestId,
},
body: JSON.stringify({
model: "claude-sonnet-5",
max_tokens: 700,
system: SUPPORT_POLICY,
messages: [{ role: "user", content: ticketText }],
}),
});
if (!response.ok) {
throw new Error(`model request failed: ${response.status}`);
}
Логируйте request ID, ID модели, время, код результата, число повторов и решение маршрутизатора. Текст сообщений и персональные поля маскируйте или не сохраняйте, особенно платёжные и паспортные данные. Больше примеров маршрутизации в статьях про API-провайдера для Telegram-бота и про Claude-бота поддержки. Доступ к Claude API из России разобран в отдельном руководстве.
Передача человеку и тесты
Эскалацию определите до запуска. Спор по платежу, смена личных данных, юридические угрозы, неясная политика, повторные неудачные ответы и прямая просьба позвать человека уходят оператору. Бот сообщает, что дело разбирает сотрудник, и показывает номер обращения. Оператор получает исходное сообщение, фрагменты политики, черновик ответа и причину эскалации и может поправить черновик до отправки в Telegram. Модель готовит контекст. Финальная отправка остаётся за вашей системой поддержки.
Заведите тесты на обычный FAQ, незнакомый вопрос, неполный запрос по аккаунту, prompt injection, rate limit, таймаут провайдера и передачу человеку, а проверяйте и запрос к модели, и сообщение в Telegram. Добавьте лимит параллельных запросов на чат, таймаут на каждый вызов провайдера и ограниченное число повторов. Инструмент, который меняет состояние аккаунта, без ключа идемпотентности не повторяйте.
FAQ
С какой модели начать?
С одного быстрого кандидата, например claude-sonnet-5 или gpt-6-sol, на закрытой выборке обращений. Флагман подключайте, когда поймёте, где текущая модель ошибается.
Можно ли дать боту право менять заказ или аккаунт?
Только через серверный инструмент с правами доступа, валидацией, записью в аудит и подтверждением для чувствительных действий. Ответ модели не заменяет авторизацию.
Что писать в логах?
Request ID, ID модели, время, код результата, объём запроса и решение маршрутизатора. Текст сообщения и персональные поля маскируйте либо не сохраняйте.
Хватит ли одного провайдера для Telegram-бота поддержки?
Один провайдер упрощает маршрутизацию. Держите проверенный второй маршрут или путь к человеку на случай сбоя, с тем же набором правил и форматом ответа.
Где хранить ключ API?
В переменной окружения сервера или в хранилище секретов, но не в сообщении, не в браузерном бандле, не в мобильном приложении и не в репозитории.
Как проверить, какие модели доступны сейчас?
Откройте документацию по моделям и живой каталог прямо перед релизом. Неизвестные ID в продакшн-конфигурацию не пускайте.