דלגו לתוכן

הגדרת אינטגרציית Slack

המדריך הזה מראה לכם איך לחבר את Slack לסביבת עבודה של Control Center, בין אם לתת ל-Control Center ליצור את האפליקציה ובין אם לבנות אותה בעצמכם.

להרצה ראשונה מודרכת, ראו חברו את Slack לסביבת העבודה.

  • התפקיד owner או admin בסביבת העבודה ב-Control Center — חיבור אפליקציית צ’אט הוא שינוי בהגדרות סביבת העבודה
  • הרשאה ליצור ולהתקין אפליקציות בסביבת העבודה ב-Slack
  • שום דבר נגיש לציבור: החיבור יוצא החוצה (Socket Mode), ולכן השרת אינו זקוק לפורט נכנס, למנהרה או לדומיין

שלוש דרכים להשיג את האפליקציה

קטע בשם “שלוש דרכים להשיג את האפליקציה”
מסלול אתם מספקים Control Center עושה
מודרך אסימון גישה של תצורת האפליקציה (xoxe-…) יוצר את האפליקציה עם ההיקפים, האירועים, ה-Socket Mode ופקודת הסלאש הנכונים; ומעביר לכם את שני השלבים שאין להם API ב-Slack
יצירה ב-Slack כלום פותח את Slack עם אותה תצורה ממולאת מראש; אתם בוחרים סביבת עבודה ומאשרים
ביד האסימונים של האפליקציה המוגמרת מאמת אותם ומתחבר

המסלול המודרך הוא היחיד שמשאיר את האפליקציה גם ניתנת לניהול מ-Control Center, וזה מה שמאפשר את התאמת בוט הצ’אט. אפליקציה שנוצרה ביצירה ב-Slack יכולה להתקדם בהמשך לאפליקציה מנוהלת על ידי הדבקת אסימון תצורה בדיאלוג החיבור.

בכוונה אין כפתור “התקינו את אפליקציית ה-Slack של Control Center”. התקנה של אפליקציית Slack מופצת דורשת סוד לקוח משותף (ל-Slack אין PKCE), וה-Socket Mode מפזר את האירועים של אפליקציה באקראי בין החיבורים שלה — כך שאפליקציה משותפת אחת הייתה מעבירה את ההודעות של סביבת העבודה שלכם לשרתים של אנשים אחרים. לכן כל סביבת עבודה מחזיקה אפליקציה משלה, ושלושת המסלולים האלה עוסקים בכמה מעט עבודה זה עולה לכם.

אפשרות א׳: לתת ל-Control Center ליצור את האפליקציה

קטע בשם “אפשרות א׳: לתת ל-Control Center ליצור את האפליקציה”
  1. הפיקו זוג אסימוני תצורה לאפליקציה ב-api.slack.com/apps והעתיקו את אסימון הרענון (xoxe-…)
  2. ב-Control Center, עברו אל הגדרות ← סביבת עבודה ← כללי וגללו אל הכרטיס גשרי צ’אט
  3. בחסימת Slack, לחצו על יצירת האפליקציה עבורי
  4. הדביקו את האסימון, עדכנו את שם האפליקציה, שם הבוט, התיאורים ופקודת הסלאש, ואז לחצו על יצירת אפליקציה
  5. השלימו את שני השלבים שנותרו, שכל אחד מהם מוצג בדיאלוג כקישור אל Slack:
    • Basic Information → App-Level Tokens: הפיקו אסימון עם ההיקף connections:write (xapp-…)
    • Install App: התקינו בסביבת העבודה והעתיקו את Bot User OAuth Token (xoxb-…)
  6. לחצו על הדבקת פרטי הגישה והמשיכו אל חיבור

אסימון התצורה מתחלף בכל שימוש. Control Center שומר את הערך המוחלף תוך כדי, כך שלעולם לא תצטרכו להדביק אותו שוב.

אפשרות ב׳: ליצור אותה ב-Slack, ממולאת מראש

קטע בשם “אפשרות ב׳: ליצור אותה ב-Slack, ממולאת מראש”

