---
title: "Slack 커넥터"
description: "Tajo를 통해 Slack 이벤트에서 알림 전송, 채널 데이터 동기화, Brevo 자동화 트리거를 위한 완전한 통합 가이드입니다."
url: https://tajo.io/kr/docs/connectors/custom/slack/
markdown: https://tajo.io/kr/docs/connectors/custom/slack.md
lang: ko-KR
robots: noindex
---

Tajo 사전 이용 신청

이름과 회사 이메일 주소를 입력하세요. Tajo 이용 신청을 확인할 수 있는 링크를 이메일로 보내드립니다.

# Slack 커넥터

커넥터 상태: 예정 아직 구축되지 않았습니다. Tajo는 현재 이 커넥터를 실행하지 않습니다.

| 원본 필드 | 대상 필드 | 예시 값 |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Tajo를 통해 Slack 워크스페이스를 Brevo에 연결하여 실시간 마케팅 알림, 고객 이벤트에 대한 팀 알림, Slack 상호작용으로 트리거되는 워크플로 자동화를 구현하십시오.

## 개요

| 속성 | 값 |
| --- | --- |
| **플랫폼** | Slack |
| **카테고리** | Custom Integration |
| **설정 복잡도** | 쉬움 |
| **공식 통합** | 아니오 |
| **동기화 데이터** | 사용자, 채널, 메시지, 이벤트 |
| **API Base URL** | `https://slack.com/api` |

## 기능

- **마케팅 알림** - 캠페인 이벤트, 신규 구독자, 매출 마일스톤에 대한 실시간 알림 전송
- **고객 이벤트 알림** - Brevo의 고가치 고객 액션에 대해 팀에게 알림
- **워크플로 트리거** - Slack 상호작용(버튼 클릭, 폼 제출)을 사용하여 Brevo 자동화 트리거
- **채널 기반 라우팅** - 이벤트 유형이나 고객 세그먼트에 따라 특정 채널로 알림 라우팅
- **사용자 동기화** - 내부 커뮤니케이션을 위해 Slack 워크스페이스 사용자를 Brevo 연락처에 매핑
- **대화형 메시지** - 팀 워크플로용 버튼과 액션이 포함된 풍부한 메시지 전송
- **예약 메시지** - 일일/주간 마케팅 요약 알림 예약
- **스레드 지원** - 정리된 커뮤니케이션을 위해 관련 알림을 스레드로 그룹화

## 사전 요구 사항

시작하기 전에 다음이 준비되어 있는지 확인하십시오.

