🤖 Как намутить ChatGPT-бота на Go с ключом OpenAI API
@k3ysupp0rtЭта инструкция покажет, как за 5 минут запустить собственного Telegram-бота, который отвечает на сообщения с помощью модели gpt-4o-mini.
🔧 Что делает этот бот?
- Принимает сообщения от пользователей в Telegram.
- Отправляет запросы к OpenAI API (используется модель
gpt-4o-mini). - Возвращает ответы от ChatGPT прямо в Telegram.
- Поддерживает контекст (бот помнит, о чём вы говорили ранее).
🪛 Шаг 1: Установка Go и зависимостей
Установите Go (если ещё не установлен):
sudo apt install golang
Создайте рабочую папку:
mkdir chatgpt-telegram-bot && cd chatgpt-telegram-bot
Инициализируйте проект и установите библиотеки:
go mod init mybot go get github.com/go-telegram-bot-api/telegram-bot-api go get github.com/sashabaranov/go-openai
🧠 Шаг 2: Получение ключей
✅ Получение API-ключа OpenAI:
- Перейдите @gpt_keys_shop_bot.
- Нажмите /start и купите ключ.

❗️ Внимание: использовать нужно полноценный Bearer-ключ, пример:sk-...илиsk-svcacct-...
🤖 Создание Telegram-бота:
- Откройте Telegram и найдите @BotFather.
- Команда
/newbot→ задайте имя и username (должен заканчиваться наbot). - Получите токен формата:
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
✍️ Шаг 3: Вставьте ключи в код
Создайте файл main.go и вставьте код:
package main
import (
"context"
"log"
"os"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
openai "github.com/sashabaranov/go-openai"
)
const (
OPENAI_API_KEY = "ВАШ_OPENAI_API_KEY"
TELEGRAM_BOT_TOKEN = "ВАШ_TELEGRAM_TOKEN"
)
func main() {
log.SetOutput(os.Stdout)
bot, err := tgbotapi.NewBotAPI(TELEGRAM_BOT_TOKEN)
if err != nil {
log.Panicf("Ошибка создания Telegram бота: %v", err)
}
bot.Debug = true
log.Println("Авторизован как " + bot.Self.UserName)
client := openai.NewClient(OPENAI_API_KEY)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates, err := bot.GetUpdatesChan(u)
if err != nil {
log.Panic(err)
}
var conversationHistory []openai.ChatCompletionMessage
for update := range updates {
if update.Message == nil {
continue
}
chatID := update.Message.Chat.ID
messageText := update.Message.Text
if update.Message.IsCommand() && update.Message.Command() == "start" {
msg := tgbotapi.NewMessage(chatID, "Привет! Я бот, использующий OpenAI gpt-4o-mini. Задай мне вопрос!")
bot.Send(msg)
continue
}
log.Println("Отправка в OpenAI: " + messageText)
conversationHistory = append(conversationHistory, openai.ChatCompletionMessage{
Role: "user",
Content: messageText,
})
response, err := getOpenAIResponse(client, conversationHistory)
if err != nil {
log.Printf("Ошибка от OpenAI: %v", err)
response = "Произошла ошибка при обращении к OpenAI."
} else {
conversationHistory = append(conversationHistory, openai.ChatCompletionMessage{
Role: "assistant",
Content: response,
})
}
msg := tgbotapi.NewMessage(chatID, response)
bot.Send(msg)
}
}
func getOpenAIResponse(client *openai.Client, history []openai.ChatCompletionMessage) (string, error) {
ctx := context.Background()
resp, err := client.CreateChatCompletion(ctx, openai.ChatCompletionRequest{
Model: "gpt-4o-mini", // Можно изменить на gpt-3.5-turbo, gpt-4, gpt-4-turbo и т.д.
Messages: history,
MaxTokens: 512,
})
if err != nil {
return "", err
}
log.Println("Ответ OpenAI: " + resp.Choices[0].Message.Content)
return resp.Choices[0].Message.Content, nil
}
🚀 Шаг 4: Запуск
Выполните в консоли:
go run main.go
Если всё настроено — бот начнёт слушать Telegram и отвечать на сообщения.
⚙️ Настройка модели
В строке:
Model: "gpt-4o-mini",
Ты можешь использовать любые из поддерживаемых моделей OpenAI:
gpt-3.5-turbo - быстрая и дешёвая
gpt-4-turbo - точная и мощная
gpt-4o или gpt-4o-mini новейшая и быстрая с мультимодальностью
🛟 Поддержка и дополнения
- Для логирования запросов добавьте
fmt.Println()илиlog.Println()в нужные места. - Для сохранения истории в файл можно использовать
os.WriteFile.
Если нужна поддержка или готовый бот, пишите @k3ysupp0rt.