동기

저번에 만들었던 웹페이지 알림을 카톡으로 보내는 기능은 알림이 뜨지 않아서 꽤나 불편했기 때문에 이번에는 Slack이라는 앱을 이용해서 발전시켜보기로 했다.

과정

슬래커(Slacker)로 슬랙 봇 이용하기 [협업 메신저 끝판왕 슬랙(Slack) 6강]

위 사이트를 참고하여 Slacker에 가입하여 App을 만들고 (Book Alarm to Slack)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e68b8f21-deb4-44d0-8890-71e9a4cd70ef/Untitled.png

Bot Token Scopes에 chat:write와 chat:write.customize를 추가해서 봇이 메시지를 보낼 수 있도록 하였다. 봇의 이름은 'Book-Update-Alarm-Bot'로 지어줬다.

그리고 내가 만든 '#봉사활동-도서-알림'이라는 채널에 app을 추가해줬다.

→ 추가가 되면 "#봉사활동-도서-알림에 Book-Update-Alarm-Bot 님과 함께 다시 참여했습니다."라고 뜬다.

위 사이트에서 포스팅된 대로 slacker 라이브러리를 설치해서 실행해봤지만 권한 오류(invalid_auth)가 떴고 알아보니 "2021.2.24 이후로 새로 생성된 bot은 slacker 라이브러리를 이용할 수 없다"는 Slack의 정책 업데이트가 있었다.

Deprecating usage of token as a query string parameter in Web API requests

Slack의 안내에 따르면 http POST 방식으로 body부분에 token을 포함해서 보내야 한다. (아래 참고)

Using the Slack Web API

그래서 다음과 같이 코드를 변경하여 테스트 메시지를 보냈다.

import requests
import json

def post_message(token, channel_id, text):
    url = "<https://slack.com/api/chat.postMessage>"
    headers = {
        "Authorization": "Bearer " + token
    }
    data = {
        "channel": channel_id,
        "text": text,
    }

    response = requests.post(url, headers=headers, data=json.dumps(data))
    print(response)

BOT_TOKEN = 'xoxb-*************-*************-************************'

post_message(BOT_TOKEN, "#봉사활동-도서-알림", "메시지 테스트")

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a18c1197-70d4-443d-8463-7ef229163ebd/Untitled.png

성공!!

위처럼 Content-type은 적지 않아도 정상 작동하지만 나중에 메시지를 풍성하게 하고 싶어서 아래 사이트를 참고해서 추가했다.

slack 봇 메시지 풍성하게 하기, 이미지 보내기

A field guide to interactive messages