מדריך · תהליכים

איך לבנות אוטומציה לדיסקורד בלי קוד (תהליכים + Google Sheets)

בונים אוטומציות לשרת דיסקורד בעורך ויזואלי: רישום חברים חדשים ב-Google Sheets, מענה אוטומטי למילות מפתח ופוסטים מתוזמנים, צעד אחר צעד.

תהליכיםתזכורותהודעות ברוכים הבאים

בעמוד הזה

ברוב השרתים ״אוטומציה״ זה אוסף של בוטים שכל אחד עושה דבר אחד, ולכל אחד לוח בקרה משלו. תהליכים מאפשרים לבנות אוטומציה לדיסקורד בלי קוד בעורך ויזואלי אחד: בוחרים טריגר (חבר הצטרף, הגיעה הודעה, הגיע זמן מתוזמן), מוסיפים לוגיקה (אם, מתג, סינון, לולאה) ומשרשרים פעולות (שליחת הודעה, מתן תפקיד, כתיבה ל-Google Sheets, קריאה ל-API). במדריך נסביר את אבני הבניין ונעבור על שלושה תהליכים אמיתיים שאפשר להעתיק.

מה צריך

  • BotGG בשרת (https://discord.com/oauth2/authorize?client_id=1553367772451446804&scope=bot%20applications.commands&permissions=282969912110295) והרשאת ניהול שרת.
  • קונסולת הווב https://console.botgg.app ← השרת שלכם ← תהליכים. לתהליכים אין פקודות סלאש — הכול נבנה בקונסולה.
  • לדוגמה של Google Sheets: חשבון Google וכמה דקות ב-Google Cloud. הצמתים Google Sheets ו-MySQL, וגם טריגר ה-Webhook, הם חלק מ-Pro. טריגרים של דיסקורד, לוגיקה, פעולות בדיסקורד, תזמון ובקשות HTTP עובדים בתוכנית החינמית (5 תהליכים).

אבני הבניין

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

קבוצהצמתים
טריגריםחבר הצטרף, חבר עזב, הודעה חדשה, נוספה תגובה, התפקידים השתנו, פעילות קולית, לחיצה על כפתור, תזמון, Webhook, הפעלה ידנית
לוגיקהאם (כן/לא), מתג (כמה מסלולים + ״אחרת״), סינון (עוצר כשהתנאי לא מתקיים), לולאה, המתנה, עצירה
נתוניםהגדרת שדות, תאריך ושעה, טקסט (תבניות, regex), JSON
פעולות בדיסקורדשליחת הודעה (עם בונה embed וכפתורים), הודעה פרטית, תגובה להודעה, הוספת תגובה, הוספת/הסרת תפקיד, השתקה זמנית, הרחקת חבר, חסימת משתמש, יצירת שרשור, עריכת ערוץ, שליפת חבר
אינטגרציותבקשת HTTP, Google Sheets, MySQL

ביטויים: הכנסת נתונים עם {{ }}

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

  • {{ $trigger.user.username }} — נתונים מהטריגר (כאן: מי הצטרף).
  • {{ $trigger.message.content | lower }} — טקסט ההודעה באותיות קטנות, דרך פילטר.
  • {{ $node["Google Sheets"].updatedRows }} — הפלט של צומת קודם, לפי השם שלו.
  • {{ $now | date('DD/MM/YYYY HH:mm', 'Asia/Jerusalem') }} — השעה הנוכחית באזור זמן מסוים (בלי אזור — UTC).
  • {{ $guild.name }}, {{ $vars.counter }}, {{ $json.field }} — השרת, משתני התהליך, הפריט הנוכחי.

פילטרים משורשרים עם |: upper, lower, trim, default('none'), replace(a,b), split, join, round(2), date(format) ועוד. אין כאן הרצת קוד — ביטויים רק קוראים נתונים, וההשוואות נעשות בצמתי אם, סינון ומתג.

דוגמה 1: רישום חברים חדשים ב-Google Sheets

רשימת חברים עם תאריכי הצטרפות שאפשר למיין, לסנן ולשתף עם הצוות.

1. יוצרים חשבון שירות ב-Google Cloud. בקונסולה של Google Cloud צרו (או בחרו) פרויקט, הפעילו את Google Sheets API, ואז IAM & Admin ← Service accounts ← צרו חשבון. פתחו אותו ← Keys ← Add key ← JSON. יירד קובץ עם מפתח JSON.

2. מוסיפים את פרטי הגישה ב-BotGG. בתהליכים פתחו פרטי גישה ← פרטי גישה חדשים, בחרו חשבון שירות של Google והדביקו את כל מפתח ה-JSON. לחצו שמירה ובדיקה. המפתח נשמר מוצפן ולא מוצג שוב בדפדפן.

3. משתפים את הגיליון. צרו גיליון Google Sheets ושתפו אותו (עורך) עם המייל של חשבון השירות — הערך client_email מתוך ה-JSON, שמסתיים ב-iam.gserviceaccount.com. זה השלב שכולם שוכחים.

4. בונים את התהליך. צרו תהליך חדש (או התחילו מהתבנית תיעוד הודעות ב-Google Sheets והחליפו את הטריגר):

  1. טריגר: חבר הצטרף, עם ״התעלמות מבוטים״ מופעל.
  2. פעולה: Google Sheets ← פעולה הוספת שורה, קישור לגיליון, שם הלשונית Sheet1, מצב ערכים מיפוי לעמודות.
  3. ממפים עמודות (כותרת ← ערך): - Username ← {{ $trigger.user.username }} - User ID ← {{ $trigger.user.id }} - Joined ← {{ $now | date('DD/MM/YYYY HH:mm', 'Asia/Jerusalem') }} - Account created ← {{ $trigger.user.createdAt | date('DD/MM/YYYY') }}

שמות העמודות מושווים לשורת הכותרות בלי תלות ברישיות; אם הגיליון ריק, ההוספה הראשונה כותבת את שורת הכותרות בעצמה. לחצו בדיקה כדי להריץ עם נתוני דוגמה, בדקו שנוספה שורה, ואז הפעילו את התהליך ושמרו.

רוצים לתעד גם עזיבות? שכפלו את התהליך, החליפו את הטריגר לחבר עזב והשתמשו בעדכון שורות עם עמודת חיפוש User ID, כדי למלא עמודת ״עזב״ במקום להוסיף שורה.

דוגמה 2: מענה אוטומטי למילת מפתח בערוץ עזרה

עונים על אותה שאלה בפעם המאה — בלי להקליד אותה.

  1. טריגר: הודעה חדשה, ערוץ #עזרה, ״התעלמות מבוטים״ מופעל, התאמה מכיל, תבנית כתובת השרת.
  2. פעולה: תגובה להודעה עם התשובה — למשל היי {{ $trigger.user.displayName }}, הכתובת היא play.example.net והחוקים ב-#חוקים.

צריכים כמה תשובות? השאירו את הטריגר על כל הודעה והוסיפו צומת מתג עם הערך {{ $trigger.message.content | lower }}. הוסיפו מסלולים כמו מכיל כתובת, מכיל הרשמה, מכיל חוקים, כל אחד מחובר לצומת תגובה להודעה משלו, והשאירו את אחרת לא מחובר — כך שאר ההודעות פשוט לא מקבלות מענה. כדי לא לענות לצוות, שימו סינון לפני המתג: {{ $trigger.member.roles }} לא מכיל את המזהה של תפקיד הצוות.

דוגמה 3: הודעה שבועית מתוזמנת

  1. טריגר: תזמון ← סוג ביטוי cron: 0 18 * * 5 (בכל יום שישי ב-18:00). התזמון עובד לפי אזור הזמן של השרת מהגדרות הקונסולה, והעורך מציג את הריצות הקרובות כדי שתוכלו לוודא.
  2. אופציונלי: בקשת HTTP (GET) ל-API ציבורי — למשל נקודת הסטטוס של שרת המשחק שלכם — ואז {{ $node["בקשת HTTP"].body.players }} בתוך ההודעה.
  3. פעולה: שליחת הודעה ל-#הכרזות עם בונה ה-embed: כותרת ערב ריידים בסופ״ש, תיאור ההרשמה לריידים של {{ $now | date('DD/MM') }} פתוחה. — ואפשר גם כפתור, אם לחיצה צריכה להפעיל תהליך אחר דרך הטריגר לחיצה על כפתור.

לתזכורות פשוטות ולהכרזות קבועות בלי לוגיקה, תזכורות מהירות יותר; תהליכים מתאימים כשהפוסט צריך נתונים, תנאים או פעולות המשך.

המלצות עבודה

טיפלמה
תנו לצמתים שמות ברורים (״רישום הצטרפות״, ״מענה בעזרה״)ביטויים מפנים לצמתים לפי השם
בבדיקה הראשונה השביתו את צמתי הפעולה בדיסקורדריצת בדיקה באמת שולחת הודעות ומשנה תפקידים
הפעילו ״להמשיך בשגיאה״ או ניסיונות חוזרים בצמתי HTTP ו-SheetsAPI איטי לא יפיל את כל התהליך
שימו סינון כמה שיותר מוקדםהתהליך נעצר לפני עבודה מיותרת
בדקו את לשונית ריצות אחרי שינוייםבכל ריצה רואים את הקלט, הפלט והשגיאות של כל צומת

פתרון בעיות

  • התהליך לא רץ. צריך שגם התהליך וגם הפיצ׳ר תהליכים יהיו מופעלים. שינויים שנשמרו מגיעים לטריגרים של דיסקורד תוך כדקה.
  • מילות מפתח לא נתפסות. השוואת טקסט תלויה בגישה של הבוט לתוכן ההודעות (Message Content); בלעדיה הטקסט מגיע ריק.
  • Google Sheets מחזיר 403 או ״לא נמצא״. הגיליון לא שותף עם המייל של חשבון השירות, או ש-Google Sheets API לא הופעל בפרויקט ב-Google Cloud.
  • השעות זזות בכמה שעות. הפילטר date מפרמט ב-UTC אם לא מעבירים אזור זמן כארגומנט שני: date('HH:mm', 'Asia/Jerusalem').
  • ״הוספת תפקיד״ נכשלת. התפקיד של BotGG חייב להיות מעל התפקיד שהוא נותן, והפעולות עובדות רק על ערוצים, תפקידים וחברים של השרת הזה.
  • התהליך מגיב להודעות של עצמו? לא — ההודעות והתגובות של BotGG עצמו אף פעם לא מפעילות תהליכים, כך שאין סכנה ללולאה אינסופית בטעות.

כשהתהליכים רצים, הציצו בהודעות ברוכים הבאים ובמדריך האימות — פיצ׳רים מוכנים שלא צריך לבנות מחדש — ובכל השאר ברשימת הפקודות.

שאלות נפוצות

תהליכים זה כמו Zapier או n8n לדיסקורד?

ברוח דומה: קנבס ויזואלי עם טריגרים, לוגיקה ופעולות. אבל הוא בנוי בתוך בוט לדיסקורד, כך שאירועים ופעולות בדיסקורד עובדים בלי webhooks ובלי מפתחות API.

צריך לדעת לתכנת?

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

אפשר לכתוב ל-Google Sheets בתוכנית החינמית?

הצמתים Google Sheets ו-MySQL וטריגר ה-Webhook הם פיצ׳רים של Pro. פעולות בדיסקורד, לוגיקה, תזמון ובקשות HTTP חינמיים. פרטים בעמוד המחירים.

אפשר לשלוח נתונים מאתר או מטופס לדיסקורד?

כן, עם טריגר Webhook (Pro): לכל תהליך יש כתובת URL סודית משלו, וכל מה ששולחים אליה ב-POST זמין בתור {{ $trigger.body }}.

מוכנים לשדרג את השרת?

מוסיפים את BotGG בחינם ומפעילים יכולות בקונסולת הווב.