Slack AI 챗봇 만들기: OpenAI API와 Node.js로 시작하는 실전 튜토리얼
AI
마지막 업데이트

Slack AI 챗봇 만들기: OpenAI API와 Node.js로 시작하는 실전 튜토리얼


Slack AI 봇이 유용한 이유는, 팀이 이미 일하는 곳으로 어시스턴트를 직접 가져올 수 있기 때문입니다.

브라우저 탭을 오가며 질문하는 대신, Slack 안에서 요약, 오류 분석, 코드 설명, 내부 워크플로 보조를 바로 받을 수 있습니다. 그래서 커스텀 봇은 많은 팀에서 일반적인 브라우저형 AI보다 더 실용적일 수 있습니다.

이 글은 Node.js, Slack Bolt, OpenAI API를 이용해 기본적인 Slack AI 봇을 만드는 흐름을 정리한 가이드입니다. 팀에서 실제로 Slack 봇을 운영해 보니, 장애 알림 채널에서 “@bot 이 에러 로그 요약해줘”라고 치면 5초 안에 핵심 원인과 관련 문서 링크를 돌려주는 것이 가장 유용했습니다. 브라우저 탭을 오가는 시간이 하루 30분 이상 줄었습니다.


첫 버전은 무엇만 하면 될까

처음엔 단순하게 시작하는 편이 좋습니다.

좋은 첫 버전은 보통 이 정도면 충분합니다.

  • 멘션을 받기
  • 사용자 메시지를 OpenAI에 보내기
  • 답변을 thread로 돌려주기
  • 오류를 로그에 남기기

이 정도만 해도 retrieval이나 내부 도구 연동을 붙이기 전에, 이 워크플로가 실제로 유용한지 확인할 수 있습니다.

시작 전에 필요한 것

필요한 것은 세 가지입니다.

  1. 로컬에 Node.js가 설치된 환경
  2. OpenAI API 키
  3. Slack 앱을 만들거나 설치할 수 있는 워크스페이스

이 세 가지가 준비되면 나머지는 연결 작업에 가깝습니다.

1. Slack 앱 만들기

Slack 앱 대시보드에서 새 앱을 만듭니다.

그 다음 아래를 설정합니다.

  • bot user
  • app_mentions:read
  • chat:write

설치를 마치면 xoxb-로 시작하는 bot token을 받게 됩니다.

2. 로컬 개발을 위해 Socket Mode 켜기

로컬 개발에서는 public webhook보다 Socket Mode가 훨씬 간단할 때가 많습니다.

다음을 켭니다.

  • Socket Mode
  • xapp-로 시작하는 app-level token
  • app_mention 이벤트 구독

이렇게 하면 public endpoint 없이도 로컬에서 이벤트 흐름을 바로 시험할 수 있습니다.

3. 프로젝트 의존성 설치

작은 Node 프로젝트를 만들고 패키지를 설치합니다.

npm init -y
npm install @slack/bolt openai dotenv

@slack/bolt는 Slack 연동을, 공식 openai 패키지는 모델 호출을 담당합니다.

4. Slack과 OpenAI 연결하기

첫 번째 usable version은 이벤트 핸들러 하나면 충분합니다.

import 'dotenv/config';
import { App } from '@slack/bolt';
import OpenAI from 'openai';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const app = new App({
  token: process.env.SLACK_BOT_TOKEN,
  appToken: process.env.SLACK_APP_TOKEN,
  socketMode: true,
});

app.event('app_mention', async ({ event, say }) => {
  try {
    const result = await openai.responses.create({
      model: 'gpt-4.1-mini',
      input: [
        {
          role: 'system',
          content: 'You are a practical engineering assistant. Answer clearly and keep replies concise unless the user asks for depth.',
        },
        {
          role: 'user',
          content: event.text,
        },
      ],
    });

    await say({
      text: result.output_text,
      thread_ts: event.ts,
    });
  } catch (error) {
    console.error(error);
    await say({
      text: '모델 호출 중 오류가 발생했습니다.',
      thread_ts: event.ts,
    });
  }
});

await app.start();
console.log('Slack AI bot is running.');

이 정도면 end-to-end 흐름을 검증하기엔 충분합니다.

5. 필요한 시크릿 저장하기

로컬 개발에서는 .env에 값을 넣습니다.

OPENAI_API_KEY=sk-...
SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-...

배포할 때는 이 값들을 소스 코드에 두지 말고, 호스팅 플랫폼의 환경 변수 시스템으로 옮기는 편이 좋습니다.

6. 실행하고 테스트하기

로컬에서 실행합니다.

node index.js

그 다음 Slack 채널에 봇을 초대하고, 이런 식으로 멘션해서 테스트합니다.

@MyAIAssistant useEffect를 세 줄로 설명해줘

설정이 맞으면 thread로 답변이 돌아옵니다.

언제 커스텀 Slack 봇이 더 유용해질까

첫 버전은 모델 래퍼에 가깝지만, 진짜 가치는 팀 맥락과 워크플로에서 나옵니다.

커스텀 봇이 더 강해지는 시점은 보통 이렇습니다.

  • 팀 전용 프롬프트 사용
  • 로그나 incident 요약
  • 내부 문서 기반 답변
  • SOP나 운영 절차 보조
  • Slack 안에서 협업 흐름 유지

이 지점부터는 단순 재미 기능이 아니라 실제 작업 도구가 됩니다.

초반에 자주 하는 실수

1. 처음부터 너무 큰 봇을 만들려 하기

멘션을 받고 답하는 흐름부터 검증하고, retrieval과 tool 연동은 나중에 붙이는 편이 좋습니다.

2. 너무 긴 답변을 그대로 보내기

Slack은 메신저 인터페이스라서 짧고 구조적인 답이 더 잘 맞습니다.

3. thread 동작을 무시하기

원래 대화 thread 안에서 답하게 해야 훨씬 읽기 쉽습니다.

4. 시크릿과 공개 설정을 헷갈리기

API 키와 Slack token은 절대 클라이언트 안전 값처럼 다루면 안 됩니다.

FAQ

Q. 브라우저에서 ChatGPT를 쓰면 되는데 왜 Slack 봇을 만드나요?

팀이 이미 질문하고 로그를 공유하고 협업하는 곳이 Slack이기 때문에, 그 안으로 모델을 가져오면 마찰이 크게 줄어듭니다.

Q. 첫 봇이 동작한 다음엔 무엇을 붙이면 좋을까요?

보통은 내부 문서 retrieval, 티켓 요약, 팀 전용 프롬프트 같은 기능이 가장 실용적입니다.

Q. 로컬 테스트에도 public 서버가 꼭 필요한가요?

아니요. 개발 단계에서는 Slack Socket Mode로 충분합니다.

먼저 읽어볼 가이드

검색 유입이 많은 핵심 글부터 이어서 보세요.

광고