Slack 커넥터

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

개요

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

기능

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

사전 요구 사항

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

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

인증

봇 토큰 (권장)

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

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

Terminal window
# 인증 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 연락처와 일치시키기 위해 필요합니다. 이것이 없으면 사용자 매핑이 표시 이름으로 제한됩니다.

구성

기본 설정

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 메서드

메시징

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

채널

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

사용자

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

상호작용

메서드엔드포인트설명
POSTviews.open모달 뷰 열기
POSTviews.update모달 뷰 업데이트
POSTreactions.add이모지 반응 추가

이벤트

Brevo-to-Slack 알림

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

Slack-to-Brevo 트리거

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

코드 예제

커넥터 초기화

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
});

마케팅 알림 전송

// 고가치 주문이 발생하면 알림 전송
await tajo.slack.notify({
channel: 'sales',
event: 'order_placed',
data: {
customerEmail: '[email protected]',
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:*\n[email protected]' },
{ 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 상호작용 처리

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 11 요청/분chat.delete, conversations.kick
Tier 220 요청/분conversations.history, users.info
Tier 350 요청/분conversations.list, users.list
Tier 4100 요청/분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으로 응답하고 비동기 처리

디버그 모드

자세한 로깅 활성화:

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

연결 테스트

Terminal window
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 통신 암호화
  • 토큰 교체 - 향상된 보안을 위한 자동 토큰 교체

관련 리소스

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI 어시스턴트

안녕하세요! 문서에 대해 무엇이든 물어보세요.