Skip to content

Latest commit

 

History

History
159 lines (64 loc) · 5.62 KB

slackapp.md

File metadata and controls

159 lines (64 loc) · 5.62 KB

Slack으로 메시지 전송

Slack API

Slack의 대화방에 메시지를 전송하기 위해서는 Slack Token이 필요합니다.

  1. Slack api에 접속합니다.

https://api.slack.com/apps?new_app=1

아래에서 [From scratch]를 선택합니다.

noname

  1. [Name app & choose workspace]에서 App Name으로 "storybot"으로 입력하고, [Pick a workspace to develop your app in:] 에서 현재 사용하고 있는 Slack의 Workspace를 지정합니다. 여기서는 본 데모를 위해 "Storytime"이라는 workspace를 위해 생성 하였습니다.

noname

  1. 왼쪽 메뉴에서 OAuth&Permission을 선택합니다.

noname

  1. 아래로 스크롤하여 [Scopes] - [Bot Token Scopes]에서 [Add on OAuth Scope]를 선택합니다.

noname

아래로 이동해 "Chat:write"을 선택합니다.

noname

  1. [OAuth Tokens for Your Workspace] 에서 [Install to Workspace]를 선택합니다.

noname

  1. [Allow] 를 선택합니다.

noname

  1. 아래처럼 화면이 전환되면 [Copy]를 선택해서, [Bot User OAuth Token]을 복사 합니다.

noname

  1. 복사한 Token은 [Lambda] - [Functions] - [labda-storytime-for-slack]의 [Configuration] - [Environment variables]로 이등해서 등록하여 사용하여야 합니다.

noname

아래와 같이 "token"이라는 key로 등록합니다.

noname

소스에 토큰을 하드코딩하여 Github에 공유하면, Slack이 이를 확인하여 자동으로 해당 토큰을 정지합니다. 테스트 용도라도 토큰과 같은 중요한 정보는 Environment variable로 관리하는것이 좋습니다.

  1. Slack의 "storytime" channel에서 아래와 같이 "/invite @storybot" 이라고 입력해서 chatbot을 등록 합니다.

noname

  1. storytime서버에 이미지를 전송하면 slat으로 아래처럼 전달되는지 확인 합니다.

noname

Troubleshooting for lambda

Node.js로 코드 구현하여 Lambda에 포팅하여 테스트시, Incoming Webhook과 Slack apps 방식 모두에서 정상적으로 메시지를 수신하지 못하는 현상이 발생하였습니다. 로그 분석을 통해 원인이 API 호출후 응답을 받기 전에 Lambda가 종료됨으로 인하여 API 호출이 완료되지 않아서 Slack에서 중지한것으로 보여집니다. 관련하여 Lambda 사용시 javascript event loop에 대한 posting을 참조하여, 아래처럼 Lambda를 강제로 종료시키지 않는 방법으로 해결하였습니다.

  function wait(){
    return new Promise((resolve, reject) => {
      if(!isCompleted) {
        setTimeout(() => resolve("wait..."), 1000)
      }
      else {
        setTimeout(() => resolve("done..."), 0)
      }
    });
  }
  console.log(await wait());
  console.log(await wait());
  console.log(await wait());
  console.log(await wait());
  console.log(await wait());

Troubleshooting for slackapp

만약 slack app의 token이 업데이트 되어서, token을 재발급 할 경우에 아래를 따릅니다.

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

https://api.slack.com/

  1. 우측 상단의 Your apps를 선택하면 아래처럼 "storybot"이 나옵니다. "storybot"을 선택하여 진입합니다.

image

  1. 왼쪽 메뉴에서 [OAuth & Permissions]을 선택합니다.

noname

  1. [OAuth Tokens for Your Workspace]에서 새로 Token을 생성합니다.

noname

  1. [Reinstall to Worksapce]를 선택하고 이후 나오는 화면에서 Allow를 선택합니다.

image

  1. Slack의 해당 채팅방에서 "/invite @"을 입력하면 아래처럼 storybot이 노출 됩니다. 여기서 storybot을 등록하면 등록이 완료됩니다.

noname

만약 slack 실행시 "not_in_channel"이라는 에러 발생시 6번 과정을 다시 실행해 봅니다.