구글 앱 스크립트를 이용한 슬랙 AI 봇 구현 가이드
이 가이드는 별도 서버 구축 없이 Google Apps Script를 이용해 Slack에서 LaaS(LLM as a Service) 의 생성형 AI 기능을 활용하는 봇을 구현하는 방법을 제공합니다. 이 가이드를 통해 Slack 워크스페이스 내에서 GPT-4o 기반 AI 봇을 간단히 설정하고 사용할 수 있습니다.
1. 이 가이드의 목적과 강점
- 
별도 서버 없이 구현: Google Apps Script를 사용하므로 별도의 서버를 설정할 필요가 없습니다.
 - 
손쉬운 Slack 통합: Slack 워크스페이스와 LaaS API를 연동해 강력한 AI 봇을 구축할 수 있습니다.
 - 
자동화 및 효율성 강화: Slack에서 생성형 AI를 활용하여 질문 응답, 작업 자동화, 대화 관리 등을 구현할 수 있습니다.
 - 
개발자의 도움 없이 구현 가능: GPT-4o를 활용하여 LaaS API와 Slack을 연 결하는 데 필요한 코드를 자동 생성하거나 쉽게 적용할 수 있어, 기술적인 지식이 없어도 AI 봇을 설정할 수 있습니다.
 
2. LaaS 설정 (선행 작업)
Slack 봇에서 사용할 AI 모델과 프리셋을 설정하기 위해 아래 문서를 참고하세요
프리셋 생성 후, 아래 내용을 준비합니다
- 
LaaS API Key: LaaS에서 제공하는 API 키
 - 
프로젝트 이름(Project Name): API 호출 시 사용
 
3. Slack 설정
3.1. Slack 앱 생성
- 
Slack API 웹사이트에 접속합니다.

 - 
우측 상단에서 “Create New App” 버튼을 클 릭합니다.

 - 
From Scratch 옵션을 선택하고 앱 이름과 워크스페이스를 입력합니다.

 
3.2. 권한 설정
- 
OAuth & Permissions 메뉴로 이동합니다.

 - 
Scopes 섹션에서 아래 권한을 추가합니다
- 
chat:write: 메시지 전송 권한
 - 
reactions:write: 이모지 추가 및 삭제 권한

 
 - 
 - 
OAuth Tokens에서 Install to
{{스페이스명}}를 클릭합니다.

 
- 
설치 후 생성된 OAuth Token을 복사합니다.

 - 
슬랙 관리 메뉴
- 
설치된 앱으로 이동하여 앱을 선택합니다.

 - 
앱 세부정보 클릭하여 진입합니다.

 - 
슬랙에서 열기 를 클릭하여 설치합니다.


 
 - 
 
3.3. Event Subscriptions 설정
- 
Event Subscriptions 메뉴로 이동합니다.

 - 
Enable Events를 활성화합니다.


 - 
Request URL에 Google Apps Script에서 생성할 웹 앱 URL을 입력합니다.
- 
해당 영역의 URL은 구글 앱 스크립트에서 코드 배포 후 생성된 URL을 입력합니다.

 
 - 
 - 
아래 이벤트를 추가합니다
- 
app_mention: Slack에서 봇이 멘션될 때 트리거됩니다.

 
 - 
 
3.4. App Home 설정
- Always Show My Bot as Online 을 활성화 합니다.
 

4. Google Apps Script 설정
4.1. Google Apps Script 프로젝트 생성
- 
Google Apps Script에 접속합니다.
 - 
새 프로젝트를 생성합니다.
 
4.2. 코드 작성
아래 코드를 복사하여 Google Apps Script 에디터에 붙여넣습니다
var SLACK_TOKEN = "xoxb-your-slack-token"; // Slack OAuth Token
var LAAS_API_KEY = "your-laas-api-key"; // LaaS API Key
var PROJECT_NAME = "your-project-name"; // LaaS 프로젝트 이름
function doPost(e) {
  var params = JSON.parse(e.postData.contents);
  if (params.type === "url_verification") {
    return ContentService.createTextOutput(params.challenge);
  }
  if (params.event && params.event.type === "app_mention") {
    var channel = params.event.channel;
    var userMessage = params.event.text.replace(/<@.*?-->/, '').trim();
    var threadTs = params.event.thread_ts || params.event.ts;
    var history = getConversationHistory(channel, threadTs);
    history.push({ role: "user", content: userMessage });
    var response = callLaaSAPI(history);
    history.push({ role: "assistant", content: response });
    saveConversationHistory(channel, threadTs, history);
    sendMessageToSlack(channel, response, threadTs);
  }
}
function callLaaSAPI(history) {
  var apiUrl = "https://api-laas.wanted.co.kr/api/preset/v2/chat/completions";
  var payload = {
    model: "gpt-4o",
    messages: history,
    hash: "unique-hash-code"
  };
  var options = {
    method: "post",
    contentType: "application/json",
    headers: {
      project: PROJECT_NAME,
      apiKey: LAAS_API_KEY
    },
    payload: JSON.stringify(payload)
  };
  var response = UrlFetchApp.fetch(apiUrl, options);
  var json = JSON.parse(response.getContentText());
  return json.choices[0].message.content;
}
function sendMessageToSlack(channel, message, threadTs) {
  var slackUrl = "https://slack.com/api/chat.postMessage";
  var payload = {
    channel: channel,
    text: message,
    mrkdwn: true,
    thread_ts: threadTs
  };
  var options = {
    method: "post",
    contentType: "application/json",
    headers: { Authorization: "Bearer " + SLACK_TOKEN },
    payload: JSON.stringify(payload)
  };
  UrlFetchApp.fetch(slackUrl, options);
}
function getConversationHistory(channel, threadTs) {
  var cache = CacheService.getUserCache();
  var key = channel + ":" + threadTs;
  var history = cache.get(key);
  return history ? JSON.parse(history) : [];
}
function saveConversationHistory(channel, threadTs, history) {
  var cache = CacheService.getUserCache();
  var key = channel + ":" + threadTs;
  cache.put(key, JSON.stringify(history), 300);
}
4.3. 웹 앱으로 배포
- 
상단 메뉴에서 Deploy > New Deployment를 클릭합니다.
 - 
웹 앱(Web App) 을 선택합니다.
 - 
배포 URL을 복사하여 Slack의 Event Subscriptions에 입력합니다.
 