אותה אפליקציה, בלי אסימון תצורה — Slack מציג לכם את מסך היצירה שלו עצמו עם כל ה-manifest כבר ממולא.

  1. ב-Control Center, עברו אל הגדרות ← סביבת עבודה ← כללי וגללו אל הכרטיס גשרי צ’אט
  2. בחסימת Slack, לחצו על יצירת האפליקציה עבורי
  3. עדכנו את שם האפליקציה, שם הבוט, התיאורים ופקודת הסלאש — אלה עוברים יחד עם הקישור
  4. לחצו על יצירה ב-Slack. הדפדפן שלכם פותח את עמוד יצירת האפליקציה של Slack עם התצורה ממולאת מראש
  5. בחרו את סביבת העבודה ב-Slack ואשרו. ההיקפים, האירועים, ה-Socket Mode ופקודת הסלאש כבר נכונים
  6. חזרה ב-Control Center, השלימו את שני השלבים שנותרו שמוצגים בדיאלוג:
    • Basic Information → App-Level Tokens: הפיקו אסימון עם ההיקף connections:write (xapp-…)
    • Install App: התקינו בסביבת העבודה והעתיקו את Bot User OAuth Token (xoxb-…)
  7. לחצו על הדבקת פרטי הגישה והמשיכו אל חיבור

Slack אינו מדווח איזו אפליקציה הוא יצר, ולכן Control Center אינו לומד את מזהה האפליקציה והקישורים בשלב 6 מובילים לרשימת האפליקציות שלכם ולא ישירות אל אותה אפליקציה. התאמת הבוט דורשת אסימון תצורה.

אפשרות ג׳: לבנות את האפליקציה בעצמכם

קטע בשם “אפשרות ג׳: לבנות את האפליקציה בעצמכם”

צרו אפליקציה ב-api.slack.com/apps, ואז הגדירו אותה כך.

Socket Mode: הפעילו אותו והשאירו כל כתובת URL של בקשה ריקה. Slack דוחה manifest שמבקש גם Socket Mode וגם מסירה ב-webhook.

היקפי אסימון הבוט (OAuth & Permissions):

app_mentions:read
assistant:write
channels:history
chat:write
commands
groups:history
im:history
users:read
users:read.email

מינויי אירועים (אירועי בוט):

app_home_opened
app_mention
message.channels
message.groups
message.im

message.channels ו-message.groups הם מה שמאפשר ל_תשובה_ בתוך שרשור Slack שכבר מגושר לעבוד. בלעדיהם, רק האזכור הראשון מגיע.

פקודת סלאש: /cc (כל שם יעבוד — הגשר משתמש בפקודה שאיתה הופעל לאחרונה).

App Home: הפעילו את לשונית ההודעות והשאירו אותה ניתנת לכתיבה, כדי שחברים יוכלו לשלוח הודעה ישירה לבוט.

אסימונים: הפיקו אסימון ברמת האפליקציה עם connections:write, ואז התקינו את האפליקציה והעתיקו את אסימון ה-OAuth של משתמש הבוט.

  1. עברו אל הגדרות ← סביבת עבודה ← כללי וגללו אל הכרטיס גשרי צ’אט
  2. בחסימת Slack, לחצו על חיבור Slack
  3. מלאו את השדות:
שדה ערך היכן הוא נמצא ב-Slack
אסימון OAuth של משתמש הבוט xoxb-… OAuth & Permissions → Bot User OAuth Token
אסימון גישה ברמת האפליקציה xapp-… Basic Information → App-Level Tokens (connections:write)
אסימון רענון של תצורת האפליקציה (אופציונלי) xoxe-… זוג אסימוני התצורה של האפליקציה ב-api.slack.com/apps

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

  1. לחצו על התחברות

Control Center מאמת את אסימון הבוט עם auth.test של Slack לפני שהוא שומר משהו, כך ששגיאת הקלדה מדווחת לכם במקום להפוך ל-socket שפשוט לא עובד בשקט. את האסימון ברמת האפליקציה אפשר להוכיח רק בפתיחת ה-socket, ולכן אסימון שגוי מופיע רגע לאחר מכן כשגיאת חיבור על אותה שורה.

