n8n Thai
by n8n Thai

n8n x Slack: แจ้งเตือนทีมอัตโนมัติ

คู่มือเชื่อม n8n กับ Slack เพื่อส่งแจ้งเตือนอัตโนมัติ รับคำสั่งจาก Slack และสร้าง bot ช่วยทีม ตั้งแต่สร้าง Slack App จนถึง Workflow พร้อมใช้งาน

n8n x Slack: แจ้งเตือนทีมอัตโนมัติ

ทีม developer และ operations ที่ใช้ Slack อยู่แล้วสามารถดึง n8n เข้ามาทำ automation ได้โดยตรง ตั้งแต่ deploy notification, alert จาก monitoring, รายงานยอดขายประจำวัน จนถึง approval bot ที่ทีมโต้ตอบผ่าน Slack ได้เลย ไม่ต้องเปิด browser

สิ่งที่ต้องเตรียม

  • Slack Workspace ที่มีสิทธิ์สร้าง App (Admin หรือ owner)
  • n8n instance พร้อม public URL (สำหรับรับ Slack event)
  • เวลาประมาณ 30 นาทีสำหรับตั้งค่าครั้งแรก

ขั้นตอนที่ 1: สร้าง Slack App

  1. ไปที่ api.slack.com/apps แล้วกด “Create New App”
  2. เลือก “From scratch”
  3. ตั้งชื่อ App เช่น “n8n Bot” และเลือก Workspace
  4. กด Create App

เพิ่ม OAuth Scopes

ไปที่ OAuth & Permissions → Bot Token Scopes เพิ่ม scopes ที่ต้องการ

Scopeใช้สำหรับ
chat:writeส่งข้อความเข้า channel
chat:write.publicส่งข้อความเข้า public channel โดยไม่ต้อง join
channels:readอ่านรายชื่อ channel
users:readอ่านข้อมูล user
commandsรับ slash commands
incoming-webhookส่งข้อความผ่าน Incoming Webhook (วิธีง่ายกว่า)

Install App และ Copy Token

  1. ไปที่ OAuth & Permissions → Install App to Workspace
  2. กด Allow
  3. คัดลอก Bot User OAuth Token (ขึ้นต้นด้วย xoxb-)

ขั้นตอนที่ 2: ตั้งค่า Slack Credential ใน n8n

  1. ใน n8n: Settings → Credentials → New → “Slack API”
  2. ใส่ Bot User OAuth Token
  3. กด Save

Workflow 1: ส่งข้อความเข้า Slack Channel

ตัวอย่าง: แจ้งเตือนเมื่อมี Error ใน Workflow อื่น

Error Trigger
  → Slack node
      Resource: Message
      Operation: Post
      Channel: #alerts
      Text: |
        :red_circle: *Workflow Error*
        Workflow: {{ $json.workflow.name }}
        Error: {{ $json.error.message }}
        เวลา: {{ $now.toFormat('dd/MM/yyyy HH:mm') }}

ตัวอย่าง: รายงานยอดขายเช้า

Schedule Trigger (08.00 ทุกวัน จันทร์-ศุกร์)
  → Google Sheets (ดึงยอดขายเมื่อวาน)
  → Slack node
      Channel: #sales-team
      Text: |
        :bar_chart: *Daily Sales Report - {{ $now.minus({days:1}).toFormat('dd/MM/yyyy') }}*
        
        ยอดขายรวม: *{{ $json.total }} บาท*
        จำนวนออเดอร์: *{{ $json.count }} รายการ*
        เฉลี่ยต่อออเดอร์: *{{ $json.avg }} บาท*

Block Kit: ข้อความที่มีโครงสร้าง

Slack รองรับ Block Kit สำหรับข้อความที่มีปุ่ม, image, section แยกกัน ทำให้ notification ดูเป็นมืออาชีพกว่า plain text

{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": ":package: ออเดอร์ใหม่ #{{ $json.order_id }}"
      }
    },
    {
      "type": "section",
      "fields": [
        { "type": "mrkdwn", "text": "*ลูกค้า:*\n{{ $json.customer }}" },
        { "type": "mrkdwn", "text": "*ยอด:*\n{{ $json.amount }} บาท" }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": { "type": "plain_text", "text": "ดูออเดอร์" },
          "url": "{{ $json.order_url }}"
        }
      ]
    }
  ]
}

