본문으로 건너뛰기

구글 앱 스크립트를 이용한 슬랙 AI 봇 구현 가이드

image-20241104-070152.png

이 가이드는 별도 서버 구축 없이 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 앱 생성

  1. Slack API 웹사이트에 접속합니다.

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

    image-20250106-022432.png

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

    image-20250610-091039.png

3.2. 권한 설정

  1. OAuth & Permissions 메뉴로 이동합니다.

    image-20250106-022622.png
  2. Scopes 섹션에서 아래 권한을 추가합니다

    • chat:write: 메시지 전송 권한

    • reactions:write: 이모지 추가 및 삭제 권한

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

    image-20250106-022928.png

    image-20250106-022959.png


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

    image-20250106-023104.png
  2. 슬랙 관리 메뉴

    1. 설치된 앱으로 이동하여 앱을 선택합니다.

      image-20250106-024037.png
    2. 앱 세부정보 클릭하여 진입합니다.

      image-20250106-024110.png

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

      image-20250106-024110.png

      image-20250106-024352.png


3.3. Event Subscriptions 설정

  1. Event Subscriptions 메뉴로 이동합니다.

    image-20250106-023412.png
  2. Enable Events를 활성화합니다.

    image-20250106-023428.png

    image-20250106-023445.png

  3. Request URL에 Google Apps Script에서 생성할 웹 앱 URL을 입력합니다.

    1. 해당 영역의 URL은 구글 앱 스크립트에서 코드 배포 후 생성된 URL을 입력합니다.

      image-20250106-023508.png
  4. 아래 이벤트를 추가합니다

    • app_mention: Slack에서 봇이 멘션될 때 트리거됩니다.

      image-20250106-023550.png


3.4. App Home 설정

  • Always Show My Bot as Online 을 활성화 합니다.
image-20250610-091430.png



4. Google Apps Script 설정

4.1. Google Apps Script 프로젝트 생성

  1. Google Apps Script에 접속합니다.

  2. 새 프로젝트를 생성합니다.


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. 웹 앱으로 배포

  1. 상단 메뉴에서 Deploy > New Deployment를 클릭합니다.

  2. 웹 앱(Web App) 을 선택합니다.

  3. 배포 URL을 복사하여 Slack의 Event Subscriptions에 입력합니다.


5. 테스트 및 실행


5.1. Slack에서 테스트

  1. Slack에서 앱을 멘션하여 메시지를 전송합니다
  • 예: @LaaS 안녕?
  1. Google Apps Script를 통해 LaaS API가 호출되고 응답이 Slack에 표시됩니다.

6. 문제 해결

6.1. 응답이 표시되지 않는 경우

  • Google Apps Script 배포 URL이 정확히 설정되었는지 확인합니다.

  • LaaS API Key 및 프로젝트 이름이 올바른지 확인합니다.

6.2. 쓰레드와 히스토리가 연결되지 않는 경우

  • 채널 및 쓰레드별 히스토리가 관리되도록 getConversationHistory와 saveConversationHistory 함수를 점검합니다.

이 가이드를 통해 Slack 내에서 생성형 AI 봇을 구현하고 업무 효율성을 극대화하세요! LaaS와 Google Apps Script의 강점을 활용해 손쉽게 설정할 수 있습니다. 추가 정보는 LaaS 공식 문서에서 확인하세요. 😊