בלי אסימון הרענון של תצורת האפליקציה (האופציונלי), החיבור עובד מצוין — רק לא תוכלו לערוך את הבוט מ-Control Center.

  • שומר את פרטי הגישה בתיקייה של סביבת העבודה עצמה, לצד מסד הנתונים שלה, בקריאה של הבעלים בלבד. הם לעולם אינם נוסעים חזרה אל לקוח
  • פותח חיבור Socket Mode אחד עבור סביבת העבודה הזו ומתחיל לקבל אזכורים, תשובות בשרשור Slack, הודעות ישירות ופקודות קו נטוי
  • מחמש מחדש כל שרשור Slack שגושר קודם, כך שחיבור מחדש ממשיך שיחות קיימות במקום לנטוש אותן
  • לא עולה דבר עבור סביבות עבודה בלי אפליקציית צ’אט: אין socket, אין טיימרים, אין תעבורה

שורת ה-Slack מציגה תג מצב: פעיל, מתחבר…, שגיאת חיבור (כשהשגיאה של Slack עצמו מוצגת לצידו), או לא מחובר. כדי לבדוק מקצה לקצה:

  1. ב-Slack, הזמינו את הבוט לערוץ: /invite @your-bot-name
  2. אזכרו אותו עם בקשה
  3. תשובה מופיעה בשרשור ב-Slack ומרחב תואם מופיע ב-Control Center

כל חבר שרוצה להשתמש בגשר מקשר אחר כך את החשבון שלו — ראו קישור חשבון Slack.

מעל המילים המוזרמות יושב כרטיס מקובץ אחד, עם שורה לכל שלב. ההקמה היא שורה אחת שכותרתה נעה מ-Working on it… אל Cloning … ואל Starting the agent…. החשיבה מוסיפה שורת Thinking…; כשהשלב הזה מסתיים, מחשבה קצרה יכולה להופיע עליה. כל כלי הוא שורה משלו (Read lib/main.dart). התשובה מגיעה כטקסט רגיל מתחת לכרטיס. הכרטיס הופך למושלם כשהתור מסתיים, ולשגיאה כשההרצה נכשלה, נקטעה, או הגיעה למגבלת התורות.

הכרטיס מתחיל ברגע שהבוט מקבל את האזכור — Working on it… — כך ששרשור ה-Slack אינו שותק בזמן שסביבת העבודה עוד נבנית. האזכור הראשון שלכם בערוץ Slack יוצר את השיחה, וזו משכפלת את המאגרים שהסוכן עובד בהם, ולכן שורת ההקמה הזו מציגה אז Cloning acme/widgets…, אחר כך Setting up Reviewer…, אחר כך Starting the agent…, ואז שורת Thinking… ברגע שהסוכן באמת חושב. במאגר גדול ההקמה הראשונה הזו נמשכת זמן מה; הכרטיס הוא הדרך לדעת שהוא עובד ולא מתעלם מכם. אזכורים מאוחרים יותר באותו שרשור Slack עדיין נפתחים ב-Working on it…, ואז מדלגים על שלבי השכפול כי סביבת העבודה כבר קיימת.

החשיבה כקיר של טקסט ופלט כלים אינם יוצאים לעולם מ-Control Center — המחשבה על שורת ה-Thinking… היא שורה קצרה, לא תמליל. View in Control Center על הכרטיס פותח את השיחה המלאה באפליקציית שולחן העבודה — הקישור מוביל לשרת ה-Control Center שלכם עצמכם, והוא מעביר את הדפדפן לאפליקציה.

אם לא קורה דבר בלחיצה, ייתכן שהשרת ששלח את ההודעה אינו נגיש מהמכונה שלחצתם ממנה (למשל שרת שמוגבל ל-loopback שנלחץ מהטלפון), או ש-Control Center אינו רץ שם. שרת בלי כתובת נגישה שולח כרטיס בלי כפתור, ולא כרטיס שמוביל לשומקום.

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

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

לחצו על ניתוק בשורת ה-Slack (מנהלים בלבד). ה-socket נסגר ופרטי הגישה נשכחים.

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

השורה מציגה “שגיאת חיבור”

קטע בשם “השורה מציגה “שגיאת חיבור””

