ai-startup
CHAPTER 49 / 100
읽기 약 2분
FUNCTION
Slack/Discord 봇: AI 팀 어시스턴트
핵심 개념
Slack App·Discord Bot·slash 명령·AI 통합 — 팀 도구.
본문
Slack App 셋업
1. https://api.slack.com/apps → Create New App
2. From scratch → 이름·workspace
3. Features:
- Bot Token Scopes: chat:write, app_mentions:read
- Slash Commands: /askai
- Event Subscriptions: app_mention
4. Install to Workspace
5. Bot Token 저장 (xoxb-...)Slack Bot — Bolt.js
import { App } from '@slack/bolt';
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: true,
appToken: process.env.SLACK_APP_TOKEN,
});
// Slash Command — /askai
app.command('/askai', async ({ command, ack, respond }) => {
await ack();
const result = await generateText({
model: anthropic('claude-sonnet-4-6'),
prompt: command.text,
});
await respond({
text: result.text,
response_type: 'in_channel', // 모두에게 보여줌 (또는 'ephemeral')
});
});
// Mention 응답 — @AI Bot
app.event('app_mention', async ({ event, say }) => {
const cleanText = event.text.replace(/<@[^>]+>/, '').trim();
const result = await generateText({
model: anthropic('claude-sonnet-4-6'),
prompt: cleanText,
});
await say({
text: result.text,
thread_ts: event.ts, // thread로 답변
});
});
await app.start();
console.log('⚡️ Bot running');Discord Bot — discord.js
import { Client, GatewayIntentBits, Events } from 'discord.js';
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
});
client.on(Events.MessageCreate, async (message) => {
if (message.author.bot) return;
if (!message.mentions.has(client.user!.id)) return;
const content = message.content.replace(/<@\d+>/, '').trim();
await message.channel.sendTyping();
const result = await generateText({
model: anthropic('claude-sonnet-4-6'),
prompt: content,
});
await message.reply(result.text);
});
client.login(process.env.DISCORD_TOKEN);회사 위키 RAG (Slack)
// 회사 문서로 RAG 셋업 (Notion·Confluence)
app.command('/wiki', async ({ command, ack, respond }) => {
await ack();
// 1. 임베딩 검색
const docs = await searchKnowledgeBase(command.text);
// 2. LLM에 컨텍스트
const result = await generateText({
model: anthropic('claude-sonnet-4-6'),
system: `Answer based ONLY on the company wiki. Cite sources.`,
prompt: `Wiki context:
${docs.map(d => `- ${d.title}: ${d.content}`).join('\n\n')}
Question: ${command.text}`,
});
await respond({
text: result.text,
blocks: [
{
type: 'section',
text: { type: 'mrkdwn', text: result.text },
},
{
type: 'context',
elements: docs.map(d => ({
type: 'mrkdwn',
text: `📄 <${d.url}|${d.title}>`,
})),
},
],
});
});Workflow Trigger
// 코드 리뷰 자동 — PR 열림 시 Slack 알림 + AI 요약
app.event('app_home_opened', async ({ event, client }) => {
// 사용자 홈 탭 - dashboard 같은 UI
});
// Reaction 트리거 — 🤖 이모지 → AI 답변
app.event('reaction_added', async ({ event, client }) => {
if (event.reaction !== 'robot_face') return;
const message = await client.conversations.history({
channel: event.item.channel,
latest: event.item.ts,
limit: 1,
inclusive: true,
});
const text = message.messages[0].text;
const result = await generateText({
model: anthropic('claude-sonnet-4-6'),
prompt: `Analyze this Slack message: "${text}"`,
});
await client.chat.postMessage({
channel: event.item.channel,
thread_ts: event.item.ts,
text: `🤖 ${result.text}`,
});
});수익화
[B2B SaaS]
- 회사 단위 라이선스
- $20/user/mo
[Enterprise]
- 자체 호스팅 옵션
- SSO·SAML
- $500+/mo
→ Slack 봇은 B2B 자연스러움
→ 일반 SaaS보다 retention 높음 (이탈 어려움)다음 챕터
CH.50 "AI 도구 종합".
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
무료
월 $0 — 검증·시작 단계
Slack Discord 봇을 무료 도구만으로 시작하는 방법을 알려줘.
소자본
월 $20~50 — MVP·초기 운영
월 $20~50 예산으로 Slack Discord 봇을 검증·MVP 단계까지 진행하는 전략은?
프로덕션
월 $200~500 — 성장 단계
Slack Discord 봇을 프로덕션 단계로 확장할 때 필요한 도구·운영 체계는?
스택
풀스택 — 도구 조합 분석
2026년 Slack Discord 봇 관련 도구 5개를 조합한 추천 스택을 알려줘.
⭐ 이것만 기억하세요
Slack/Discord 봇: AI 팀 어시스턴트는 이 3가지만 확실히 잡으세요
1.Slack/Discord 봇 = B2B AI SaaS 자연스러운 진입
2.Slash 명령 + Mention + Reaction = 다양한 트리거
3.B2B 라이선스 ($20/user) = 1인 창업가 좋은 수익 모델
공유하기
진행도 49 / 100