---
title: "Slack Connector"
description: "คู่มือการผสานรวม Slack ฉบับสมบูรณ์สำหรับการส่งการแจ้งเตือน ซิงค์ข้อมูล channel และทริกเกอร์ระบบอัตโนมัติ Brevo จากเหตุการณ์ Slack ผ่าน Tajo"
url: https://tajo.io/th/docs/connectors/custom/slack/
markdown: https://tajo.io/th/docs/connectors/custom/slack.md
lang: th-TH
robots: noindex
---

ขอสิทธิ์ใช้งานล่วงหน้า

กรอกชื่อและที่อยู่อีเมลที่ทำงานของคุณ เราจะส่งลิงก์เพื่อยืนยันคำขอเข้าใช้งาน Tajo ทางอีเมล

# Slack Connector

สถานะตัวเชื่อม: วางแผนไว้ ยังไม่ได้สร้าง ปัจจุบัน Tajo ยังไม่ได้ใช้งานตัวเชื่อมนี้

| ฟิลด์ต้นทาง | ฟิลด์ปลายทาง | ค่าตัวอย่าง |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

เชื่อมต่อ Slack workspace กับ Brevo ผ่าน Tajo สำหรับการแจ้งเตือนทางการตลาดแบบเรียลไทม์ การแจ้งเตือนทีมงานเกี่ยวกับเหตุการณ์ลูกค้า และระบบอัตโนมัติเวิร์กโฟลว์ที่ทริกเกอร์จากการโต้ตอบ Slack

## ภาพรวม

| คุณสมบัติ | ค่า |
| --- | --- |
| **แพลตฟอร์ม** | Slack |
| **หมวดหมู่** | การผสานรวมแบบกำหนดเอง |
| **ความซับซ้อนในการตั้งค่า** | ง่าย |
| **การผสานรวมอย่างเป็นทางการ** | ไม่ |
| **ข้อมูลที่ซิงค์** | ผู้ใช้ Channels ข้อความ เหตุการณ์ |
| **API Base URL** | `https://slack.com/api` |

## ฟีเจอร์

- **การแจ้งเตือนทางการตลาด** - ส่งการแจ้งเตือนแบบเรียลไทม์สำหรับเหตุการณ์แคมเปญ สมาชิกใหม่ และ revenue milestones
- **การแจ้งเตือนเหตุการณ์ลูกค้า** - แจ้งทีมงานเกี่ยวกับการกระทำของลูกค้าที่มีมูลค่าสูงจาก Brevo
- **ทริกเกอร์เวิร์กโฟลว์** - ใช้การโต้ตอบ Slack (คลิกปุ่ม การส่งฟอร์ม) เพื่อทริกเกอร์ระบบอัตโนมัติ Brevo
- **การกำหนดเส้นทางตาม channel** - กำหนดเส้นทางการแจ้งเตือนไปยัง channels ที่เฉพาะเจาะจงตามประเภทเหตุการณ์หรือ customer segment
- **การซิงค์ผู้ใช้** - แมปผู้ใช้ Slack workspace กับผู้ติดต่อ Brevo สำหรับการสื่อสารภายใน
- **ข้อความโต้ตอบ** - ส่งข้อความที่สมบูรณ์พร้อมปุ่มและการกระทำสำหรับเวิร์กโฟลว์ทีม
- **ข้อความตามกำหนดเวลา** - กำหนดเวลาการแจ้งเตือนสำหรับสรุปการตลาดรายวัน/รายสัปดาห์
- **รองรับ Thread** - จัดกลุ่มการแจ้งเตือนที่เกี่ยวข้องใน threads เพื่อการสื่อสารที่เป็นระเบียบ

## ข้อกำหนดเบื้องต้น

ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:

