Telegram Bot + Evrona
Своего бота легче всего собрать на grammY: сообщения он берёт из Telegram, а ответы — у шлюза через официальный SDK OpenAI.
Что нужно подготовить
Нет ключа? Создайте аккаунт — ключ создаётся в кабинете, в разделе «API-ключи», и полное значение показывается один раз. Model ID копируется из каталога целиком, вместе с префиксом до «/».
Порядок подключения
Возьмите токен бота у @BotFather.
Поставьте grammy и openai, затем вставьте код ниже.
Задайте переменные окружения BOT_TOKEN и EVRONA_API_KEY, затем запустите бота.
// npm i grammy openai
import { Bot } from "grammy";
import OpenAI from "openai";
const ai = new OpenAI({
apiKey: process.env.EVRONA_API_KEY,
baseURL: "https://evrona.ru/v1",
});
const bot = new Bot(process.env.BOT_TOKEN);
bot.on("message:text", async (ctx) => {
const answer = await ai.chat.completions.create({
model: "google/gemini-3.7-flash",
messages: [{ role: "user", content: ctx.message.text }],
});
await ctx.reply(answer.choices[0].message.content ?? "");
});
bot.start();Для длинных ответов включайте потоковую выдачу и правьте уже отправленное сообщение по мере прихода текста — иначе человек десятки секунд смотрит в пустой чат.
Вызов функций поддерживается, поэтому агентные режимы работают. Строгий JSON-режим (response_format) и снятый формат functions шлюз отклоняет ошибкой unsupported_parameter — молча параметр не теряется. Картинки на вход берут модели с пометкой «Понимает изображения» в каталоге: часть content типа image_url со ссылкой вида data:image/png;base64,… (PNG, JPEG или WebP, до 5 МБ каждая, до 50 штук на запрос). Внешние ссылки шлюз не скачивает, а модель без этой пометки возвращает ошибку unsupported_capability — обе ошибки прямо называют причину.