קראו את השגיאה שמוצגת לצד התג. פרטי גישה שנדחו (invalid_auth, not_authed, token_revoked, account_inactive) הם סוף הדרך — הגשר מפסיק לנסות שוב וממתין לאסימונים חדשים, כי ניסיון חוזר אינסופי עם אסימון שבוטל רק יזכה אתכם בהגבלת קצב. הדביקו את האסימונים מחדש בדיאלוג החיבור.

שגיאה מסוג missing_scope פירושה שהאפליקציה מותקנת עם פחות היקפים ממה שהגשר צריך. הוסיפו את ההיקף החסר, התקינו את האפליקציה מחדש ב-Slack, ואז התחברו מחדש.

כל דבר חולף (socket שנפל, תקלה קלה ב-Slack) מתחבר מחדש מעצמו עם השהיה מעריכית שמוגבלת ל-30 שניות, וסבב החלפת ה-socket השגרתי של Slack אינו מחמיר את ההשהיה הזו.

  • האם הבוט נמצא בערוץ? Slack מעביר הודעות ערוץ רק לאפליקציות שהן חברות בו. הריצו /invite @your-bot-name
  • האם אתם מקושרים? חבר שאינו מקושר מקבל תשובה באותו שרשור Slack שמסבירה איך לקשר. ראו קישור חשבון Slack
  • האם אתם חברים בסביבת העבודה עם תפקיד כתיבה? ל-viewer או guest נאמר שהתפקיד שלו לקריאה בלבד. הגשר לעולם אינו מתחיל עבודה בשם מי שהוא אינו יכול לייחס
  • האם יש בסביבת העבודה סוכנים? בלי סוכנים, ההודעה נשמרת אבל אין מי שיענה עליה

הוא עונה בערוץ אבל מתעלם מהודעות רגילות

קטע בשם “הוא עונה בערוץ אבל מתעלם מהודעות רגילות”

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

תשובות מגיעות כהודעה גדולה אחת במקום בזרימה

קטע בשם “תשובות מגיעות כהודעה גדולה אחת במקום בזרימה”

השורה מציגה “הזרמה חיה כבויה לאפליקציית ה-Slack הזו — תשובות מגיעות כהודעה אחת”. התשובות המוזרמות של Slack דורשות את תכונת Agents & AI Apps בתוכנית בתשלום; כש-Slack מסרב לה, הגשר מפסיק לבקש אותה לשארית חיי החיבור הזה ומפרסם תשובות שלמות במקום. שום דבר אינו הולך לאיבוד — התמליל המלא תמיד נמצא ב-Control Center.

הזרמה דורשת גם עוגן של שרשור ב-Slack, ולכן תשובה שאין לה שרשור Slack לגדול בו מפורסמת כשהיא שלמה. כרטיס המשימה מגיע בכל מקרה: בתשובה שלמה הוא נוסע על אותה הודעה, כשהוא כבר מוגמר.

כרטיסי המשימה של Slack הם חלק מאותו משטח חדש של Agents & AI Apps כמו ההזרמה, ו-Slack מסרב רק בזמן הקריאה. כשזה קורה, Control Center שומר על התשובה ומשליך את הכרטיס לשארית חיי החיבור הזה — תשובה בלי שורת מצב עדיפה על שורת מצב בלי תשובה.

“Control Center זקוק לאסימון גישה לתצורת האפליקציה כדי לערוך את הבוט”

קטע בשם ““Control Center זקוק לאסימון גישה לתצורת האפליקציה כדי לערוך את הבוט””

השורה התאמת הבוט מושבתת כי לחיבור אין אסימון גישה לתצורת האפליקציה. זה מצופה מאפליקציה שנעשתה ביד או דרך יצירה ב-Slack — Slack מעולם לא סיפר ל-Control Center איזו אפליקציה זו. הפיקו זוג אסימונים ב-api.slack.com/apps והתחברו מחדש כשאסימון הרענון מלא.

Slack מגביל הודעה בודדת ל-40,000 תווים, ולכן הגשר חותך ב-39,000 ומוסיף הפניה ל-Control Center — תשובה מקוצרת עדיפה על תשובה ש-Slack דוחה על הסף. הטקסט המלא נמצא תמיד בתמליל המרחב.