פיתוח בוט Telegram לניטור מטבעות קריפטוגרפיים עם התראות
כל עוד השוק רגוע, הבוט על המחירים נראה תקין: המנוי פעיל, ההודעות מגיעות, היסטוריית המחירים אחידה. הכול משתנה ברגע של תנופה — ההתראה על פריצת רמה נופלת לצ'אט כשהמחיר כבר חזר חזרה, וההחלטה מתקבלת בדיעבד ולא לפני כן. כך בקרה ידנית של מחירים ותנועות שוק שהוחמצו הופכים לנורמה, למרות שפורמלית הבוט «עובד».
מה שנשבר הוא לא שליחת ההודעה, אלא אמצע השרשרת «נתוני הבורסה — עיבוד — מסירת האות». זרם המחירים מ-Binance מפגר אם הבוט מבקש מחירים בבקשות נדירות במקום מנוי קבוע: הנר נסגר לפני שהלוגיקה רואה אותו.
לאחר ניתוק החיבור, ההתחברות מחדש לא משלימה את הנרות שהוחמצו, ובהיסטוריה נשאר פער שאף רמה לא תופעל עליו. בכמה רפליקות אותו אות נשלח לצ'אט פעמיים, ומגבלות המסנג'ר על קצב ההודעות משליכות הצידה את הדבר החשוב ביותר.
הלאה — השהיית ההתראות בתוך העיבוד. חישובים כבדים של אינדיקטורים רצים באותו תהליך שבו מתקבלים הנתונים, והתור גדל בדיוק כשהשוק הכי מהיר: האות נולד בזמן, אבל שוכב בתור עד לשליחה.
התראות מאחרות וכפולות מלמדות לסגור את ההתראות בלי לקרוא, וכלי ניטור המטבעות הקריפטוגרפיים מפסיקים לשים לב אליו.
אנחנו מפרטים כיצד זה נסגר: הפרדה בין קבלה, חישוב ומסירת התראות במסנג'ר, בקרת רעננות הנתונים, הגנה מפני כפילויות ודעיכה מובנת במקום אובדן שקט של האות.
מה משתנה לאחר ההטמעה: זמן תגובה וסוגי כשלים
הבוט אחראי לא לדיווח, אלא למעגל התגובה: הוא מעיר את התורן רק כשהאירוע באמת דורש תשומת לב. להלן ההשפעות, שכל אחת מהן נבדקת לאחר ההטמעה לפי היומן, ולא מתקבלת כמובנת מאליה.
- הזמן מהאירוע ברשת ועד להתראה מתקצר מדקות לשניות: האות נשלח מיד לאחר אישור העסקה, ולא במחזור הסקר הבא.
- שיעור ההפעלות השווא יורד פי כמה: הכללים מביאים בחשבון נפח, מספר אישורים ורשימת כתובות, ולכן אבק, כפילויות והעברות פנימיות לא מעירים את התורן.
- העומס על התורן מתנתק ממספר האירועים: אותות מאותו סוג מתאחדים לאחד, וחזרות מדוכאות לפי חלון השקט.
- זמן ההתאוששות לאחר תקלה נמדד בדקות: תור המשימות שורד הפעלה מחדש, התראות שלא נמסרו נשלחות מעצמן, בלי טיפול ידני.
- נעלם סוג כשל נפרד — אובדן אות עקב אי-זמינות הערוץ. Telegram כאן הוא רק אמצעי תעבורה: אם המסירה לא עברה, ההתראה חוזרת, ועובדת אי-המסירה נראית ביומן.
- מופיעה נראות: לפי כל כלל רואים כמה אותות הופעלו וכמה מהם היו שימושיים, ולכן הספים מכווננים לפי המצב בשטח ולא לפי העין.
גישות לאיסוף נתונים: סקר, אירועי זרם, סכימה משולבת
סכימת האיסוף קובעת שני דברים: את ההשהיה בין אירוע בשוק לבין ההתראה בצ'אט, ואת עמידות הבוט בפני ניתוקי חיבור. קיימים שני מצבי בסיס — סקר תקופתי של ממשק הבורסה ומנוי להתראות זרם; האפשרות השלישית מרכיבה אותם לסכימה משולבת.
הסקר בנוי באופן צפוי: הבוט מבקש בפרקי זמן קבועים נרות ופקודות לפי רשימת הכלים. את התדירות מגבילה הבורסה עצמה, ולכן ככל שמספר הזוגות גדל יש להגדיל את המרווח, והשהיית הנתונים גדלה יחד איתו.
במצב זרם האירועים מגיעים דרך ערוץ פתוח תמיד — מחיר או עסקה נמסרים כמעט מיד, אבל הערוץ נקרע, ואת הקטע שהוחמץ יש להשלים בבקשה נפרדת.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| סקר של ממשק הבורסה | עשרות כלים, אותות לפי סגירת נר, תנאים פשוטים | מגבלות על קצב הבקשות, ההשהיה גדלה עם מספר הזוגות, תנועות בתוך המרווח הולכות לאיבוד |
| התראות זרם | תגובה לתנועת מחיר בשניות, ספר הפקודות וסרט העסקאות | ניתוקי חיבור, נדרשים התחברות מחדש והשלמת חסרים, ניפוי שגיאות מורכב יותר |
| סכימה משולבת | כלים רבים ורגישות גבוהה של ההתראות | מורכבת יותר למימוש: יש להצליב שני מקורות ולהסיר כפילויות אירועים |
הסכימה המשולבת לוקחת זרם לאותות מהירים, ואת הסקר — לבדיקות נדירות, לשחזור חסרים ולחישובים היסטוריים. את מצב האיסוף מקבעים בשלב התכנון: לפי ההשהיה הנדרשת של ההתראה, מספר הכלים ומספר הפניות המותר לממשק הבורסה.
כיצד אנו בונים את הבוט: שלבי העבודה מהביקורת ועד למסירה
סדר העבודה זהה לכל תרחיש — התראה לפי מחיר, לפי נפח מסחר, לפי תנועת תיק. אנו יוצאים מדרישות העומס: אם סכימת הזרמים לא נבדקה מול התנהגות אמיתית של השוק, יהיה צורך לבנות אותה מחדש על בוט שכבר עובד.
שלבי העבודה
- ביקורת דרישות. מקורות המחירים, זוגות, ספי הפעלה, למי ובאיזו תדירות הבוט כותב. בפלט — רשימת אירועים וכללי הטיפול בהם, מסוכמים עם הצוות שלכם.
- סכימת איסוף ומסירה. נתיב הנתונים מקבלת הזרם ועד להודעה בצ'אט: נרמול, זיהוי האירוע, תור, שליחה. בנפרד — ההתנהגות בעת ניתוק חיבור ובמסירה חוזרת.
- הרכבה. שירות האיסוף, אחסון המנויים, מודול ההתראות. את הספים ואת תבניות ההודעות מוציאים לקונפיגורציה, כדי לשנותם בלי לתקן קוד.
- בדיקה על נתונים היסטוריים. מריצים את הכללים על ארכיון מחירים: כמה הפעלות נותן כל סף ואיזה חלק מהן הוא רעש. התראות שווא נחתכות עוד לפני היציאה למשתמשים.
- בדיקת עומס. גידול במספר המנויים, זינוק בתנודתיות, מגבלות של שירותים חיצוניים על מספר הבקשות. בודקים את ההשהיה בין האירוע להודעה ואת תור הלא-מעובדים.
- מסירה והדרכת הצוות. פריסה, תיעוד, הרשאות, תרחישי תורנות וניתוח אירועים. מראים כיצד להוסיף סוג התראה חדש ולבדוק אותו על ההיסטוריה.
בכל שלב נשאר ארטיפקט: רשימת אירועים, סכימת זרמים, קונפיגורציות, דוח בדיקות. תארו את המשימה — נחזור עם הערכה ותוכנית לפי שלבים אלה.
מה נשאר אצל הצוות: קוד, סכימות, כללי גישה ותקנות
אנו מוסרים את הפרויקט כך שניתן יהיה לפתח אותו בלעדינו: הבעלים מקבל גישה למאגר הקוד עם היסטוריית השינויים, ולא ארכיון עם הבנייה הסופית. בנוסף, ניתוח עם המהנדס שהוביל את העבודה — כדי שההקשר של ההחלטות לא יישאר רק בהתכתבות.
- קוד המקור והקונפיגורציות — מאגר עם ענפים לפי סביבות, קובצי הגדרות ורשימת משתנים עם ייעודם וערכי ברירת המחדל שלהם. סודות אינם נשמרים בקוד.
- סכימת הארכיטקטורה — כיצד האות עובר ממקור המחיר ועד להודעה בצ'אט: תור, מעבדים, אחסון הספים, נקודות כשל וההתנהגות בעת אי-זמינות הבורסה.
- כללי גישה ומפתחות — מטריצת תפקידים, סדר מתן ושלילת ההרשאות, היכן נמצאים טוקן הבוט ומפתחות הבורסות (עם הגבלת הרשאות לקריאה בלבד), וכיצד מתבצעת החלפתם המתוכננת.
- נוהל תגובה — מה לעשות אם המקור הפסיק להחזיר נתונים, החלו כפילויות או שנתקלנו במגבלת בקשות: כיצד לאבחן, באיזה סדר לפעול, ולמי מיועד האות.
- הוראות הפעלה — הפעלה, עדכון, חזרה לגרסה קודמת, היכן לראות יומנים ומטריקות, וכיצד להוסיף זוג או מקור חדשים.
- מערך בדיקות — בדיקות לחישוב הספים, לדיכוי כפילויות ולטיפול בכשלים של מקור חיצוני, כדי שתיקונים לא ישברו את ההתראות בשקט.
התיעוד מתאר לא «איך הכול בנוי בכלל», אלא פעולות קונקרטיות: מה לעשות בעת תקלה, היכן לשנות סף, כיצד לפרוס תיקון. אם בהמשך תצרפו צוות משלכם, הכניסה לפרויקט תימשך ימים ולא שבועות של חפירה בהיסטוריית הצ'אטים.
מקרה בוחן: קיצרנו את השהיית ההתראות והסרנו הפעלות שווא
הלקוח — שירות האנליטיקה CoinScope — עקב אחר התיק ידנית: אנליסט עבר אחת ל-10–15 דקות על כמה מקורות ואיחד את הזינוקות לצ'אט משותף. השהיית ההתראה נמדדה בעשרות דקות, ואותה קפיצה הגיעה מכל מקור בנפרד — על אירוע אחד הצטברו 5–6 כפילויות. בדיקת אותות לא מאומתים ארכה יותר זמן מאשר האותות האמיתיים.
את סכימת המסירה בנו מחדש: במקום מנויים ישירים לכל מקור — מלקט אירועים אחיד. הדה-דופליקציה מתבצעת לפי מפתח מורכב «נכס + סוג אירוע + חלון זמן», והפורמטים מהמקורות מנורמלים לצורה אחת.
התראות קריטיות נשלחות לתור נפרד עם אישור מסירה וחזרה בעת כשל, וההתראות המידעיות — בערוץ שקט ובדייג'סט. הוספנו בדיקת חיוּת של הזרמים והתחברות מחדש אוטומטית: ניתוק חיבור כבר לא הופך לשקט ברגע של תנועת שוק חזקה.
מה השתנה במטריקות
השהיית ההתראה ירדה מ-15–25 דקות לשניות בודדות מרגע פרסום האירוע. שיעור אותות השווא ירד מ-~60% ל-8%: חריגות קצרות-מועד וכפילויות נחתכות, ונשארות תנועות מאומתות על ידי כמה מקורות. זמינות השירות עלתה ל-99.9% בחלון רבעוני, במקום 96–97% עם נפילות תכופות.
זמן התגובה של התורן התקצר מעשרים דקות ומעלה ל-2–4: ההודעה כבר כוללת הקשר — מה קרה, עד כמה זה משמעותי ומתי. התורן חדל להיות מסנן רעש ושב לעסוק בהחלטות.
במה נבדל טריגר פשוט ממערכת התראות?
טריגר סף הוא תנאי אחד: המחיר חצה רמה, הבוט שלח הודעה. הוא עונה רק על השאלה «הרמה נפרצה» ואינו יודע דבר על ההקשר: כמה פעמים זה קרה בשעה האחרונה, האם ההודעה הגיעה לנמען, והאם להפעלה יש אישור.
בשוק תנודתי זה לא מספיק. בזמן שהמחיר מתנדנד סביב הרמה, לצ'אט נשלחות עשרות התראות זהות, וכאשר המסירה נכשלת לא מגיעה אף אחת. הנמען מפסיק לקרוא את הפיד ומפספס בדיוק את ההפעלה שלשמה הבוט הותקן מלכתחילה.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| טריגר סף בודד | זוג אחד, נמען אחד, הרמות נשלטות ידנית | כפילויות בתנודה סביב הרמה, אין היסטוריה ואין ערוץ גיבוי |
| איגוד אירועים ועדיפויות | כמה כלים, צריך להבין מה חשוב יותר כעת | הסיכום מגיע בהשהיה עד סוף החלון |
| אנטי-רטט, הסלמה, יומן אירועים | נמענים רבים, הפעלות קריטיות, ניתוח אירועים | מורכבות הגדרה ותמיכה גבוהה יותר |
הגישה המערכתית מוסיפה ארבעה דברים. איגוד אירועים מקבץ הפעלות סמוכות להודעה אחת, אנטי-רטט מונע חזרה על התראה לפני מרווח או סטיית מחיר מוגדרים, עדיפויות והסלמה מעלות הפעלה חשובה במעלה שרשרת הנמענים, ויומן האירועים שומר מה נשלח ומתי.
טריגר פשוט מספיק כל עוד הזוג אחד, הנמען אחד וההחלטות מתקבלות ידנית. ברגע שהכלים מתרבים, ועל אות אחד עובד צוות, ההבדל בין «כותב» ל«מביא לידיעה» הופך לקריטי.
ספקות טכניים: מגבלות, אמינות והגנת גישה
הספקות ההנדסיים לגבי בוט כזה הם כמעט תמיד אותם: סערת אותות, כשל בערוץ המסירה, מפתחות וסקריפט ניטור שכבר נכתב. להלן תשובות קצרות, ופרטי הקונפיגורציה ננתח בתרחיש שלכם.
הבוט ייתקל במגבלות הבקשות — ההתראות יתחילו להיעלם?
לא. ההודעות היוצאות נכנסות לתור בהתחשב במגבלות של Telegram: כ-30 שליחות בשנייה בסך הכול ולא יותר מ-20 בדקה לצ'אט אחד. בעת חריגה הבקשה לא נופלת, אלא עוברת לתור מושהה עם השהיה הולכת וגדלה — המשתמש רואה השהיה של שניות, ולא אות אבוד.
מה יקרה אם ערוץ המסירה אינו זמין?
ההתראה נחשבת נמסרה רק לאחר אישור. אם אין אישור לאחר מספר נסיונות מוגדר, אותו מטען שימושי נשלח בערוץ גיבוי — בוט שני, וובהוק או דואר. דה-דופליקציה לפי מזהה האות מונעת התראה כפולה כאשר הנתיב הראשי מתאושש.
כיצד מוגנים מפתחות הגישה לבורסות?
המפתחות נשמרים במאגר סודות ומוזרקים רק ברגע חתימת הבקשה — הם אינם נכנסים לקונפיגורציה, ליומנים או למאגר הקוד. מומלץ מפתח עם הרשאות קריאה בלבד, בלי משיכת כספים, עם החלפה מתוכננת. הגישה לפאנל השירות חסומה ברשימת כתובות מורשות ובגורם שני.
יש לנו כבר סקריפט ניטור משלנו — אפשר להשתמש בו?
כן. את חישוב האותות מוציאים לשכבה נפרדת ומחברים אליה את שכבת המסירה, והלוגיקה של האינדיקטורים שלכם נשארת כפי שהיא. אם הסקריפט נכתב כפתרון חד-פעמי, לעיתים קרובות זול יותר לבנות את החישוב מחדש מאשר לגרור תלויות סמויות.
כיצד לכוונן ספים כדי שלא יהיה זרם התראות אחידות?
הסף מתואר בכלל: תנאי, חלון מיצוע, סטייה מזערית והשהיה לאחר ההפעלה. זה מסיר את הרטט על גבול הערך והופך את זרם ההודעות להתראה משמעותית אחת.
ספרו לנו על המשימה — נחזור עם הערכה ותוכנית הטמעה
כדי שההערכה תהיה עניינית ולא «לפי העין», די בנתוני הפתיחה — מהם מורכבים היקף העבודה, לוחות הזמנים של השלבים וקריטריוני הקבלה.
- מה אנחנו מנטרים: רשימת זוגות המסחר ומקורות המחיר, אירועי טריגר — שינוי מחיר באחוז מוגדר לאורך מרווח, פריצת רמה, זינוק בנפח, תקלה במצב הרשת.
- לאן ולמי אנו מוסרים את האות: צ'אט אחד או עשרות נמענים, הודעות אישיות לעומת ערוץ משותף, האם נדרשת העברת אותות למערכת חיצונית וחזרה במקרה של שליחה כושלת.
- ספים והגנה מרעש: באיזו תדירות מותר לכתוב, מה לעשות בסדרה של הפעלות רצופות, והאם נדרש קיבוץ של כמה אירועים להודעה אחת.
- הרשאות והפרדה: מי מגדיר את הבוט, היכן נשמר המפתח, מהן הרשאות השירות, והאם יש להפריד רשימות נמענים לפי קבוצות.
- קריטריוני קבלה: ההשהיה מהאירוע להודעה, ההתנהגות בעת אי-זמינות מקור המחיר, היעדר כפילויות, יומן של אותות שנמסרו ושל אלה שנדחו.
- שלבים ועדיפויות: מה חייב לעבוד בגרסה הראשונה, ומה ניתן לדחות לסיבוב השני.
בהמשך אנו פורסים זאת לתוכנית עבודה עם לוחות זמנים לפי שלבים: איסוף נתונים, מסננים וספים, מסירה, נראות, והרצה על נתונים היסטוריים לפני היציאה לפעולה. תארו את המשימה בצורה חופשית — נחזור עם הערכה, היקף העבודה ותוכנית ההטמעה.







