[FastAPI] 슬랙 봇을 이용하여 노션과 연동해보기 2 (with FastAPI)

hukim·2022년 6월 6일
1

Open API

목록 보기
5/11
post-thumbnail

📝 채팅하여 메시지 받아보기

슬랙 채널에 봇을 추가하여 채팅을 해보도록 한다.

{
    "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
    "challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
    "type": "url_verification"
}

기존에 유효성 검증을 위해 했던 body 메시지에 맞춰 모델을 작성하였는데
채팅을 시도했을 때 요청하는 request body는 다른 형태로 들어온다.

@app.post("/")
async def post_message(request_body: dict = Body(...)):
    print(request_body)
    response = {"challenge": request_body["event"]["text"]}
    return response

eventtext부분에 내가 쳤던 채팅 메시지들이 담겨서 내려온다.

Notion API 연동

Notion API를 이용하기 위해선 Workspace의 관리자 계정으로 시작해야한다고 하여
새로 workspace를 개설한다.

API 토큰 발급

나의 통합 목록

이름 및 워크스페이스를 지정해준다.

폼을 제출하게 되면 노션API에서 사용할 토큰을 발급해준다.

다시 노션페이지로 돌아와서 우측 상단에 Share(공유) 버튼을 눌러서 위에서 만든 API를 추가해준다.

노션 Database와 연동

테스트를 위해 데이터베이스 항목을 추가해주고 링크를 복사하여 데이터베이스 ID를 확인해준다.

복사하면 www.notion.so/ 뒤에오는 숫자들(?v= 이전)이 데이터베이스 ID라는 것을 알 수 있다.
(주의) 🤷‍♂️ 테이블 row의 링크를 복사하는게 아니라 데이터베이스의 링크를 복사해야한다!!

우선, 포스트맨으로 노션 API를 요청해본 결과

노션 페이지에 테스트라는 값이 잘 들어왔다.

슬랙 봇 메시지를 노션으로

테스트까지 마쳤으니 이제 슬랙에 채팅한 메시지를 받아와서 노션으로 등록해보기로 한다.

import requests

from fastapi import FastAPI
from fastapi import Body
import url
import config

app = FastAPI()


@app.post("/")
async def post_message(request_body: dict = Body(...)):
    print(request_body["event"]["text"])

    await set_message_notion(request_body["event"]["text"])
    return request_body["event"]["text"]


async def set_message_notion(message: str):
    request_body = {"parent": {"database_id": "752bcc48aaa646be99b9a07676b32afc"}, "properties": {"Name": {"title": [{"text": {"content": message}}]}}}
    response = requests.post(url.database_url, headers={"Authorization": f"Bearer {config.notion_token}", "Notion-Version": "2022-02-22"}, json=request_body)
    print(response.text)

우선 body에는 위에서 링크를 통해 데이터베이스 ID를 넣어주고 content부분에 슬랙에 채팅메시지를 넣어주면 된다.
토큰은 노션 API를 만들 때 받았던 토큰을 넣어준다. 그리고 헤더에 노션 버전을 반드시 추가해주어야한다.

메소드는 POST이며, url은 https://api.notion.com/v1/pages 로 요청하면 된다.

슬랙에서 채팅한 그대로 노션 데이터베이스에 등록되었다.

슬랙과 노션을 둘 다 이용하는 유저라면 유용하게 쓸 수 있지 않을까 생각이 된다.

2개의 댓글

comment-user-thumbnail
2022년 8월 18일

좋은 글 감사합니다!
진행 과정 중 질문이 생겨 댓글 남깁니다.
그럼 postman으로 post https://notion.api.com/v1/pages을 실행하여 body에 넣은 content 값이 슬랙에서 슬랙봇이 메시지를 보내고 그 content 값을 노션 데이터베이스에 추가되는게 맞을까요?

슬랙봇이 메시지 보내기까지는 잘 진행이 되었는데 슬랙봇의 메시지를 노션에 추가하는 것에 문제가 있는지 잘 안되네요 ㅠㅠ

response = requests.post(url.database_url, headers={"Authorization": f"Bearer {config.notion_token}", "Notion-Version": "2022-02-22"}, json=request_body)

여기에서 혹시 "Auhoriation": "Bearer {config.notion_token}"에서 대괄호 안에 코드를 지우고 저의 토큰값을 넣으면 될까요??
또한 슬랙봇이 노션에 보내도록 하는 코드에서 import url ,config가 no module named 'url' 'config'라고 뜨는데 해결할 수 있는 방법이 있을까요?
감사합니다!!

1개의 답글