ข้ามไปยังเนื้อหา

ตั้งค่าการผสาน Slack

คู่มือนี้แสดงวิธีเชื่อม Slack เข้ากับเวิร์กสเปซ Control Center ไม่ว่าจะโดยให้ Control Center สร้างแอปให้ หรือโดยสร้างแอปนั้นด้วยตัวเอง

สำหรับการเริ่มต้นใช้งานแบบมีคำแนะนำ ดูที่ เชื่อม Slack เข้ากับเวิร์กสเปซ

  • บทบาท owner หรือ admin ในเวิร์กสเปซ Control Center — การเชื่อมแอปแชทคือการเปลี่ยนแปลงการตั้งค่าของเวิร์กสเปซ
  • สิทธิ์ในการสร้างและติดตั้งแอปในเวิร์กสเปซ Slack
  • ไม่ต้องมีอะไรที่เข้าถึงได้จากสาธารณะ: การเชื่อมต่อเป็นขาออก (Socket Mode) เซิร์ฟเวอร์จึงไม่ต้องมีพอร์ตขาเข้า ทันเนล หรือโดเมน
เส้นทาง คุณต้องให้ Control Center ทำ
แบบมีคำแนะนำ โทเค็นการตั้งค่าแอป (xoxe-…) สร้างแอปพร้อมสโคป เหตุการณ์ Socket Mode และคำสั่งสแลชที่ถูกต้อง แล้วมอบสองขั้นตอนที่ Slack ไม่มี API ให้
สร้างใน Slack ไม่ต้องให้อะไร เปิด Slack ด้วยการตั้งค่าเดียวกันที่กรอกไว้ล่วงหน้า คุณเลือกเวิร์กสเปซและยืนยัน
ด้วยตัวเอง โทเค็นของแอปที่สร้างเสร็จแล้ว ตรวจสอบโทเค็นเหล่านั้นและเชื่อมต่อ

เส้นทางแบบมีคำแนะนำเป็นเส้นทางเดียวที่ทำให้แอปยัง_จัดการได้_จาก Control Center ซึ่งเป็นสิ่งที่ทำให้ปรับแต่งแชทบอตใช้งานได้ แอปที่สร้างด้วย สร้างใน Slack สามารถยกระดับเป็นแอปที่จัดการได้ในภายหลัง โดยวางโทเค็นการตั้งค่าในไดอะล็อกเชื่อมต่อ

ไม่มีปุ่ม “ติดตั้งแอป Slack ของ Control Center” โดยเจตนา การติดตั้งแอป Slack แบบแจกจ่ายต้องใช้ client secret ร่วมกัน (Slack ไม่มี PKCE) และ Socket Mode กระจายเหตุการณ์ของแอปแบบสุ่มไปตามการเชื่อมต่อของมัน — แอปที่ใช้ร่วมกันหนึ่งตัวจึงจะส่งข้อความของเวิร์กสเปซของคุณไปยังเซิร์ฟเวอร์ของคนอื่น แต่ละเวิร์กสเปซจึงเป็นเจ้าของแอปของตัวเอง และสามเส้นทางนี้พูดถึงว่างานที่คุณต้องทำนั้นน้อยแค่ไหน

  1. สร้างคู่โทเค็นการตั้งค่าแอปที่ api.slack.com/apps แล้วคัดลอกโทเค็น refresh (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 เปิดหน้าจอสร้างแอปของตัวเองให้คุณ โดยที่ 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 จึงไม่รู้ id ของแอป และลิงก์ในขั้นตอนที่ 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: เปิดแท็บ Messages และปล่อยให้เขียนได้ เพื่อให้สมาชิกส่งข้อความส่วนตัวหาบอทได้

โทเค็น: สร้างโทเค็นระดับแอปที่มี 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 สะดุด) จะเชื่อมต่อใหม่เองด้วย exponential backoff ที่มีเพดาน 30 วินาที และการหมุน socket ตามปกติของ Slack จะไม่ทำให้ backoff นั้นเพิ่มระดับ

  • บอทอยู่ในช่องหรือยัง? 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 แล้วเชื่อมต่อใหม่โดยกรอกโทเค็น refresh

Slack จำกัดข้อความเดียวไว้ที่ 40,000 ตัวอักษร สะพานจึงตัดที่ 39,000 แล้วต่อท้ายด้วยตัวชี้ไปยัง Control Center — คำตอบที่สั้นลงดีกว่าคำตอบที่ Slack ปฏิเสธทันที ข้อความฉบับเต็มอยู่ในทรานสคริปต์ของสเปซเสมอ