1. Slack workspace ที่มีสิทธิ์ผู้ดูแลระบบ
2. Slack app ที่สร้างที่ [api.slack.com/apps](https://api.slack.com/apps)
3. Bot token ที่มี scopes ที่จำเป็น
4. บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
5. บัญชี Tajo

## การยืนยันตัวตน

### Bot Token (แนะนำ)

ติดตั้ง Slack app ในพื้นที่ทำงานของคุณและใช้ bot token สำหรับการเข้าถึง API

1. สร้าง app ที่ [api.slack.com/apps](https://api.slack.com/apps)
2. เพิ่ม OAuth scopes ที่จำเป็นใต้ “OAuth & Permissions”
3. ติดตั้ง app ในพื้นที่ทำงาน
4. คัดลอก Bot User OAuth Token (`xoxb-...`)

```bash
curl -X POST "https://slack.com/api/chat.postMessage" \
  -H "Authorization: Bearer xoxb-YOUR-BOT-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channel": "C01234567", "text": "Hello from Tajo!"}'
```

### OAuth 2.0

สำหรับการแจกจ่าย Slack integration ของคุณไปยังหลาย workspaces:

```bash
# Authorization URL
https://slack.com/oauth/v2/authorize?
  client_id={client_id}&
  scope=chat:write,channels:read,users:read&
  redirect_uri={redirect_uri}

# Token exchange
curl -X POST "https://slack.com/api/oauth.v2.access" \
  -d "client_id={client_id}" \
  -d "client_secret={client_secret}" \
  -d "code={auth_code}"
```

#### Bot Scopes ที่จำเป็น

```
chat:write           # Send messages
channels:read        # List channels
channels:history     # Read channel messages
users:read           # List workspace users
users:read.email     # Read user email addresses
reactions:write      # Add reactions to messages
files:write          # Upload files
```

การเข้าถึงอีเมลผู้ใช้

scope `users:read.email` จำเป็นสำหรับการจับคู่ผู้ใช้ Slack กับผู้ติดต่อ Brevo หากไม่มี การแมปผู้ใช้จะจำกัดเพียง display names

## การกำหนดค่า

### การตั้งค่าพื้นฐาน

```yaml
connectors:
  slack:
    enabled: true
    bot_token: "${SLACK_BOT_TOKEN}"
    signing_secret: "${SLACK_SIGNING_SECRET}"

    # Notification channels
    channels:
      marketing: "C01234567"
      sales: "C01234568"
      support: "C01234569"
      alerts: "C01234570"

    # Event routing
    notifications:
      new_subscriber:
        channel: marketing
        template: subscriber_alert
      high_value_order:
        channel: sales
        template: order_alert
      support_ticket:
        channel: support
        template: ticket_alert
```

### การแมปฟิลด์

แมปข้อมูลผู้ใช้ Slack กับแอตทริบิวต์ผู้ติดต่อ Brevo:

#### การแมปค่าเริ่มต้น

| Parameter | Type | Description |
| --- | --- | --- |
| `profile.email` required | string | อีเมลผู้ใช้ (ตัวระบุที่ไม่ซ้ำกันสำหรับการจับคู่ Brevo) |
| `real_name` optional | string | ชื่อเต็ม แยกเป็น FIRSTNAME/LASTNAME |
| `profile.phone` optional | string | แมปกับแอตทริบิวต์ SMS |
| `profile.title` optional | string | ตำแหน่งงาน |
| `tz` optional | string | เขตเวลาของผู้ใช้ |
| `is_admin` optional | boolean | สถานะผู้ดูแลระบบ workspace |
| `team_id` optional | string | Team ID ของ workspace |
| `status_text` optional | string | สถานะที่กำหนดเองของผู้ใช้ |

## เมธอด API

### การส่งข้อความ

| เมธอด | Endpoint | คำอธิบาย |
| --- | --- | --- |
| `POST` | `chat.postMessage` | ส่งข้อความไปยัง channel |
| `POST` | `chat.update` | อัปเดตข้อความที่มีอยู่ |
| `POST` | `chat.delete` | ลบข้อความ |
| `POST` | `chat.scheduleMessage` | กำหนดเวลาข้อความ |
| `POST` | `chat.postEphemeral` | ส่งข้อความ ephemeral ให้ผู้ใช้ |

### Channels

| เมธอด | Endpoint | คำอธิบาย |
| --- | --- | --- |
| `GET` | `conversations.list` | แสดงรายการ channels |
| `GET` | `conversations.info` | ดูข้อมูล channel |
| `GET` | `conversations.members` | แสดงรายการสมาชิก channel |
| `GET` | `conversations.history` | ดูข้อความ channel |

### ผู้ใช้

| เมธอด | Endpoint | คำอธิบาย |
| --- | --- | --- |
| `GET` | `users.list` | แสดงรายการผู้ใช้ workspace |
| `GET` | `users.info` | ดูข้อมูลผู้ใช้ |
| `GET` | `users.lookupByEmail` | ค้นหาผู้ใช้ตามอีเมล |
| `GET` | `users.conversations` | แสดงรายการ channels ของผู้ใช้ |

### การโต้ตอบ

| เมธอด | Endpoint | คำอธิบาย |
| --- | --- | --- |
| `POST` | `views.open` | เปิด modal view |
| `POST` | `views.update` | อัปเดต modal view |
| `POST` | `reactions.add` | เพิ่ม emoji reaction |

## เหตุการณ์

### การแจ้งเตือน Brevo ไปยัง Slack

| เหตุการณ์ | ทริกเกอร์ | การกระทำ Slack |
| --- | --- | --- |
| `new_subscriber` | ผู้ติดต่อถูกสร้างใน Brevo | โพสต์ไปยัง #marketing |
| `campaign_sent` | ส่งแคมเปญอีเมล | โพสต์สรุปไปยัง #marketing |
| `order_placed` | ตรวจพบคำสั่งซื้อมูลค่าสูง | โพสต์ไปยัง #sales พร้อมรายละเอียด |
| `cart_abandoned` | ตะกร้าถูกละทิ้ง 30 นาที | โพสต์ไปยัง #sales สำหรับติดตาม |
| `ticket_created` | เปิดตั๋วสนับสนุน | โพสต์ไปยัง #support |
| `unsubscribed` | ผู้ติดต่อยกเลิกการสมัคร | โพสต์การแจ้งเตือนไปยัง #marketing |

### ทริกเกอร์ Slack ไปยัง Brevo

| เหตุการณ์ Slack | ทริกเกอร์ | การกระทำ Brevo |
| --- | --- | --- |
| `message_action` | Custom message shortcut | เพิ่มผู้ติดต่อในรายการหรือทริกเกอร์ระบบอัตโนมัติ |
| `block_actions` | คลิกปุ่มในข้อความ | อัปเดตแอตทริบิวต์ผู้ติดต่อหรือส่งอีเมล |
| `view_submission` | ส่งฟอร์ม Modal | สร้างผู้ติดต่อหรือทริกเกอร์เวิร์กโฟลว์ |

## ตัวอย่างโค้ด

### เริ่มต้น Connector

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect Slack
await tajo.connectors.connect('slack', {
  botToken: process.env.SLACK_BOT_TOKEN,
  signingSecret: process.env.SLACK_SIGNING_SECRET
});
```

### ส่งการแจ้งเตือนทางการตลาด

```javascript
// Send a notification when a high-value order is placed
await tajo.slack.notify({
  channel: 'sales',
  event: 'order_placed',
  data: {
    customerEmail: 'customer@example.com',
    orderValue: '$1,250.00',
    products: ['Premium Widget', 'Pro Service'],
    isFirstOrder: true
  },
  template: {
    blocks: [
      {
        type: 'header',
        text: { type: 'plain_text', text: 'New High-Value Order' }
      },
      {
        type: 'section',
        fields: [
          { type: 'mrkdwn', text: '*Customer:*\ncustomer@example.com' },
          { type: 'mrkdwn', text: '*Amount:*\n$1,250.00' }
        ]
      },
      {
        type: 'actions',
        elements: [
          {
            type: 'button',
            text: { type: 'plain_text', text: 'View in Brevo' },
            url: 'https://app.brevo.com/contacts'
          }
        ]
      }
    ]
  }
});
```

### จัดการการโต้ตอบ Slack

```javascript
import crypto from 'crypto';

app.post('/slack/interactions', async (req, res) => {
  // Verify Slack request signature
  const timestamp = req.headers['x-slack-request-timestamp'];
  const signature = req.headers['x-slack-signature'];
  const sigBasestring = `v0:${timestamp}:${req.rawBody}`;
  const mySignature = 'v0=' + crypto
    .createHmac('sha256', process.env.SLACK_SIGNING_SECRET)
    .update(sigBasestring)
    .digest('hex');

  if (signature !== mySignature) {
    return res.status(401).send('Unauthorized');
  }

  const payload = JSON.parse(req.body.payload);

  // Handle button actions
  if (payload.type === 'block_actions') {
    await tajo.connectors.handleWebhook('slack', {
      type: 'interaction',
      action: payload.actions[0].action_id,
      userId: payload.user.id,
      payload
    });
  }

  res.status(200).send();
});
```

## ขีดจำกัดอัตรา

Slack API rate limits ใช้ระบบหลายระดับ:

| ระดับ | ขีดจำกัด | เมธอดทั่วไป |
| --- | --- | --- |
| Tier 1 | 1 คำขอ/นาที | `chat.delete`, `conversations.kick` |
| Tier 2 | 20 คำขอ/นาที | `conversations.history`, `users.info` |
| Tier 3 | 50 คำขอ/นาที | `conversations.list`, `users.list` |
| Tier 4 | 100 คำขอ/นาที | `chat.postMessage` |
| พิเศษ | แตกต่างกัน | `chat.postMessage` ไปยัง channel เดียวกัน: 1/วินาที |

ขีดจำกัดเพิ่มเติม:

- **Web API**: Burst limit พร้อม short-term throttle
- **Events API**: ลองส่งซ้ำ 3 ครั้ง
- **Incoming Webhooks**: 1 ข้อความ/วินาทีต่อ webhook URL
- **Block Kit**: สูงสุด 50 blocks ต่อข้อความ

อัตราการโพสต์ใน Channel

การโพสต์ไปยัง channel เดียวกันจำกัดประมาณ 1 ข้อความต่อวินาที Batch การแจ้งเตือนหรือใช้ threads เพื่อหลีกเลี่ยงการถูกจำกัดอัตรา

## การแก้ไขปัญหา

### ปัญหาทั่วไป

| ปัญหา | สาเหตุ | วิธีแก้ |
| --- | --- | --- |
| `not_authed` | Bot token ไม่ถูกต้อง | ติดตั้ง app ใหม่และคัดลอก bot token ใหม่ |
| `channel_not_found` | Bot ไม่ได้อยู่ใน channel | เชิญ bot เข้า channel เป้าหมาย |
| `missing_scope` | ไม่ได้รับ scope ที่จำเป็น | เพิ่ม scope และติดตั้ง app ใหม่ |
| ไม่ได้รับเหตุการณ์ | ไม่ได้ตั้งค่า Event subscription | กำหนดค่า URL Event Subscriptions |
| หมดเวลาการโต้ตอบ | การตอบสนองนาน >3 วินาที | ตอบด้วย 200 ทันที ประมวลผลแบบ async |

### โหมด Debug

เปิดใช้งาน verbose logging:

```yaml
connectors:
  slack:
    debug: true
    log_level: verbose
    log_events: true
```

### ทดสอบการเชื่อมต่อ

```bash
tajo connectors test slack
# ✓ Bot token valid
# ✓ Workspace accessible
# ✓ Channels readable
# ✓ Message posting enabled
# ✓ Event subscriptions active
```

## แนวทางปฏิบัติที่ดีที่สุด

1. **ใช้ Block Kit** - สร้างข้อความที่สมบูรณ์และโต้ตอบได้ด้วย Block Kit framework ของ Slack
2. **ตอบสนองอย่างรวดเร็ว** - ยืนยันการโต้ตอบภายใน 3 วินาที ประมวลผลแบบ asynchronous
3. **จัดกลุ่มข้อความที่เกี่ยวข้องใน threads** - จัดกลุ่มการแจ้งเตือนที่เกี่ยวข้องใน threads เพื่อลด noise
4. **กำหนดเส้นทางตาม channel** - ส่งประเภทเหตุการณ์ที่แตกต่างกันไปยัง channels ของทีมที่เหมาะสม
5. **รวมปุ่มการกระทำ** - เพิ่มปุ่ม “View in Brevo” สำหรับการเข้าถึงข้อมูลลูกค้าอย่างรวดเร็ว
6. **ใช้ unfurling** - แสดงตัวอย่าง rich previews สำหรับลิงก์ Brevo ที่แชร์ใน Slack

## ความปลอดภัย

- **Bot Token** - OAuth-scoped access token พร้อมสิทธิ์แบบละเอียด
- **การตรวจสอบลายเซ็นคำขอ** - HMAC SHA-256 signature verification สำหรับคำขอขาเข้า
- **OAuth 2.0** - การอนุญาตมาตรฐานอุตสาหกรรมสำหรับการแจกจ่ายหลาย workspace
- **การเข้ารหัส TLS** - การสื่อสาร API ทั้งหมดเข้ารหัสผ่าน HTTPS
- **การหมุนเวียน token** - การหมุนเวียน token อัตโนมัติสำหรับความปลอดภัยที่เพิ่มขึ้น

## แหล่งข้อมูลที่เกี่ยวข้อง

- [Slack API Documentation](https://api.slack.com/methods)
- [Slack Block Kit Builder](https://app.slack.com/block-kit-builder)
- [Slack Events API](https://api.slack.com/events-api)
- [Brevo Connector](https://tajo.io/th/docs/connectors/marketing/brevo)
- [Customer Sync Skill](https://tajo.io/th/docs/skills/data-sync/customer-sync)
