
آموزش ساخت ربات تلگرام با Go از صفر تا اجرا
اگر به دنبال آموزش ساخت ربات تلگرام با Go هستید، در این مقاله از صفر یک Telegram Bot با زبان برنامهنویسی Go میسازیم.
اما قبل از اینکه وارد کدنویسی شویم، یک سؤال مهم وجود دارد:
چرا اصلاً باید برای ساخت ربات تلگرام از Go استفاده کنیم؟
زبان Go که با نام Golang نیز شناخته میشود، به دلیل سرعت بالا، مصرف نسبتاً کم منابع، Concurrency داخلی، سادگی Deployment و مناسب بودن برای سرویسهای Backend، گزینه جذابی برای ساخت رباتهای تلگرام است.
Telegram نیز یک Bot API مبتنی بر HTTP ارائه میکند؛ بنابراین از نظر فنی میتوان با زبانهای مختلفی مانند Python، JavaScript، TypeScript، Go و غیره Bot ساخت.
در این آموزش یک Bot واقعی میسازیم که میتواند:
- دستور
/startرا دریافت کند. - به کاربران پاسخ دهد.
- پیامهای متنی را پردازش کند.
- Commandهای مختلف داشته باشد.
- Inline Keyboard داشته باشد.
- اطلاعات کاربر را بخواند.
- خطاها را مدیریت کند.
- Token را از Environment Variable دریافت کند.
- با ساختاری مناسب برای توسعه بیشتر اجرا شود.
مشخصات SEO مقاله
کلمه کلیدی اصلی:
ساخت ربات تلگرام با Go
کلمات کلیدی مرتبط:
- آموزش ساخت ربات تلگرام با Go
- ساخت Telegram Bot با Golang
- ساخت ربات تلگرام با Golang
- آموزش Go Telegram Bot
- ساخت Bot تلگرام با Go
- Telegram Bot API در Go
- Golang Telegram Bot
- آموزش ساخت ربات با Golang
- Go Telegram Bot Tutorial
عنوان SEO پیشنهادی:
آموزش ساخت ربات تلگرام با Go (Golang) از صفر تا اجرا
Meta Description پیشنهادی:
در این آموزش یاد میگیرید چگونه با Go و Telegram Bot API یک ربات تلگرام بسازید؛ از BotFather و Token تا Command، پیام، Inline Keyboard و اجرای Bot.
Slug پیشنهادی:
/telegram-bot-go/
Go چیست؟
Go یک زبان برنامهنویسی Open Source است که برای ساخت نرمافزارهای سریع، ساده و قابل نگهداری طراحی شده است.
Go در پروژههای Backend، سرویسهای شبکه، Microserviceها، ابزارهای Command-Line و سیستمهای توزیعشده کاربرد زیادی دارد.
یکی از ویژگیهای مهم Go، پشتیبانی داخلی از Concurrency است.
برای مثال، Go با Goroutineها امکان اجرای همزمان کارها را با Syntax نسبتاً ساده فراهم میکند.
این ویژگی برای سرویسهایی که باید تعداد زیادی درخواست یا عملیات مستقل را مدیریت کنند، بسیار مفید است.
چرا برای ساخت ربات تلگرام از Go استفاده کنیم؟
این بخش مهمترین قسمت مقاله است.
ممکن است بپرسید:
وقتی میتوانم با Python، Node.js یا زبانهای دیگر Telegram Bot بسازم، چرا Go؟
پاسخ این است که Go همیشه بهترین انتخاب نیست؛ اما برای بعضی انواع Botها مزایای بسیار خوبی دارد.
۱. سرعت بالا
Go یک زبان Compiled است.
برنامه Go قبل از اجرا به Binary تبدیل میشود.
در نتیجه میتوانیم یک فایل اجرایی مستقل داشته باشیم:
telegram-bot
و آن را روی Server اجرا کنیم.
این مدل Deployment بسیار ساده است.
۲. مصرف مناسب منابع
برای Botهایی که دائماً روی Server اجرا میشوند، مصرف CPU و RAM اهمیت دارد.
یک Bot کوچک Go میتواند به شکل یک Binary مستقل اجرا شود و به Runtime بزرگی مانند Node.js وابسته نباشد.
البته مقدار واقعی مصرف RAM و CPU کاملاً به Application، Library، تعداد Updateها، Database و سرویسهای جانبی بستگی دارد؛ بنابراین نباید صرفاً بر اساس زبان برنامهنویسی ادعای یک عدد ثابت کرد.
۳. Concurrency
یکی از ویژگیهای معروف Go، Goroutine است.
مثلاً:
go doSomething()
میتواند یک تابع را در یک Goroutine اجرا کند.
برای Telegram Botهایی که همزمان باید عملیاتهایی مانند موارد زیر را انجام دهند، این مدل بسیار کاربردی است:
Telegram Update
↓
Bot
↓
┌────┼────┐
↓ ↓ ↓
API DB Queue
برای مثال، Bot میتواند پیام کاربر را دریافت کند، یک عملیات Database انجام دهد و در کنار آن یک سرویس خارجی را نیز فراخوانی کند.
۴. Deployment ساده
یکی از نقاط قوت Go این است که میتوانید برنامه را Compile کنید و Binary تولیدشده را روی Server اجرا کنید.
برای مثال:
go build -o telegram-bot
سپس:
./telegram-bot
این موضوع برای Deployment بسیار راحت است.
۵. مناسب برای Backend
اگر Bot شما قرار است فقط یک /start ساده داشته باشد، تقریباً هر زبان مدرنی کافی است.
اما اگر Bot شما قرار است به این موارد متصل شود:
Telegram
↓
Go Backend
↓
PostgreSQL
↓
Redis
↓
REST API
↓
Message Queue
Go میتواند انتخاب بسیار مناسبی باشد.
۶. مناسب برای پروژههای بلندمدت
یکی از ویژگیهای Go سادگی زبان است.
Go نسبت به بسیاری از زبانها Syntax نسبتاً کوچکی دارد.
این موضوع باعث میشود در پروژههای تیمی، خواندن و نگهداری کد سادهتر شود.
البته این موضوع به کیفیت معماری پروژه نیز وابسته است؛ یک پروژه Go با معماری بد همچنان میتواند بسیار پیچیده باشد.
چه زمانی Go انتخاب خوبی نیست؟
این نکته نیز مهم است.
نباید تصور کنیم Go برای همه Telegram Botها بهترین زبان است.
اگر هدف شما این است که:
- سریع یک Prototype بسازید.
- از کتابخانههای فراوان AI استفاده کنید.
- تیم شما Python بلد است.
- پروژه بسیار کوچک است.
- نیاز به توسعه بسیار سریع دارید.
ممکن است Python یا Node.js انتخاب راحتتری باشند.
اما اگر اولویت شما:
- Performance
- Concurrency
- Deployment ساده
- Backend قابل توسعه
- مصرف مناسب منابع
- ساخت سرویس طولانیمدت
باشد، Go گزینه بسیار جذابی است.
Telegram Bot چگونه کار میکند؟
قبل از کدنویسی، بهتر است معماری Telegram Bot را بدانیم.
به صورت ساده:
User
↓
Telegram
↓
Telegram Bot API
↓
Your Go Application
↓
Bot Logic
↓
Database / APIs
Telegram یک HTTP-based Bot API ارائه میکند و درخواستها از طریق Endpointهای API انجام میشوند.
کتابخانه Go که در این آموزش استفاده میکنیم، لایهای روی Bot API فراهم میکند تا لازم نباشد تمام HTTP Requestها و Updateها را دستی مدیریت کنیم.
چرا از کتابخانه Go استفاده کنیم؟
از نظر فنی میتوانیم مستقیماً HTTP Request بفرستیم.
مثلاً Telegram API از ساختاری شبیه زیر استفاده میکند:
https://api.telegram.org/bot<TOKEN>/METHOD_NAME
برای مثال:
https://api.telegram.org/bot<TOKEN>/getMe
اما در یک پروژه واقعی، مدیریت مستقیم تمام API Methodها، Updateها، Typeها و Errorها باعث ایجاد کد اضافی میشود.
Telegram خودش نیز استفاده از Libraryها را برای ساخت پروژههای جدیتر توصیه/معرفی میکند و برای Go چندین Library را در فهرست رسمی نمونهها قرار داده است.
در این آموزش از:
github.com/go-telegram/bot
استفاده میکنیم.
این پروژه یک Go Telegram Bot framework با وابستگیهای صفر است و در مستندات فعلی خود Go 1.18+ و Bot API 10.2 را ذکر میکند.
مرحله اول: نصب Go
ابتدا Go را روی سیستم خود نصب کنید.
پس از نصب، Terminal را باز کنید:
go version
باید نسخه Go را مشاهده کنید.
برای این آموزش از یک نسخه جدید Go استفاده کنید.
مرحله دوم: ساخت پروژه Go
یک پوشه ایجاد کنید:
mkdir telegram-bot-go
cd telegram-bot-go
سپس یک Go Module ایجاد کنید:
go mod init telegram-bot-go
اکنون ساختار پروژه:
telegram-bot-go/
└── go.mod
مرحله سوم: نصب Telegram Bot Library
کتابخانه مورد استفاده را نصب کنید:
go get github.com/go-telegram/bot
مستندات فعلی همین Package را به عنوان یک Telegram Bot Framework برای Go معرفی میکنند.
اکنون فایلهای مربوط به Module و Dependencyها ایجاد یا بهروزرسانی میشوند.
مرحله چهارم: ساخت Bot با BotFather
مانند Node.js و Python، برای Go نیز ابتدا باید Telegram Bot خود را بسازید.
در Telegram وارد:
@BotFather
شوید.
سپس:
/newbot
را ارسال کنید.
BotFather از شما نام Bot را میخواهد.
مثلاً:
My Go Telegram Bot
سپس Username:
my_go_telegram_bot
در نهایت BotFather یک Token در اختیار شما قرار میدهد.
Token چیزی شبیه این است:
123456789:AAxxxxxxxxxxxxxxxxxxxxxxxx
Token را امن نگه دارید
Token را داخل Source Code قرار ندهید.
اشتباه:
bot.New("123456789:REAL_TOKEN")
روش بهتر:
TELEGRAM_BOT_TOKEN
را به عنوان Environment Variable تنظیم کنیم.
این روش مخصوصاً برای Deployment روی Server و Container بسیار مناسبتر است.
مرحله پنجم: تنظیم Environment Variable
در Linux یا macOS میتوانید موقتاً بنویسید:
export TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN"
در Windows PowerShell:
$env:TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN"
اکنون Go میتواند Token را با:
os.Getenv("TELEGRAM_BOT_TOKEN")
دریافت کند.
مرحله ششم: ساخت اولین Telegram Bot با Go
یک فایل به نام:
main.go
ایجاد کنید.
کد زیر یک Bot ساده میسازد:
package main
import (
"context"
"os"
"os/signal"
"github.com/go-telegram/bot"
"github.com/go-telegram/bot/models"
)
func main() {
ctx, cancel := signal.NotifyContext(
context.Background(),
os.Interrupt,
)
defer cancel()
b, err := bot.New(
os.Getenv("TELEGRAM_BOT_TOKEN"),
bot.WithDefaultHandler(handler),
)
if err != nil {
panic(err)
}
b.Start(ctx)
}
func handler(
ctx context.Context,
b *bot.Bot,
update *models.Update,
) {
if update.Message == nil {
return
}
_, err := b.SendMessage(
ctx,
&bot.SendMessageParams{
ChatID: update.Message.Chat.ID,
Text: "سلام! 👋",
},
)
if err != nil {
panic(err)
}
}
این الگو با نمونهای که در مستندات فعلی go-telegram/bot ارائه شده همراستا است: ساخت Bot، تعریف Default Handler و اجرای آن با Context.
مرحله هفتم: اجرای Bot
اکنون اجرا کنید:
go run .
اگر همه چیز درست باشد، برنامه اجرا خواهد شد.
اکنون وارد Telegram شوید.
Bot خود را پیدا کنید.
سپس:
/start
را ارسال کنید.
Bot باید:
سلام! 👋
را پاسخ دهد.
کد ما چگونه کار میکند؟
بیایید بخشهای مهم را بررسی کنیم.
package main
package main
نشان میدهد این فایل بخشی از یک برنامه اجرایی Go است.
importها
import (
"context"
"os"
"os/signal"
"github.com/go-telegram/bot"
"github.com/go-telegram/bot/models"
)
سه Package استاندارد Go داریم:
context
os
os/signal
و دو Package از کتابخانه Telegram:
bot
models
Context چیست؟
Context در Go یکی از مفاهیم بسیار مهم برای مدیریت Lifecycle، Cancellation و Timeout است.
در این پروژه:
ctx, cancel := signal.NotifyContext(
context.Background(),
os.Interrupt,
)
یک Context ایجاد میکنیم که با دریافت Interrupt قابل Cancel شدن است.
این موضوع به Shutdown تمیز برنامه کمک میکند.
ساخت Bot
قسمت اصلی:
b, err := bot.New(
os.Getenv("TELEGRAM_BOT_TOKEN"),
bot.WithDefaultHandler(handler),
)
در اینجا:
- Token را دریافت میکنیم.
- Bot را ایجاد میکنیم.
- Default Handler را مشخص میکنیم.
کتابخانه go-telegram/bot هنگام ساخت Bot نیز میتواند با getMe اعتبار Token را بررسی کند و در صورت خطا Error برگرداند.
Handler چیست؟
Handler تابعی است که Update دریافتی از Telegram را پردازش میکند.
در پروژه ما:
func handler(
ctx context.Context,
b *bot.Bot,
update *models.Update,
)
سه چیز مهم در اختیار داریم:
ctx
b
update
ctx برای Context است.
b خود Telegram Bot است.
update اطلاعاتی است که از Telegram دریافت کردهایم.
بررسی Message
این خط:
if update.Message == nil {
return
}
بررسی میکند آیا Update شامل Message هست یا خیر.
چون Telegram فقط Message ارسال نمیکند.
ممکن است Update شامل مواردی مانند:
- Message
- Callback Query
- Inline Query
- و انواع دیگر Update
باشد.
ارسال پیام
برای ارسال پیام:
b.SendMessage(
ctx,
&bot.SendMessageParams{
ChatID: update.Message.Chat.ID,
Text: "سلام! 👋",
},
)
از SendMessage استفاده میکنیم.
Library مورد استفاده، Methodهای Telegram Bot API را در اختیار برنامه Go قرار میدهد؛ از جمله SendMessage و GetMe.
ساخت Command برای /start
اکنون بهتر است Bot را از حالت Echo ساده خارج کنیم.
میتوانیم Handler مربوط به Commandها را جدا کنیم.
برای مثال:
func startHandler(
ctx context.Context,
b *bot.Bot,
update *models.Update,
) {
if update.Message == nil {
return
}
b.SendMessage(
ctx,
&bot.SendMessageParams{
ChatID: update.Message.Chat.ID,
Text: "سلام! 👋\nبه ربات Go من خوش آمدید.",
},
)
}
سپس میتوانیم Handlerهای مختلف برای Commandهای مختلف داشته باشیم.
یک Bot با چند Command
ساختار پروژه را کمی تغییر میدهیم:
telegram-bot-go/
│
├── main.go
├── handlers.go
└── go.mod
در main.go:
package main
import (
"context"
"os"
"os/signal"
"github.com/go-telegram/bot"
)
func main() {
ctx, cancel := signal.NotifyContext(
context.Background(),
os.Interrupt,
)
defer cancel()
b, err := bot.New(
os.Getenv("TELEGRAM_BOT_TOKEN"),
)
if err != nil {
panic(err)
}
b.Start(ctx)
}
سپس Handlerها را در فایل جدا قرار میدهیم.
چرا جدا کردن Handlerها مهم است؟
در پروژه کوچک:
main.go
کافی است.
اما در پروژه واقعی ممکن است داشته باشیم:
/start
/help
/about
/settings
/profile
/admin
اگر همه را داخل main.go قرار دهیم، فایل خیلی بزرگ میشود.
ساختار بهتر:
handlers/
├── start.go
├── help.go
├── profile.go
└── admin.go
دریافت پیامهای متنی
فرض کنید میخواهیم به پیامهای کاربر پاسخ دهیم.
منطق ساده:
func messageHandler(
ctx context.Context,
b *bot.Bot,
update *models.Update,
) {
if update.Message == nil {
return
}
text := update.Message.Text
b.SendMessage(
ctx,
&bot.SendMessageParams{
ChatID: update.Message.Chat.ID,
Text: "پیام شما: " + text,
},
)
}
اگر کاربر بگوید:
سلام
Bot پاسخ میدهد:
پیام شما: سلام
ساخت Inline Keyboard
Telegram Botها فقط برای ارسال Text نیستند.
میتوانیم رابط کاربری تعاملی بسازیم.
مثلاً:
┌─────────────────────┐
│ 📚 آموزشها │
├──────────┬──────────┤
│ ℹ️ درباره │ 📞 تماس │
└──────────┴──────────┘
Inline Keyboard برای Botهای فروشگاهی، پشتیبانی، آموزش، مدیریت کاربران و بسیاری از کاربردهای دیگر بسیار مفید است.
معماری یک Bot حرفهای با Go
وقتی Bot بزرگ شود، معماری پیشنهادی میتواند به این شکل باشد:
Telegram
│
▼
Telegram Bot API
│
▼
Go Telegram
Bot
│
┌──────────┼──────────┐
▼ ▼ ▼
Handler Middleware Router
│
▼
Services
│
┌─────┼─────┐
▼ ▼ ▼
DB Redis APIs
این ساختار کمک میکند Telegram Layer از Business Logic جدا باشد.
Go و Database
فرض کنید Bot شما باید اطلاعات کاربران را ذخیره کند.
مثلاً:
users
--------------------------
id
telegram_id
username
first_name
created_at
وقتی کاربر /start میزند:
/start
↓
Go Handler
↓
User Service
↓
PostgreSQL
↓
Create / Update User
Go با Databaseهایی مانند PostgreSQL و MySQL به خوبی قابل استفاده است.
برای پروژههای جدی Telegram Bot، PostgreSQL میتواند انتخاب بسیار خوبی باشد.
Go برای Telegram Botهای بزرگ
اینجاست که انتخاب Go اهمیت بیشتری پیدا میکند.
فرض کنید Bot شما:
500 users
دارد.
ساخت آن با هر زبان مناسبی ممکن است.
اما اگر پروژه تبدیل شود به:
100,000+ users
و Bot به:
Database
Redis
External APIs
Queues
Payment
AI
Analytics
متصل شود، معماری Backend اهمیت زیادی پیدا میکند.
Go در چنین Backendهایی میتواند گزینه بسیار مناسبی باشد، مخصوصاً اگر Concurrency و مصرف منابع برای شما مهم باشند.
البته تعداد کاربر به تنهایی دلیل کافی برای انتخاب Go نیست؛ طراحی سیستم، نوع workload، Database و زیرساخت اهمیت بیشتری دارند.
Polling در برابر Webhook
Telegram Botها میتوانند Updateها را از طریق روشهایی مانند Long Polling یا Webhook دریافت کنند.
در Polling:
Go Bot
↓
Telegram API
↓
"Any new updates?"
↓
Updates
در Webhook:
Telegram
↓
HTTPS POST
↓
Your Go Server
Library مورد استفاده در این مقاله برای Webhook نیز متدی به نام StartWebhook ارائه میکند.
چه زمانی Webhook استفاده کنیم؟
برای Local Development:
Polling
معمولاً سادهتر است.
برای Production:
Webhook
میتواند انتخاب خوبی باشد، مخصوصاً وقتی Server عمومی و HTTPS دارید.
اما انتخاب نهایی به معماری Deployment شما بستگی دارد.
Deployment ربات Go
یکی از مزیتهای جذاب Go این است که میتوانید برنامه را Build کنید.
go build -o telegram-bot
سپس:
./telegram-bot
برنامه اجرا میشود.
این Binary میتواند روی Server اجرا شود.
اجرای Bot با Docker
Go همچنین با Docker بسیار خوب ترکیب میشود.
یک Dockerfile ساده:
FROM golang:1.24-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o telegram-bot .
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/telegram-bot .
CMD ["./telegram-bot"]
سپس:
docker build -t telegram-bot .
و:
docker run \
-e TELEGRAM_BOT_TOKEN="YOUR_TOKEN" \
telegram-bot
در Production بهتر است Secretها را از روشهای مناسب مدیریت Secret دریافت کنید و Token را مستقیماً داخل Dockerfile قرار ندهید.
چرا Go برای Docker جذاب است؟
Go میتواند یک Binary مستقل تولید کند.
در نتیجه میتوانیم از Multi-stage Docker Build استفاده کنیم:
Go Source
↓
Builder Image
↓
Compiled Binary
↓
Small Runtime Image
این معماری میتواند Image نهایی را نسبت به نگه داشتن ابزارهای Build در Runtime سادهتر و کوچکتر کند.
مدیریت Graceful Shutdown
یکی از مزایای استفاده از Context در Go این است که میتوانیم Lifecycle برنامه را بهتر مدیریت کنیم.
نمونه:
ctx, cancel := signal.NotifyContext(
context.Background(),
os.Interrupt,
)
defer cancel()
b.Start(ctx)
هنگامی که برنامه Signal دریافت میکند، Context لغو میشود.
در یک پروژه واقعی میتوانید همین الگو را برای:
Telegram Bot
Database
Redis
HTTP Server
Workers
به کار ببرید.
مدیریت خطا در Go
یکی از تفاوتهای مهم Go این است که Error Handling معمولاً به شکل explicit انجام میشود.
مثلاً:
_, err := b.SendMessage(
ctx,
&bot.SendMessageParams{
ChatID: chatID,
Text: "Hello",
},
)
if err != nil {
log.Printf("failed to send message: %v", err)
}
این مدل در ابتدا ممکن است verbose به نظر برسد، اما باعث میشود مسیرهای خطا در کد کاملاً مشخص باشند.
امنیت Telegram Bot
چند اصل را همیشه رعایت کنید.
Token را در Source Code قرار ندهید
بد:
token := "123456789:REAL_TOKEN"
خوب:
token := os.Getenv("TELEGRAM_BOT_TOKEN")
Token را در Git Commit نکنید
اگر از Git استفاده میکنید، Secretهای واقعی را در Repository قرار ندهید.
برای Production نیز بهتر است Token را از Secret Management یا Environment مناسب دریافت کنید.
یک ساختار حرفهای برای پروژه
برای یک Bot متوسط تا بزرگ میتوان ساختار زیر را در نظر گرفت:
telegram-bot/
│
├── cmd/
│ └── bot/
│ └── main.go
│
├── internal/
│ ├── bot/
│ │ ├── handlers/
│ │ │ ├── start.go
│ │ │ ├── help.go
│ │ │ └── messages.go
│ │ │
│ │ └── middleware/
│ │ └── logging.go
│ │
│ ├── service/
│ │ └── user.go
│ │
│ ├── repository/
│ │ └── user.go
│ │
│ └── database/
│ └── postgres.go
│
├── go.mod
├── go.sum
├── Dockerfile
└── README.md
این ساختار از یک اصل مهم پیروی میکند:
Telegram Handler نباید تمام Business Logic پروژه را در خود داشته باشد.
مثلاً بهتر است این کار را نکنیم:
Telegram Handler
↓
SQL Query
↓
Payment API
↓
Business Logic
بهتر است:
Telegram Handler
↓
Service
↓
Repository / External API
باشد.
چه پروژههایی را میتوان با Go Telegram Bot ساخت؟
تقریباً هر نوع Botی که Telegram Bot API اجازه دهد.
برای مثال:
ربات پشتیبانی
User
↓
Telegram Bot
↓
Support Service
↓
Admin
ربات فروشگاهی
Product
↓
Cart
↓
Order
↓
Payment
↓
Database
ربات هوش مصنوعی
User
↓
Telegram
↓
Go
↓
AI API
↓
Go
↓
Telegram
ربات مانیتورینگ
Server
↓
Monitoring Service
↓
Go Bot
↓
Telegram Admin
این مدل برای ارسال Alert بسیار جذاب است.
مثلاً:
🚨 Server Alert
CPU: 95%
Memory: 91%
Status: WARNING
آیا Go برای AI Telegram Bot مناسب است؟
بله.
اما نکته مهم این است که Go قرار نیست مدل AI را حتماً خودش اجرا کند.
معماری معمول:
Telegram
↓
Go Bot
↓
AI API
↓
Go Bot
↓
Telegram
Go میتواند نقش Backend و Orchestration Layer را داشته باشد.
برای مثال:
- پیام Telegram را دریافت کند.
- User را احراز هویت کند.
- Conversation را از Database بخواند.
- درخواست را به AI API ارسال کند.
- Response را دریافت کند.
- نتیجه را به Telegram ارسال کند.
- Conversation را ذخیره کند.
این معماری برای یک پروژه واقعی بسیار قدرتمندتر از یک Bot ساده Echo است.
Go یا Node.js برای Telegram Bot؟
اگر بین Go و Node.js مردد هستید، پاسخ به نیاز پروژه بستگی دارد.
| ویژگی | Go | Node.js |
|---|---|---|
| Performance | بسیار خوب | بسیار خوب |
| Concurrency | نقطه قوت اصلی | Event Loop + Async |
| Memory | معمولاً مناسب | مناسب |
| شروع سریع | خوب | بسیار خوب |
| اکوسیستم npm | ندارد | بسیار بزرگ |
| Deployment | بسیار ساده | ساده |
| TypeScript | ندارد، زبان مستقل | دارد |
| Backend | عالی | عالی |
| AI Ecosystem | خوب | بسیار خوب |
| مناسب Microservice | عالی | عالی |
نظر من
اگر شما از قبل JavaScript/Node.js میدانید و Bot کوچک است، تغییر به Go صرفاً برای ساخت Telegram Bot ضرورت ندارد.
اما اگر:
- Go را میدانید،
- Bot بخشی از یک Backend بزرگتر است،
- Concurrency اهمیت دارد،
- Deployment ساده میخواهید،
- یا میخواهید Bot بخشی از یک معماری Go-based باشد،
استفاده از Go کاملاً منطقی است.
یک نکته مهم درباره انتخاب Library
برای Go چندین Telegram Bot Library وجود دارد.
Telegram در فهرست رسمی Bot API Libraries خود گزینههایی مانند go-telegram/bot، Telego، gotgbot و چند پروژه دیگر را معرفی میکند.
یکی از گزینههای قدیمیتر و بسیار شناختهشده نیز:
github.com/go-telegram-bot-api/telegram-bot-api/v5
است.
این پروژه خود را به عنوان یک Wrapper برای Telegram Bot API معرفی میکند و Documentation و Examples متعددی دارد.
برای این مقاله go-telegram/bot را انتخاب کردیم چون API فعلی آن برای ساخت یک Bot مدرن، ساده و مستقیم است و در حال حاضر نیز در فهرست رسمی Telegram قرار دارد.
نسخه ساده و نهایی Bot
اگر بخواهیم یک نسخه جمعوجور و مناسب برای شروع داشته باشیم:
package main
import (
"context"
"os"
"os/signal"
"github.com/go-telegram/bot"
"github.com/go-telegram/bot/models"
)
func main() {
ctx, cancel := signal.NotifyContext(
context.Background(),
os.Interrupt,
)
defer cancel()
token := os.Getenv("TELEGRAM_BOT_TOKEN")
if token == "" {
panic("TELEGRAM_BOT_TOKEN is not set")
}
b, err := bot.New(
token,
bot.WithDefaultHandler(handler),
)
if err != nil {
panic(err)
}
b.Start(ctx)
}
func handler(
ctx context.Context,
b *bot.Bot,
update *models.Update,
) {
if update.Message == nil {
return
}
text := update.Message.Text
_, err := b.SendMessage(
ctx,
&bot.SendMessageParams{
ChatID: update.Message.Chat.ID,
Text: "شما گفتید: " + text,
},
)
if err != nil {
panic(err)
}
}
اجرای آن:
go run .
یا Build:
go build -o telegram-bot
و سپس:
./telegram-bot
جمعبندی؛ چرا ربات تلگرام را با Go بسازیم؟
ساخت Telegram Bot با Go فقط یک انتخاب برای متفاوت بودن نیست.
اگر پروژه شما یک Bot کوچک و ساده است، Python، Node.js یا حتی زبانهای دیگر میتوانند کاملاً کافی باشند.
اما وقتی Bot بخشی از یک Backend جدیتر میشود، ویژگیهای Go اهمیت بیشتری پیدا میکنند:
Fast Compilation
+
Low-level Control
+
Concurrency
+
Simple Deployment
+
Strong Typing
+
Excellent Backend Ecosystem
ترکیب این ویژگیها باعث میشود Go برای ساخت Telegram Botهایی که قرار است بخشی از یک سیستم Backend بزرگتر باشند، انتخاب بسیار خوبی باشد.
از طرف دیگر، Telegram Bot API مستقل از زبان است؛ بنابراین بهترین زبان، زبانی نیست که صرفاً سریعتر باشد، بلکه زبانی است که با نیاز پروژه، مهارت تیم و معماری سیستم شما هماهنگ باشد.
اگر تازه Go را یاد گرفتهاید، ساخت یک Telegram Bot یکی از پروژههای خوبی است که میتوانید با آن مفاهیمی مانند:
context- concurrency
- HTTP/API
- error handling
- environment variables
- database access
- graceful shutdown
- Docker
- Webhook
را در یک پروژه واقعی تمرین کنید.
سوالات متداول درباره ساخت Telegram Bot با Go
آیا میتوان با Go ربات تلگرام ساخت؟
بله. Telegram Bot API یک API مبتنی بر HTTP است و Go نیز چندین Library برای کار با آن دارد. Telegram نیز چند Library مربوط به Go را در فهرست رسمی خود معرفی میکند.
آیا Go برای Telegram Bot بهتر از Python است؟
نه به صورت مطلق.
Python برای توسعه سریع و استفاده از اکوسیستم بزرگ خود بسیار مناسب است. Go در عوض برای Backendهای سریع، Concurrent و قابل Deployment میتواند مزایای مهمی داشته باشد.
آیا Go برای Telegram Bot بهتر از Node.js است؟
باز هم پاسخ مطلق وجود ندارد.
اگر تیم شما JavaScript میداند، Node.js ممکن است سریعتر باشد. اگر پروژه شما Go-based است یا Concurrency، Binary Deployment و سادگی Runtime برایتان مهم است، Go میتواند انتخاب بهتری باشد.
آیا ساخت Telegram Bot با Go رایگان است؟
خود Telegram Bot API برای توسعه Bot ارائه شده است، اما اجرای Bot روی VPS یا Cloud ممکن است هزینه زیرساخت داشته باشد.
آیا میتوان Bot ساختهشده با Go را روی VPS اجرا کرد؟
بله. یکی از مزایای Go این است که میتوانید برنامه را به یک Binary تبدیل کنید و آن را روی Server اجرا کنید.
آیا میتوان Bot Go را با Docker اجرا کرد؟
بله. Go و Docker ترکیب بسیار مناسبی برای Deployment Backend هستند.
آیا میتوان با Go یک AI Telegram Bot ساخت؟
بله. Go میتواند به عنوان Backend عمل کند و از طریق API با سرویسهای AI ارتباط برقرار کند.
آیا Go برای Botهای بزرگ مناسب است؟
بله، میتواند مناسب باشد؛ مخصوصاً وقتی Bot بخشی از یک سیستم Backend بزرگتر با Database، Cache، Queue و APIهای مختلف است. البته مقیاسپذیری بیشتر از آنکه به زبان وابسته باشد، به معماری صحیح سیستم بستگی دارد.
منابع و مستندات
برای مطالعه بیشتر، منابع زیر نقطه شروع مناسبی هستند:
- مستندات رسمی Telegram Bot API برای مشاهده Methodها، Updateها و قابلیتهای رسمی Bot API.
- راهنمای رسمی Telegram — From BotFather to Hello World برای ساخت Bot، Token و مفاهیم پایه.
- go-telegram/bot برای توسعه Telegram Bot با Go.
- Telegram Bot API Libraries — Go برای مقایسه Libraryهای مختلف Go.