شروع
مهاجرت از تلگرام به یونیوم
چطور یک بات، webhook یا workflow تلگرامی را با کمترین تغییر و با همان SDKها روی یونیوم اجرا کنید.
اصل مهاجرت
اگر کد، bot یا workflow شما بر اساس Telegram Bot API نوشته شده و امکان تغییر base URL را دارد، در بیشتر سناریوهای رایج برای مهاجرت به یونیوم لازم نیست منطق اصلی را بازنویسی کنید. APIهای یونیوم عمداً منطبق بر APIهای تلگرام طراحی شدهاند و برای الگوهای متداول عملاً 1:1 compatible هستند:
- همان نام متدها مثل
sendMessage،getUpdatesوsetWebhook - همان wrapper پاسخ با
okوresult - همان الگوی polling و webhook
- همان SDKها و automationهایی که فقط به token و base URL وابستهاند
آنچه عوض میشود، خود token و endpoint است.
آنچه دقیقاً عوض میشود
| در تلگرام | در یونیوم |
|---|---|
Bot token از @BotFather |
API key ساختهشده در پنل یونیوم |
https://api.telegram.org/bot<TOKEN> |
https://api.uniom.ir/bot<API_KEY> |
https://api.telegram.org/file/bot<TOKEN> |
https://api.uniom.ir/file/bot<API_KEY> |
| بات فقط روی تلگرام | یک credential متصلشده روی تلگرام، بله، ایتا، سروشپلاس، روبیکا یا سایر پلتفرمهای پشتیبانیشده |
در یونیوم، همان API key نقش bot token را در کتابخانه یا workflow شما بازی میکند.
مراحل مهاجرت
- در پنل یونیوم وارد شوید.
- حساب پیامرسان مقصد را از بخش حسابها متصل کنید.
- از بخش کلیدهای API یک API key بسازید.
- در کد یا workflow فعلی، token را با API key یونیوم جایگزین کنید.
- base URL را به
https://api.uniom.ir/botتغییر دهید. - اگر فایل دانلود میکنید، base file URL را به
https://api.uniom.ir/file/botتغییر دهید. - با
getMeیاsendMessageاولین تست را بگیرید.
تفاوت با الگوی مستقیم بله
اگر قبلاً مستندات بله را دیده باشید، الگوی آن شبیه این است که bot token را از @BotFather بگیرید و endpoint را به https://tapi.bale.ai تغییر دهید تا از همان کتابخانههای تلگرامی استفاده کنید.
در یونیوم، همان ایده را یک لایه بالاتر میبرید:
- بهجای token مستقیم یک پلتفرم، از API key یونیوم استفاده میکنید.
- بهجای endpoint اختصاصی یک پلتفرم، از
https://api.uniom.ir/botاستفاده میکنید. - همان منطق برنامه را برای چند پیامرسان نگه میدارید، نه فقط یک مقصد.
مثل همان هشدار رایج در مهاجرتهای منطبق بر تلگرام، پشتیبانی نهایی هر متد به credential و پلتفرم مقصد بستگی دارد. قبل از rollout روی متدهای حساس مثل فایل، ویرایش پیام، مدیریت گروه یا webhook، روی همان پلتفرم واقعی تست بگیرید.
ساخت API key یونیوم
بعد از اتصال credential، یک API key بسازید و آن را مثل secret نگه دارید. این مقدار در کد شما دقیقاً جای token فعلی مینشیند:
https://api.uniom.ir/bot<API_KEY>/METHOD_NAME
اگر workflow داخلی، cron job یا integration مدیریتی هم دارید، میتوانید برای مسیرهای غیر Bot API از PAT یا JWT استفاده کنید؛ اما برای متدهای /bot... همان API key کافی است.
نمونه با python-telegram-bot
نمونه زیر یک ربات ساده python-telegram-bot را بدون تغییر در منطق handlerها روی یونیوم اجرا میکند:
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, MessageHandler, filters
API_KEY = "<UNIOM_API_KEY>"
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
if update.message:
await update.message.reply_text("سلام، این ربات از طریق یونیوم اجرا میشود.")
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
if update.message and update.message.text:
await update.message.reply_text(f"دریافت شد: {update.message.text}")
application = (
ApplicationBuilder()
.token(API_KEY)
.base_url("https://api.uniom.ir/bot")
.base_file_url("https://api.uniom.ir/file/bot")
.build()
)
application.add_handler(CommandHandler("start", start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
application.run_polling()
اگر قبلاً همین پروژه را برای تلگرام داشتهاید، handlerها، CommandHandler و MessageHandler همان میمانند. فقط token و base URL عوض میشوند.

مهاجرت با n8n
برای workflowهای n8n دو مسیر رایج دارید:
- اگر node شما endpoint سفارشی میپذیرد، token را با API key یونیوم و base URL را با
https://api.uniom.ir/botجایگزین کنید. - اگر node این امکان را نمیدهد، از
HTTP Requestاستفاده کنید و همان payload قبلی را مستقیم به یونیوم بفرستید.
نمونه تنظیم برای sendMessage:
| گزینه | مقدار |
|---|---|
| Method | POST |
| URL | https://api.uniom.ir/bot<API_KEY>/sendMessage |
| Body Content Type | JSON |
| Body | {"chat_id":"@username","text":"پیام از n8n"} |
اگر workflow شما قبلاً برای تلگرام آماده است و payload را خودش میسازد، معمولاً فقط همین سه چیز عوض میشوند: token، base URL و در صورت نیاز مسیر فایل.
webhook و polling بدون بازنویسی
اگر در تلگرام از webhook استفاده میکردید:
https://api.telegram.org/bot<TOKEN>/setWebhook
در یونیوم همان منطق را با این endpoint ادامه میدهید:
https://api.uniom.ir/bot<API_KEY>/setWebhook
برای polling هم همین قاعده برقرار است:
https://api.uniom.ir/bot<API_KEY>/getUpdates
offset، limit، timeout و allowed_updates همان رفتار قبلی را نگه میدارند.
چکلیست قبل از production
getMeوsendMessageرا با API key نهایی تست کنید.- اگر فایل دارید،
getFileو مسیر/file/bot<API_KEY>/...را هم تست کنید. - اگر از webhook استفاده میکنید،
getWebhookInfoرا بعد از ثبت webhook ببینید. chat_idهای production را از updateهای واقعی ذخیره کنید و فقط به resolve با username یا شماره وابسته نمانید.- برای متدهای پلتفرممحور، قبل از rollout روی همان credential مقصد تست بگیرید.