슬랙봇을 호출하면 노션에 페이지를 생성하도록 만들어보자 ( 반자동 회의록 생성기 )

Eunbin Park·2023년 7월 5일
1

Slackbot

목록 보기
1/2
post-thumbnail

계기

거의 모든 일을 슬랙으로 하다보니 슬랙봇으로 이것저것 만들게 된다... 그러다 여기까지 와버렸다.
논문을 연구실 사람이랑 함께 쓰기로 했다. 협업하려면 이것저것 셋업할 게 많은데 제일 중요한 건 역시 회의록이라고 생각했다.
노션에 둘이서 이것저것 논문 관련된 걸 정리하려고 했는데... 노션 검색이 좋지 않은 것 같기도 하고 슬랙 검색이 진짜 좋으니까 슬랙에 특정 내용을 노션에 넣으면 어떨까? 생각했다. 근데 그게 그냥 회의록이었을 뿐이고.
잘 개발해두면 나중에 무궁무진하게 써먹을 수 있을 것 같아서 만들어봤다!
슬랙봇 이름은 람쥐썬더다. 왜냐하면... 걍 졸라 멋잇어서

Notion with Slack

슬랙에 노션이 있긴 하다. 그저 내가 원하는 기능이 없었을 뿐이다.
이미 있는 노션봇(?)은 데이터베이스에 페이지 타이틀정도만 설정해서 만들 수 있고 결국 내용은 내가 직접 노션에 들어가서 넣어야한다.

초안
나의 작고 소중한 초안

나는 내가 원하는 데이터베이스에, 내가 원하는 내용이 들어갔으면 했다.
첨엔 workflow로 만들어서 누구나 호출한 사람이 원하는 데이터베이스에 본인이 원하는 글을 넣을 수 있게 하려고 했으나...
일단 제일 중요한 건 논문이니 슬랙-노션 시간을 조금만 쏟자고 생각해서 최소한으로만 구현했다.
그래서 아직은 내 데이터베이스밖에 못쓴다 ㅎ

호출하면 울리는

내가 원하는 프로세스는 초안이든 지금의 형태든 크게 보면 결국 3단계다
1. 노션봇을 부른다
2. 페이지 제목과 내용을 얘기한다.
3. 노션봇은 2를 업로드하고 나에게 주소를 준다.

그럼 workflow가 아닌 @멘션 기능으로 만들기로 했으니 슬랙봇을 만들어준다. 이 주소에서 Create New App으로 From scratch를 눌러 하나 맹글어준다 ! 이름과 Workspace는 원하는 곳으로 ~

호출

멘션을 하면 대답을 해주는 게 첫 번째 사항이다. 그럼 얘는 슬랙을 계속 주시하고 있다가 누가 부르면 후다닥 튀어나가 대답을 해줘야하니 이걸 먼저 설정해준다.

Socket Mode

소켓 모드를 켜준다. Slack Bolt 를 사용해야 하기 때문에 !

Event Subscription

Basic Information -> Event Subsciptions

Event Subscription 에서 다음과 같이 설정해준다. 이 설정은 내 마음대로 했고 혹여나 이 글을 읽고 만들어 보실 분은 Description을 읽고 설정해주면 좋을 것 같다 !

App-Level Tokens

Basic Information -> App-Level Tokens

여기서 나오는 Token은 이따가 코드에 적용해야 한다. 한 번 보고 다신 못 보는 토큰은 아니니까 굳이 지금 저장 안 해도 괜찮다.

Token Name은 난 그냥 Notion으로 써줬다. 지금 이 슬랙봇을 만드는데 크게 중요하지 않은 거 같다.

OAuth & Permission

슬랙봇이 채팅창에 글을 쓸 수 있는 허가를 내어주어야 한다.
왼쪽 Features의 OAuth & Permission에 들어가 스크롤을 조금 하면 Scope 이 나오는데, 나는 다음과 같이 설정했다. 뭐 하나하나 의미가 있는 건 아니고 일단 기본적인 것만 해두었따. 나중에 추가할 게 있거나 제거해야한다면 언제든 들어와서 수정하면 되니까 괜찮다.

이제 스크롤을 위로 해서 OAuth Tokens for Your Workspace 의 Install to Workspace 버튼을 눌러준다. 권한이 바뀔 때마다 Reinstall 해야한다! 이 토큰도 추후 사용한다. 하지만 한 번 보고 사라지는 토큰이 아니니까 복사에 연연하지 않아도 된다 !

