ساخت ربات تلگرام با هوش مصنوعی — راهنمای عملی با API فارسی
ربات تلگرامی که به یک مدل واقعی وصل باشد، چیز پیچیدهای نیست: یک توکن از BotFather، یک کلید API و حدود سی خط پایتون. این صفحه همان مسیر را قدمبهقدم و با کد قابل اجرا نشان میدهد — با SDK رسمی OpenAI و فقط با تغییر base_url به https://1xai.ir/v1، تا از داخل ایران و با پرداخت تومانی کار کند.
ربات و کانال رسمی 1xAi روی تلگرام
ربات فعال است. کانال هم هنوز راه نیفتاده است. فقط آدرسهای زیر متعلق به ما هستند؛ هر آیدی دیگری به اسم 1xAi مال ما نیست.
چت با مدلها از داخل تلگرام، با همان کیف پول تومانی حسابت؛ اتصال از داشبورد انجام میشود.
باز کردن ربات در تلگراماعلام خودکار هر مقالهٔ تازهٔ وبلاگ: عنوان، خلاصهٔ کوتاه و لینک مستقیم.
هنوز ساخته نشده. تا آن موقع مقالهها را در وبلاگ یا از خوراک RSS دنبال کن.
مستقل از ربات ما هم میتوانی ربات تلگرام خودت را روی همین API بسازی؛ راهنمای کامل و کد اجراشدنی پایین همین صفحه است.
هر مقالهٔ تازه، خودکار در کانال اعلام میشود
کانال @OneXAiIR بلندگوی وبلاگ 1xAi است، نه یک کانال تبلیغاتی جدا. هر نوشتهٔ تازهای که روی وبلاگ منتشر شود، بدون دخالت دست همانجا هم اعلام میشود: عنوان مقاله، یک خلاصهٔ کوتاه و لینک مستقیم به متن کامل. یعنی بهجای سر زدن هر چند روز به سایت، کافی است کانال را دنبال کنی.
- مقالههای تازهٔ وبلاگ. راهنماهای فنی، مقایسهٔ مدلها و نکتههای کاهش هزینه — همان چیزی که در وبلاگ میبینی، خودکار و بدون تأخیر دستی.
- اعلامهای خود سرویس. از جمله لحظهای که ربات رسمی فعال شود؛ همانجا و روی همین صفحه اعلام میشود.
- همان محتوا، بدون تلگرام هم در دسترس. اگر تلگرام را دنبال نمیکنی چیزی از دست نمیدهی: خوراک RSS همان مقالهها را میدهد.
خواندن کانال رایگان است و برای امتحان کردن خود مدلها هم لازم نیست چیزی بپردازی: پلن رایگان در هر ۳۰ روز ۱۰۰٬۰۰۰ تومان اعتبار چت میدهد — با سقف هفتگی ۴۰٬۰۰۰ تومان، روی مدلهای سریع — و گردونهٔ هدیهٔ ثبتنام از ۱۰۰٬۰۰۰ تا ۱٬۰۰۰٬۰۰۰ تومان اعتبار به کیف پولت اضافه میکند. همان اعتبار را میشود خرج API ربات خودت هم کرد.
قبل از شروع چه چیزهایی لازم داری؟
فهرست کوتاه است و هیچکدام هزینهٔ ثابت ندارند: یک حساب تلگرام برای صحبت با BotFather، پایتون ۳٫۱۰ یا بالاتر روی سیستم یا سرورت، و یک کلید API از 1xAi که هزینهٔ آن از اعتبار کیف پول تومانیات کسر میشود. هزینهٔ استفاده از خود تلگرام صفر است؛ چیزی که خرج دارد فقط توکنهایی است که مدل مصرف میکند.
از BotFather. رایگان، بدون تأیید هویت، در کمتر از یک دقیقه. همان توکن اجازهٔ کنترل کامل ربات را میدهد، پس مثل رمز با آن رفتار کن.
یک کلید، بیش از ۳۸ مدل. از OpenAI، Anthropic، Google و DeepSeek — با صورتحساب تومانی و بدون کارت ارزی.
یک ماشین همیشهروشن. پولینگ باید مدام اجرا شود؛ لپتاپ خاموش یعنی ربات خاموش. یک سرور کوچک کافی است.
از توکن BotFather تا اولین جواب مدل
- [01]
توکن ربات را از BotFather بگیر. در تلگرام به @BotFather پیام بده، دستور /newbot را بفرست، یک نام و یک آیدی که به bot ختم میشود انتخاب کن. در جواب یک توکن میگیری؛ همان رشته کلید کنترل ربات توست، پس در کد ننویس و در متغیر محیطی TELEGRAM_BOT_TOKEN نگه دار.
- [02]
یک کلید 1xAi بساز. در 1xai.ir ثبتنام کن و از داشبورد یک کلید API صادر کن. همان کلید به همهٔ مدلهای OpenAI، Anthropic، Google و DeepSeek وصل میشود و هزینه از اعتبار کیف پول تومانیات کسر میشود.
- [03]
کتابخانهها را نصب کن. پایتون ۳٫۱۰ یا بالاتر لازم است. برای نسخهٔ ساده pip install requests openai و برای نسخهٔ کامل pip install python-telegram-bot openai کافی است؛ هیچ SDK اختصاصی دیگری لازم نیست.
- [04]
base_url را به 1xai.ir/v1 تغییر بده. کلاینت رسمی OpenAI را با base_url برابر https://1xai.ir/v1 و کلید 1xai خودت بساز. بقیهٔ کد دستنخورده میماند؛ مدل را فقط با نامش انتخاب میکنی و درخواست به سرویسدهندهٔ درست مسیر داده میشود.
- [05]
پیامهای تلگرام را به مدل وصل کن. هر پیام متنی که از getUpdates یا از هندلر python-telegram-bot میرسد را به chat.completions بده و متن پاسخ را با sendMessage برگردان. برای حافظهٔ گفتگو فقط چند پیام آخر هر چت را نگه دار، نه کل تاریخچه را.
- [06]
ربات را روی یک سرور همیشهروشن اجرا کن. پولینگ باید بیوقفه اجرا شود، پس ربات را روی یک سرور یا VPS با systemd یا داکر بالا نگه دار. توجه کن که فقط یک نمونه از ربات همزمان پولینگ کند، وگرنه تلگرام خطای 409 Conflict میدهد.
نسخهٔ کوتاه: ربات با requests و پولینگ
این کد کامل است و همانطور که هست اجرا میشود. دو متغیر محیطی میخواهد — TELEGRAM_BOT_TOKEN و ONEXAI_API_KEY — و هیچ فریمورک اضافهای لازم ندارد. منطقش ساده است: در یک حلقه از تلگرام آپدیت میگیرد، متن هر پیام را به مدل میدهد و جواب را برمیگرداند.
# bot.py — کوتاهترین ربات هوش مصنوعی تلگرام (long polling)
# pip install requests openai
import os
import requests
from openai import OpenAI
TG_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"] # از BotFather
TG_API = f"https://api.telegram.org/bot{TG_TOKEN}"
client = OpenAI(
base_url="https://1xai.ir/v1", # تنها تفاوت با OpenAI
api_key=os.environ["ONEXAI_API_KEY"], # کلید 1xai-... از داشبورد
)
MODEL = "gpt-4o-mini" # سریع و کمهزینه
SYSTEM = "تو یک دستیار فارسیزبان هستی. کوتاه، دقیق و بدون حاشیه جواب بده."
def ask(text: str) -> str:
resp = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": text},
],
max_tokens=400, # سقف خروجی = سقف هزینه
)
return resp.choices[0].message.content
def send(chat_id: int, text: str) -> None:
requests.post(
f"{TG_API}/sendMessage",
json={"chat_id": chat_id, "text": text},
timeout=30,
)
offset = None
while True: # long polling
r = requests.get(
f"{TG_API}/getUpdates",
params={"offset": offset, "timeout": 50},
timeout=60,
)
for update in r.json().get("result", []):
offset = update["update_id"] + 1
message = update.get("message") or {}
text = message.get("text")
if not text:
continue
chat_id = message["chat"]["id"]
if text.startswith("/start"):
send(chat_id, "سلام! سوالت را بنویس تا جواب بدهم.")
continue
try:
send(chat_id, ask(text))
except Exception as exc: # هرگز حلقه را نخوابان
print("error:", exc)
send(chat_id, "الان نتوانستم جواب بدهم. چند لحظه بعد دوباره بفرست.")نکتهٔ ریز اما مهم: مقدار offset باعث میشود هر آپدیت فقط یک بار پردازش شود؛ بدون آن ربات پیامهای قبلی را بارها جواب میدهد و بارها هزینه میگیرد. همچنین استثناها را داخل حلقه بگیر تا یک خطای موقت شبکه کل ربات را نخواباند.
با python-telegram-bot و حافظهٔ گفتگو
وقتی ربات بیش از چند کاربر پیدا کند، نسخهٔ همزمان (async) لازم میشود تا یک درخواست کند، بقیه را پشت خودش نگه ندارد. کتابخانهٔ python-telegram-bot هندلرها، دستورها و نشانگر «در حال تایپ» را آماده دارد. حافظهٔ گفتگو هم اینجا با یک deque محدود پیاده شده تا کانتکست، و در نتیجه هزینه، بینهایت رشد نکند.
# bot_ptb.py — نسخهٔ async با حافظهٔ کوتاه گفتگو
# pip install "python-telegram-bot>=21" openai
import os
from collections import defaultdict, deque
from openai import AsyncOpenAI
from telegram import Update
from telegram.constants import ChatAction
from telegram.ext import (
Application, CommandHandler, ContextTypes, MessageHandler, filters,
)
client = AsyncOpenAI(
base_url="https://1xai.ir/v1",
api_key=os.environ["ONEXAI_API_KEY"],
)
MODEL = "gpt-4o-mini"
SYSTEM = "تو دستیار فارسیزبان یک ربات تلگرام هستی. کوتاه و دقیق جواب بده."
HISTORY_TURNS = 6 # فقط ۶ دور آخر نگه داشته میشود
history: dict[int, deque] = defaultdict(lambda: deque(maxlen=HISTORY_TURNS * 2))
async def start(update: Update, _: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(
"سلام! هر سوالی داری بپرس. با /reset حافظهٔ گفتگو پاک میشود."
)
async def reset(update: Update, _: ContextTypes.DEFAULT_TYPE) -> None:
history[update.effective_chat.id].clear()
await update.message.reply_text("حافظهٔ گفتگو پاک شد.")
async def chat(update: Update, _: ContextTypes.DEFAULT_TYPE) -> None:
chat_id = update.effective_chat.id
turns = history[chat_id]
turns.append({"role": "user", "content": update.message.text})
await update.effective_chat.send_action(ChatAction.TYPING)
resp = await client.chat.completions.create(
model=MODEL,
messages=[{"role": "system", "content": SYSTEM}, *turns],
max_tokens=500,
)
answer = resp.choices[0].message.content
turns.append({"role": "assistant", "content": answer})
await update.message.reply_text(answer)
app = Application.builder().token(os.environ["TELEGRAM_BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("reset", reset))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, chat))
app.run_polling()برای عوض کردن مدل فقط مقدار MODEL را تغییر بده: نامهای claude-* به Anthropic، gemini-* به Google و بقیه به OpenAI مسیر داده میشوند. فهرست کامل در صفحهٔ مدلها است و مرجع کامل پارامترها در مستندات.
ربات را ارزان نگه دار
هزینهٔ یک ربات تلگرامی را طول پیامها و انتخاب مدل تعیین میکند، نه تعداد کاربرها بهتنهایی. پنج اهرم زیر به ترتیب اثر آمدهاند:
- [01]
مدل ارزان را پیشفرض کن. بیشتر پیامهای یک ربات تلگرامی کوتاه و روزمرهاند. مدلهای سریع مثل gpt-4o-mini یا gemini-2.5-flash چند برابر ارزانتر از پرچمدارها هستند و برای این حجم کار کافیاند؛ مدل سنگین را فقط پشت یک دستور جداگانه مثل /pro بگذار.
- [02]
max_tokens بگذار. بدون سقف خروجی، یک سوال باز میتواند جوابی چند برابر انتظارت تولید کند. سقفی از ۴۰۰ تا ۶۰۰ توکن برای پاسخ چت کاملاً کافی است و بیشترین اثر را روی قبض دارد.
- [03]
تاریخچه را کوتاه نگه دار. هزینهٔ ورودی با کل کانتکست حساب میشود، پس فرستادن تمام تاریخچهٔ یک چت در هر پیام یعنی پرداخت دوباره برای همان متن. نگه داشتن چند دور آخر (مثل کد بالا) هزینهٔ ورودی را ثابت نگه میدارد.
- [04]
پرامپت سیستمی را کوتاه بنویس. پرامپت سیستمی در هر فراخوانی دوباره فرستاده و دوباره حساب میشود. یک پاراگراف دقیق بهتر از یک صفحه دستورالعمل است.
- [05]
برای هر کاربر سقف بگذار. اگر ربات عمومی است، تعداد پیام هر کاربر در روز را در کد محدود کن. جدا از آن میتوانی برای کلید API ربات از داشبورد سقف مصرف تعیین کنی تا یک حلقهٔ خراب یا سوءاستفاده، کل کیف پول را خالی نکند.
عدد واقعی را حدس نزن. قیمت هر مدل بر پایهٔ قیمت لیست خود سرویسدهنده بهعلاوهٔ مارکآپ ثابت ۲۰٪ حساب میشود و با نرخ روز به تومان تبدیل میگردد، پس هزینهٔ تومانی هر پیام با نرخ ارز جابهجا میشود. برای تخمین درست، سه عدد را از ربات خودت بردار — تعداد پیام روزانه، میانگین توکن ورودی و میانگین توکن خروجی — و در محاسبهگر هزینه بگذار تا هزینهٔ ماهانه را با قیمت لحظهای ببینی. اگر هنوز حس نداری هر پیام چند توکن است، متن نمونهات را در شمارندهٔ توکن بچسبان.
چهار چیزی که معمولاً ربات را زمین میزند
- خطای ۴۰۹ Conflict. یعنی همزمان بیش از یک نمونه از ربات دارد پولینگ میکند. قبل از اجرای نسخهٔ جدید، نسخهٔ قبلی را حتماً ببند.
- دسترسی به api.telegram.org. این دامنه از داخل ایران پایدار نیست؛ کد ربات معمولاً روی سرور خارج اجرا میشود. فراخوانی مدل اما به 1xai.ir میرود که از داخل ایران هم بدون ویپیان در دسترس است.
- پیامهای بلندتر از حد تلگرام. سقف هر پیام حدود ۴۰۹۶ کاراکتر است؛ جوابهای طولانی مدل را قبل از ارسال تکه کن، یا با max_tokens جلوی طولانی شدنشان را بگیر.
- لو رفتن توکنها. نه توکن تلگرام و نه کلید 1xAi را داخل کد یا مخزن گیت نگذار؛ متغیر محیطی استفاده کن. اگر کلیدی لو رفت، از داشبورد باطلش کن و کلید تازه بساز.
ربات هوش مصنوعی خودِ 1xAi کی راه میافتد؟
ربات فعال است. آیدی رسمی آن @OneXAiIRBot است و فقط همین یکی به ما تعلق دارد. آن را باز کن، دستور /start را بفرست و از داشبورد حسابت را به آن وصل کن تا مصرفش از همان کیف پول تومانی کسر شود.
کانال تلگرام 1xAi چه چیزی منتشر میکند؟
آیدی انتخابشدهٔ کانال @OneXAiIR است و هنوز ساخته نشده، پس هنوز لینکی برایش نمیگذاریم. کاری که قرار است بکند مشخص است: هر مقالهٔ تازهٔ وبلاگ 1xAi خودکار آنجا اعلام میشود — عنوان، خلاصهٔ کوتاه و لینک مستقیم — تا دنبال کردن کانال جای چک کردن سایت را بگیرد. تا راهاندازی کانال، همان مقالهها در وبلاگ و در خوراک RSS سایت در دسترساند.
برای ساخت ربات تلگرام با هوش مصنوعی باید برنامهنویس حرفهای باشم؟
نه. نسخهٔ کارآمد این ربات حدود سی خط پایتون است و همان کد در این صفحه آمده. اگر بتوانی پایتون نصب کنی، یک متغیر محیطی ست کنی و یک فایل را اجرا کنی، ربات کار میکند. دانش async یا وبهوک فقط وقتی لازم میشود که بخواهی ربات را برای کاربران زیاد مقیاس بدهی.
آیا این ربات از داخل ایران بدون ویپیان کار میکند؟
دو ارتباط جدا در کار است و باید از هم تفکیکشان کرد. فراخوانی مدل به دامنهٔ 1xai.ir میرود که از داخل ایران و بدون ویپیان در دسترس است. اما خود ربات باید با api.telegram.org حرف بزند و دسترسی به آن از داخل ایران پایدار نیست؛ به همین دلیل معمولاً کد ربات را روی یک سرور خارج از ایران اجرا میکنند. پس رباتهای تلگرامی هوش مصنوعی معمولاً روی سرور خارج بالا میآیند و برای مدل به 1xAi وصل میشوند.
برای یک ربات تلگرام کدام مدل مناسبتر است؟
برای پاسخهای کوتاه و پرتکرار، مدلهای سریع و کمهزینه مثل gpt-4o-mini، gemini-2.5-flash یا claude-haiku-4-5 انتخاب منطقیترند: تأخیر کمتری دارند و در یک چت تلگرامی تفاوتشان با مدلهای سنگین چندان به چشم نمیآید. مدلهای پرچمدار را برای دستورهای پیچیدهتر نگه دار. فهرست کامل و قیمت لحظهای هر مدل در صفحهٔ مدلها است.
هزینهٔ اجرای چنین رباتی چقدر میشود؟
هزینه بر اساس مصرف واقعی توکن حساب میشود، نه اشتراک ماهانه: قیمت لیست خود سرویسدهنده بهعلاوهٔ مارکآپ ثابت ۲۰٪، تبدیلشده به تومان با نرخ روز. چون طول پیامها و انتخاب مدل تعیینکننده است، عدد دقیق را با محاسبهگر هزینه بگیر: تعداد پیام روزانه و میانگین طول ورودی و خروجی را وارد کن تا هزینهٔ تومانی ماه را ببینی. اعتبار گردونهٔ هدیهٔ ثبتنام هم در کیف پول مینشیند و میشود همان را خرج API ربات کرد.
پولینگ بهتر است یا وبهوک؟
برای شروع و برای رباتی که چند ده کاربر دارد، پولینگ کافی و سادهتر است: نه دامنه میخواهد، نه گواهی TLS. وبهوک وقتی ارزش دارد که ترافیک بالا برود یا بخواهی روی محیطهای بدون پروسهٔ همیشهروشن اجرا کنی؛ آنوقت باید یک آدرس HTTPS عمومی به تلگرام بدهی. در هر دو حالت سمت 1xAi چیزی عوض نمیشود؛ همان یک فراخوانی chat.completions است.