RU EN HE
אודות פרויקטים בלוג
← חזרה לבלוג
אוטומציה ואינטגרציה ב-Python

שילוב בוטים של Telegram עם תורי משימות: aiogram + RQ + Valkey

מבוא

בוטים של Telegram הם כלי רב-עוצמה לאוטומציה של תהליכי עבודה. עם זאת, עיבוד משימות כבדות ישירות במטפלי הבוט חוסם את לולאת האירועים ומוביל לעיכובים בתגובות. הפתרון הוא להפריד את הבוט האסינכרוני (aiogram) מעובדי הרקע (RQ + Valkey).

ארכיטקטורת המערכת

מחזור עיבוד הבקשה המלא עובד כך: משתמש שולח הודעה → הבוט מקבל אותה דרך aiogram → הבוט שם משימה בתור RQ דרך Valkey → עובד RQ מעבד את המשימה → העובד שולח את התוצאה בחזרה דרך Telegram API, מקושר להודעה המקורית.

הבוט: קבלה והכנסה לתור

הבוט מקבל הודעות דרך aiogram ומכניס משימות לתור RQ. התגובה המיידית מאשרת את קבלת הבקשה, והעיבוד בפועל מתבצע ברקע על ידי העובד.

העובד: עיבוד ותגובה

העובד מעבד את המשימה ושולח את התוצאה בחזרה דרך Telegram API. פונקציית העזר _run_async_task מאפשרת להריץ קוד אסינכרוני מתוך עובד RQ סינכרוני.

ValkeyPersistence לאחסון מצב

למעקב אחר סטטוס משימות, אנחנו משתמשים ב-Valkey (תואם Redis). FinishedJobRegistry מאפשר לבוט לבדוק מעת לעת משימות שהושלמו ולהודיע למשתמשים על תוצאות.

reply_to_message_id לשרשורים

פרט חשוב הוא שמירת ה-message_id המקורי והעברתו ל-reply_to_message_id בעת התגובה. זה יוצר שרשור טבעי בצ’אט ועוזר למשתמש לקשר את התגובה לבקשה שלו.

קונטיינריזציה

הבוט והעובדים רצים בקונטיינרים נפרדים בתוך פוד Podman יחיד. Valkey גם רץ בפוד, מספק תקשורת דרך localhost.

סיכום

הפרדת בוט Telegram לפרונטאנד (aiogram) ובקאנד (עובדי RQ) מבטיחה תגובתיות של הבוט וסקלביליות עיבוד. Valkey משמש גם כמתווך הודעות וגם כמאגר מצב.