ใส่ JSON นี้ใน Blocks field ของ Slack node (ไม่ใช่ Text field)


Workflow 2: รับ Slash Command จาก Slack

Slash command คือคำสั่งที่ user พิมพ์ใน Slack เช่น /report, /status, /deploy แล้ว Slack ส่งมาให้ n8n ทำงาน

สร้าง Slash Command ใน Slack App

  1. ใน Slack App: Slash Commands → Create New Command
  2. Command: /report
  3. Request URL: ใส่ Webhook URL จาก n8n Webhook node
  4. Short Description: “ดูรายงานยอดขาย”
  5. กด Save

n8n Workflow รับ Slash Command

Webhook Trigger (รับ POST จาก Slack)
  → Code node (parse Slack payload)
  → Switch node (แยกตาม command)
    → /report:
        Google Sheets (ดึงยอดขาย)
        HTTP Request (ตอบกลับ Slack)
    → /status:
        HTTP Request (check server health)
        HTTP Request (ตอบกลับ Slack)

Slack ต้องการ response ภายใน 3 วินาที ถ้า workflow ใช้เวลามากกว่านั้น ต้องตอบกลับ “กำลังประมวลผล…” ก่อน แล้วส่งผลลัพธ์จริงผ่าน response_url ที่ Slack ส่งมา

Code ตอบกลับ Slack Slash Command

// ตอบกลับทันทีเพื่อ acknowledge
const responseUrl = $json.body.response_url;
const text = "กำลังดึงรายงาน รอสักครู่...";

// ส่ง immediate response
// (ผ่าน Respond to Webhook node ใน n8n)
return [{
  json: {
    response_type: "in_channel",
    text: text,
    responseUrl: responseUrl
  }
}];

Workflow 3: Incoming Webhook (วิธีง่ายที่สุด)

ถ้าต้องการแค่ “ส่งข้อความเข้า channel” โดยไม่ต้องรับคำสั่งจาก Slack วิธีที่ง่ายที่สุดคือ Incoming Webhook

สร้าง Incoming Webhook

  1. ใน Slack App: Incoming Webhooks → Activate Incoming Webhooks
  2. Add New Webhook to Workspace → เลือก channel → Allow
  3. คัดลอก Webhook URL (เช่น https://hooks.slack.com/services/T.../B.../...)

ใช้ HTTP Request node แทน Slack node

HTTP Request node
  Method: POST
  URL: https://hooks.slack.com/services/xxx/xxx/xxx
  Body (JSON):
    {
      "text": "แจ้งเตือน: {{ $json.message }}"
    }

Incoming Webhook เหมาะสำหรับ notification แบบ one-way ไม่ต้องสร้าง credential ก็ใช้ได้


ข้อควรระวัง

Rate Limits: Slack จำกัด 1 message per second ต่อ channel ถ้าต้องส่งหลาย message พร้อมกัน ให้ใส่ Wait node ระหว่างแต่ละข้อความ

Token Security: Bot Token ต้องเก็บเป็น n8n Credential อย่า hardcode ใน workflow และอย่าแชร์ใน repository

Channel Names: ใช้ Channel ID แทน Channel Name จะ reliable กว่า เพราะ Channel Name เปลี่ยนได้ ส่วน ID คงที่เสมอ หา Channel ID ได้จาก URL ใน Slack browser หรือผ่าน Slack API conversations.list

Slack App ต้อง Join Channel ก่อน: Bot ต้อง join channel ก่อนจึงจะส่งข้อความได้ (เว้นแต่มี chat:write.public scope สำหรับ public channel)


สรุป

n8n x Slack เป็น combination ที่ทีม developer ใช้ได้จริงตั้งแต่วันแรก ส่ง deployment notification, error alert, หรือ daily report เข้า channel ที่เหมาะสม เริ่มต้นด้วย Incoming Webhook ก่อนถ้าต้องการแค่ส่งข้อความ แล้วค่อยอัปเกรดเป็น Slack App เต็มรูปแบบเมื่อต้องการ slash command หรือ interactive message

บทความที่เกี่ยวข้อง: สร้าง Telegram Bot ด้วย n8n | คู่มือ Webhook ใน n8n ฉบับสมบูรณ์

อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co

Related posts