1. 관리자 접근 권한이 있는 Slack 워크스페이스
2. [api.slack.com/apps](https://api.slack.com/apps)에서 생성된 Slack 앱
3. 필수 범위가 있는 봇 토큰
4. API 접근이 가능한 Brevo 계정
5. Tajo 계정

## 인증

### 봇 토큰 (권장)

Slack 앱을 워크스페이스에 설치하고 API 접근에 봇 토큰을 사용하십시오.

1. [api.slack.com/apps](https://api.slack.com/apps)에서 앱 생성
2. “OAuth & Permissions” 아래에서 필수 OAuth 범위 추가
3. 워크스페이스에 앱 설치
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 통합을 여러 워크스페이스에 배포하려면:

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

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

#### 필수 봇 범위

```
chat:write           # 메시지 전송
channels:read        # 채널 목록
channels:history     # 채널 메시지 읽기
users:read           # 워크스페이스 사용자 목록
users:read.email     # 사용자 이메일 주소 읽기
reactions:write      # 메시지에 반응 추가
files:write          # 파일 업로드
```

사용자 이메일 접근

`users:read.email` 범위는 Slack 사용자를 Brevo 연락처와 일치시키기 위해 필요합니다. 이것이 없으면 사용자 매핑이 표시 이름으로 제한됩니다.

## 구성

### 기본 설정

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

    # 알림 채널
    channels:
      marketing: "C01234567"
      sales: "C01234568"
      support: "C01234569"
      alerts: "C01234570"

    # 이벤트 라우팅
    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 | 워크스페이스 관리자 상태 |
| `team_id` optional | string | 워크스페이스 팀 ID |
| `status_text` optional | string | 사용자 맞춤 상태 |

## API 메서드

### 메시징

| 메서드 | 엔드포인트 | 설명 |
| --- | --- | --- |
| `POST` | `chat.postMessage` | 채널에 메시지 전송 |
| `POST` | `chat.update` | 기존 메시지 업데이트 |
| `POST` | `chat.delete` | 메시지 삭제 |
| `POST` | `chat.scheduleMessage` | 메시지 예약 |
| `POST` | `chat.postEphemeral` | 사용자에게 임시 메시지 전송 |

### 채널

| 메서드 | 엔드포인트 | 설명 |
| --- | --- | --- |
| `GET` | `conversations.list` | 채널 목록 |
| `GET` | `conversations.info` | 채널 정보 가져오기 |
| `GET` | `conversations.members` | 채널 멤버 목록 |
| `GET` | `conversations.history` | 채널 메시지 가져오기 |

### 사용자

| 메서드 | 엔드포인트 | 설명 |
| --- | --- | --- |
| `GET` | `users.list` | 워크스페이스 사용자 목록 |
| `GET` | `users.info` | 사용자 정보 가져오기 |
| `GET` | `users.lookupByEmail` | 이메일로 사용자 찾기 |
| `GET` | `users.conversations` | 사용자 채널 목록 |

### 상호작용

| 메서드 | 엔드포인트 | 설명 |
| --- | --- | --- |
| `POST` | `views.open` | 모달 뷰 열기 |
| `POST` | `views.update` | 모달 뷰 업데이트 |
| `POST` | `reactions.add` | 이모지 반응 추가 |

## 이벤트

### Brevo-to-Slack 알림

| 이벤트 | 트리거 | Slack 액션 |
| --- | --- | --- |
| `new_subscriber` | Brevo에 연락처 생성 | #marketing에 게시 |
| `campaign_sent` | 이메일 캠페인 전송됨 | #marketing에 요약 게시 |
| `order_placed` | 고가치 주문 감지됨 | 상세 정보와 함께 #sales에 게시 |
| `cart_abandoned` | 30분 동안 카트 방치됨 | 후속 조치를 위해 #sales에 게시 |
| `ticket_created` | 지원 티켓 열림 | #support에 게시 |
| `unsubscribed` | 연락처 구독 취소됨 | #marketing에 알림 게시 |

### Slack-to-Brevo 트리거

| Slack 이벤트 | 트리거 | Brevo 액션 |
| --- | --- | --- |
| `message_action` | 맞춤 메시지 단축키 | 목록에 연락처 추가 또는 자동화 트리거 |
| `block_actions` | 메시지의 버튼 클릭 | 연락처 속성 업데이트 또는 이메일 전송 |
| `view_submission` | 모달 폼 제출됨 | 연락처 생성 또는 워크플로 트리거 |

## 코드 예제

### 커넥터 초기화

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

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

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

### 마케팅 알림 전송

```javascript
// 고가치 주문이 발생하면 알림 전송
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) => {
  // Slack 요청 서명 확인
  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);

  // 버튼 액션 처리
  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 속도 제한은 계층화된 시스템을 사용합니다.

| 티어 | 제한 | 일반적인 메서드 |
| --- | --- | --- |
| 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`: 1/초 |

추가 제한:

- **Web API**: 단기 스로틀을 사용한 버스트 제한
- **Events API**: 3회 배달 재시도
- **Incoming Webhooks**: 웹훅 URL당 1 메시지/초
- **Block Kit**: 메시지당 최대 50 블록

채널 게시 속도

동일한 채널에 게시하는 것은 약 초당 1 메시지로 제한됩니다. 속도 제한을 피하려면 알림을 배치 처리하거나 스레드를 사용하십시오.

## 문제 해결

### 일반적인 문제

| 문제 | 원인 | 해결 방법 |
| --- | --- | --- |
| `not_authed` | 잘못된 봇 토큰 | 앱을 재설치하고 새 봇 토큰 복사 |
| `channel_not_found` | 봇이 채널에 없음 | 봇을 대상 채널에 초대 |
| `missing_scope` | 필수 범위가 부여되지 않음 | 범위를 추가하고 앱 재설치 |
| 이벤트가 수신되지 않음 | 이벤트 구독이 설정되지 않음 | Event Subscriptions URL 구성 |
| 상호작용 시간 초과 | 응답이 3초 초과 | 즉시 200으로 응답하고 비동기 처리 |

### 디버그 모드

자세한 로깅 활성화:

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

### 연결 테스트

```bash
tajo connectors test slack
# ✓ 봇 토큰 유효함
# ✓ 워크스페이스 접근 가능
# ✓ 채널 읽기 가능
# ✓ 메시지 게시 활성화됨
# ✓ 이벤트 구독 활성 상태
```

## 모범 사례

1. **Block Kit 사용** - Slack의 Block Kit 프레임워크로 풍부하고 대화형 메시지 구축
2. **빠른 응답** - 3초 이내에 상호작용을 확인하고 비동기로 처리
3. **관련 메시지를 스레드화** - 노이즈를 줄이기 위해 관련 알림을 스레드로 그룹화
4. **채널별 라우팅** - 다양한 이벤트 유형을 적절한 팀 채널로 전송
5. **액션 버튼 포함** - 고객 데이터에 빠르게 접근할 수 있도록 “View in Brevo” 버튼 추가
6. **언퍼링 구현** - Slack에서 공유된 Brevo 링크에 대한 풍부한 미리보기 표시

## 보안

- **봇 토큰** - 세분화된 권한이 있는 OAuth 범위 액세스 토큰
- **요청 서명** - 들어오는 요청에 대한 HMAC SHA-256 서명 확인
- **OAuth 2.0** - 다중 워크스페이스 배포를 위한 업계 표준 인증
- **TLS 암호화** - HTTPS를 통한 모든 API 통신 암호화
- **토큰 교체** - 향상된 보안을 위한 자동 토큰 교체

## 관련 리소스

- [Slack API 문서](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 커넥터](https://tajo.io/kr/docs/connectors/marketing/brevo)
- [고객 동기화 스킬](https://tajo.io/kr/docs/skills/data-sync/customer-sync)