Notion API

노션 API 설정도 해야한다 아이고 귀찮아
일단 노션에 데이터베이스를 생성해야 한다. 요건 너무 쉬우니 사진 한 장으로 패스!

API 생성

노션 에 로그인을 한다. 로그인 후 이 주소로 접속한다.
그럼 다음과 같은 창이 뜨는데, 왼쪽에 새 API 통합 버튼을 누른다

내가 이미 만든 데이터베이스가 어디 워크스페이스에 있는지 확인하고, 이름을 정해준 다음 제출 버튼을 누른다 ( 제출 버튼 불-편...)

제출하면 API 키를 보여준다. 다음에 또 볼 수 있으므로 저장에 강박을 갖지 않아도 된다 아이조아

왼쪽 기능 탭에서 원하는 걸 설정해준다.

그러면 설정 끝!

Database 연결

아래 사진처럼 데이터베이스가 있는 페이지에 가서 우상단에서 Add Connections에 간 후 방금 만든 API 이름을 검색해 추가한다. Confirm 하면 추가된당

내 데이터베이스 아이디는 아래와 같이 데이터베이스 링크를 확인하면 알 수 있는데,

아래와 같은 링크에서 a0a845c8a4de40aea1ea88630d6c9057 이 부분이 내 데이터베이스 아이디이다.
https://www.notion.so/a0a845c8a4de40aea1ea88630d6c9057?v=e0b519222d1e46ea801037470adc2d90&pvs=4

중간점검

슬랙봇과 노션은 모두 마쳤으니 이 두 과정을 거치며 저장해야하는 key ( 혹은 token ) 은 네 가지다.
1. 노션 API KEY: api 생성 후 시크릿 탭에서 확인 가능
2. 노션 데이터베이스 아이디: 데이터베이스 링크에서 확인 가능
3. 슬랙봇 토큰: 슬랙봇 만든 후 Settings -> Install App 에서 확인 가능 ( xoxb 로 시작 )
4. 슬랙앱 토큰: 슬랙봇 만든 후 Settings -> Basic Information -> App-Level Tokens에서 확인 가능 ( xapp으로 시작 )

Python 코드 짜기

요구사항

내가 원하는 건 간단하다.
1. 노션에서 지원하는 기능 ( heading, bullet/number list 등의 활용 )
2. 내가 슬랙에 글을 쓰면 그게 데이터베이스에 한 페이지로 가기
3. 노션에 페이지가 생성됐으면 나에게 알려주기

멘션하면 답하는

@슬랙봇 hello world? 를 하면 슬랙봇이 대답해주기만 하면 된다. 이건 slack_bolt로 엄청 쉽게 구현이 가능하다.

import os
import re

from dotenv import load_dotenv
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler


# Initializes your app with your bot token and socket mode handler
load_dotenv()
SLACK_BOT_TOKEN = os.environ.get("SLACK_BOT_TOKEN", "")
SLACK_APP_TOKEN = os.environ.get("SLACK_APP_TOKEN", "")

assert SLACK_BOT_TOKEN and SLACK_APP_TOKEN, "Missing Slack tokens"

# visit https://slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html
app = App(token=SLACK_BOT_TOKEN)

logger = logging.getLogger(__name__)


@app.event("app_mention")
def handle_app_mention_events(body, say):
    say("Hello?")


# Start your app
if __name__ == "__main__":
    SocketModeHandler(app, SLACK_APP_TOKEN).start()

서기관

람쥐썬더 호출 후 작성한 모든 문서를 노션에 작성해야한다.
이게 최고난이도였다.
이건 TBU...글 작성 천천히 해야즹

Heading

Image

Tag

Numbered / Bulleted List Items

아직은 구현 못한 것들...

  • bulleted / numbered 리스트도 첫 번째만 가능하지 탭 해서 안쪽으로 들어가는 그거... 그거는 구현을 못했다...
  • 코드 블락 구현도 아직...흑흑
  • 페이지 Attendance 사람 이름 넣기... 흐흑
  • 페이지 생성만 되고 이미 있는 페이지 수정은 아직...ㅎ.ㅡ흐흑ㅎ긓ㄱ

결과


완 전 맘에들어~

1개의 댓글

comment-user-thumbnail
2023년 8월 14일

최고!!

답글 달기