เรื่องราวเริ่มจากว่า อยากลองใช้ n8n สร้าง automation ให้เป็นภายในเวลาที่มี 2 วัน และอยากรู้ด้วยตัวเองว่า “n8n มันเจ๋งแค่ไหน” เลยหยิบปัญหาที่เห็นในทีม มาลองทำเป็น automation เพื่อให้ทำงานง่ายขึ้น ไวขึ้นดู
Process ที่หยิบมาลองทำ automation คือ
“การจัดการบั๊กที่แจ้งเข้ามาทาง Slack และอัพเดทกลับไปที่ต้นทางอัตโนมัติ เมื่อแก้ไขเรียบร้อยแล้ว”
การทำงานในปัจจุบัน
- Users/ Operation team รายงานบั๊กเข้ามาทาง Slack channel
- PO ขอข้อมูลเพิ่มเติมจาก reporter เพื่อตรวจสอบเพิ่มเติม
- PO (product operation) ตรวจสอบ และ reproduce ให้มั่นใจว่าเป็นบั๊กจริง ไม่ใช่ human error
- ถ้าเป็นบั๊กจริง PO เปิด JIRA ticket เพื่อให้ทีม developer แก้ไข
- PO อัพเดทให้ผู้ที่เกี่ยวข้องทราบ เมื่อปัญหาได้รับการแก้ไขเรียบร้อย
ปัญหาที่เกิดขึ้น
- เสียเวลาในการสร้าง JIRA ticket
- Issue report ที่เข้ามา บางอันอาจตกหล่น — ไม่รู้ว่า ณ ตอนนี้มี issue ที่รอการแก้ไขจำนวนเท่าไร ด่วนแค่ไหน อันไหนปิดไปแล้วบ้าง
- เสียเวลาในการแจ้งให้ผู้ที่เกี่ยวข้องทราบ เมื่อปัญหาได้รับการแก้ไขเรียบร้อย (บางทีอาจจะลืม)
ตัวอย่างการทำงาน (Solution Overview)
- ใช้ Slack emoji เพื่อสร้าง ticket (แทนการ copy ข้อมูล, สรุปปัญหาโดยคน ก่อนสร้าง ticket)

- ใช้ OpenAI GPT-4o สรุปปัญหาที่ได้รับรายงาน เพื่อเป็นหัวข้อของ JIRA ticket

- ใช้ Slack emoji เพื่อระบุความด่วนของปัญหา (incident level) และอัพเดทไว้ที่ ticket ที่สร้าง ( 0️⃣ 1️⃣ 2️⃣ 3️⃣ )
- ใช้ JIRA Cloud เพื่อจัดการ Issue ทั้งหมด รวมถึงการแยกความด่วนของปัญหา (incident level) และจัดการ workflow ของ ticket ที่สร้างขึ้นทั้งหมด
- ใช้ OpenAI GPT-4o สรุปเนื้อหาของการพูดคุยใน issue thread ทั้งหมด รวมถึงรายงานสถานะปัจจุบันของปัญหา

- ใช้ JIRA webhook เพื่อ monitor กรณีที่สถานะของ Ticket ถูกปรับเป็น “Done” → แจ้งกลับไปที่ thread ต้นทาง ที่รายงาน issue มาโดยอัตโนมัติ

n8n workflow สามารถ download ได้จากที่นี่
Step-by-Step Implementation
แยกออกเป็น 2 workflow ใน n8n โดยข้อ 1–5 ถูกจัดการด้วย workflow #1
Workflow #1

ส่วนที่ 1:

- [Webhook Trigger Node] รับ slack webhook
- [HTTP node] ดึงข้อมูลเกี่ยวกับ message ที่ได้เพิ่มเติม เช่น channel name
- [If node] ตรวจสอบว่าเป็น event
reaction_added(เพราะเราสนใจแค่กรณีได้รับ emoji reaction จาก slack) - [If node] ตรวจสอบว่าเป็น event จาก authorized person เท่านั้น (ไม่สนใจการกด reaction จากคนอื่นๆ)
- [Google sheet node] ตรวจสอบว่า message ที่ได้มา เราสร้าง ticket ไปหรือยัง ถ้ายัง → เตรียมสร้าง ticket ใน ส่วนที่ 2
ส่วนที่ 2:

- [If node] ตรวจสอบว่าเป็น emoji ที่เราสนใจ เพื่อสร้าง JIRA ticket (emoji
:run:) - [OpenAI node] สรุปข้อความที่ได้รายงานมา เพื่อใช้เป็น JIRA ticket title (บังคับให้ output ออกมาเป็น json ด้วย) ด้วย prompt:
Summarize following issue reported by users, this will be used as JIRA ticket title.
It should clearly summarize what's the issue, platform occured.
Summarize in Thai. Always return result in json with key "title"
Output should be in following format
[platform]: Issue title in Thai
Remark
- platform must be in following value "Web", "App", "Android App", "iOS App", "Web&App", "Undefined"
- [JIRA node] สร้าง ticket จากข้อมูลที่มี
- [HTTP node] เรียก http request เพื่ออัพเดทกลับไปที่ thread ต้นทาง ว่าสร้าง ticket เรียบร้อยแล้ว
- [Google Sheet Node] บันทึกเกี่ยวกับ thread นี้ ว่าสร้าง ticket เรียบร้อย, ได้ ticketId, link คืออะไรบ้าง
ส่วนที่ 3:

- [Switch Node] แยก reaction อื่นๆที่สนใจ เช่น 0️⃣ 1️⃣ — จะเป็นการอัพเดท incident level ไปที่ JIRA ticket
- [JIRA Node] อัพเดท Label (incident level) ไปที่ JIRA ticket ที่เปิดไว้
ส่วนที่ 4:

ส่วนนี้เป็นของแถม กรณีที่ issue report thread ใน slack มีการพูดคุย ขอข้อมูลเพิ่มเติมกันเป็นจำนวนมาก ถ้าตามมาอ่านทีหลังจะใช้เวลาทำความเข้าใจและสรุปนาน เราสามารถทำให้บอทของเรา สรุปเนื้อที่คุยกันทั้งหมด รวมถึงสถานะปัญหาปัจจุบันได้ โดยใช้ emoji พิเศษ
- [Code node] รวม message ทั้งหมดใน thread (ทั้ง original message และ reply message) ไว้ด้วยกัน เพื่อเตรียมส่งให้ GPT-4o สรุป
- [OpenAI node] ใช้ GPT-4o สรุปประเด็นตามที่เราต้องการ
Summarize slack thread & all replies below.
Expected output
- Summarize in Thai language
- a json with only one key "summary" which combine all contents (problem, key discussion, current status) as single message, separate each topic with necessary \n line break & topic name
- include emoji in topic name for friendly & easier understanding
- don't include "PO acknowledgement" in any summary
- don't include the fact that JIRA ticket has been created
Topics expected in output
Problem
- summarize what's the problem. don't need to include repoter, team.
Key Discussion (ประเด็นสำคัญ)
- bullet list of key discussion
- include root cause (if any)
Current status
- latest status of this problem & solution (if any)
- in bullet format
Here's the message
- [JIRA node] อัพเดทสรุปที่ได้มา ลงใน comment ของ JIRA ticket
- [HTTP node] โพสสรุปไปที่ slack thread ต้นทาง
Workflow #2
ส่วนนี้ทำหน้าที่รอรับ webhook การอัพเดทสถานะของ ticket ที่ถูกสร้างด้วย automation ของเรา และตอบกลับไปที่ thread ตั้งต้น ที่ report incident นี้มา

- [JIRA webhook node] รอรับ webhook การอัพเดท JIRA ticket status
- [Code node] ดูว่าเป็นการเปลี่ยนแปลงสถานะเป็น Done เท่านั้น (จาก ticket change log)
- [Google Sheet Node] ดึงข้อมูล slack original thread ของ ticket นี้
- [HTTP node] อัพเดทสถานะไปที่ thread ตั้งต้น ว่าได้รับการแก้ไขแล้ว
ส่วนที่ต้องเตรียมเพิ่มเติม
Slack App
- เปิด Event Subscription → Reaction Added
- OAuth scope:
channels:historyreactions:readchat:write
Credentials
- JIRA API key
- Google Cloud Credentials
- OpenAI API key
- Slack Account Access token
ไอเดียที่สามารถทำต่อเพิ่มเติมได้
- ส่ง daily digest ตอนจบวัน/ เริ่มวันใหม่ ว่ามี issue ไหนต้องดำเนินการต่อบ้าง
- ทำ monthly report สรุปยอด ticket ทั้งหมด รวมถึงแยกปริมาณตามสาเหตุที่เกิดขึ้น เพื่อส่งต่อให้ทีมที่เกี่ยวข้องแก้ไขต่อไปได้
- ถ้าเป็น high impact/ severe incident สามารถสร้าง incident channel, invite ผู้ที่เกี่ยวข้องทั้งหมด, สรุปประเด็นปัญหา ตาม SOP ที่ตั้งไว้ได้
สรุป
- n8n ถือเป็น low-code tools ที่ทำความเข้าใจได้ง่ายมากๆ cost ในการใช้งานต่ำมาก สามารถนำไปประยุกต์ใช้เพื่อเพิ่มประสิทธิภาพ + ลดงานของหลายๆทีมได้อย่างรวดเร็ว
- สามารถประยุกต์เพื่อใช้ทำ AI Agent ได้ด้วย (chat bot, personal assistant, etc.) ยิ่งทำให้ use case ที่สามารถทำได้ยิ่งหลากหลายมากขึ้นไปอีก
- สามารถลองเริ่มจาก workflow เล็กๆ แล้วค่อยขยายขึ้นเรื่อยๆ ทีมของคุณก็สามารถทำได้ในเวลาไม่นาน
- Template download: https://bit.ly/3GC8o6H