달나라 노트

Python Slack API : slack_sdk library와 Webhook URL을 사용해서 slack bot으로 message 보내기 (WebhookClient, Slack API, Slack Webhook URL) 본문

Python/Python ETC

Python Slack API : slack_sdk library와 Webhook URL을 사용해서 slack bot으로 message 보내기 (WebhookClient, Slack API, Slack Webhook URL)

CosmosProject 2021. 9. 30. 22:48
728x90
반응형

 

 

 

 

 

Slack API 등록, Slack Webhook 등록, Slack App 생성, Slack App 설치 Link

slack_sdk library와 slack token을 사용해서 slack bot으로 message 보내기 Link

 

 

 

 

 

Slack에 message를 보낼 땐 Slack token이 아닌 Slack webhook url을 사용할 수도 있습니다.

이 방법을 사용하면 token은 필요없습니다.

 

webhook url은 Slack API 관리페이지에서 왼쪽 navigation bar에서 Incomin Webhooks를 이용하면 각 채널별로 Webhook URL을 찾을 수 있습니다.

 

 

 

from slack_sdk import WebhookClient
from slack_sdk.errors import SlackApiError

webhook_url = 'https://hooks.slack.com/services/AAA'

slack_webhook = WebhookClient(url=webhook_url)


msg = '''
This is test message using slack webhook
line 1
line 2
'''


try:
    response = slack_webhook.send(text=msg)
except SlackApiError as e:
    print(e)

그리고 코드를 위처럼 적으면 됩니다.

token을 이용할때와 다른 점은 slack_sdk library의 WebhookClient를 사용했다는 것이죠.

 

 

 

위 코드를 실행하면 이처럼 메세지가 잘 전송되는 것을 볼 수 있습니다.

 

 

 

 

 

Slack message에 mark down formatting을 적용할 수도 있습니다.

 

다음 코드를 봅시다.

from slack_sdk import WebhookClient
from slack_sdk.errors import SlackApiError

webhook_url = 'https://hooks.slack.com/services/AAA'

slack_webhook = WebhookClient(url=webhook_url)


mrkdwn_text = '''
This is test message.
> Block quote

*Bold text*

```
code block - line 1
code block - line 2\ncode block - line 3
```

`highlight`

_italicize_

~Strikethrough~

<https://www.google.com|This is link to google.com>
'''


try:
    response = slack_webhook.send(
        blocks=[
            {
                'type': 'section',
                'text': {
                    'type': 'mrkdwn',
                    'text': mrkdwn_text
                }
            }
        ]
    )
    
    print(response.status_code)
    print(response.body)
    
except SlackApiError as e:
    print(e)

위 코드에서 다른 점은 slack_webhook의 send method를 이용해 텍스트를 전송할 때 text가 아니라 blocks를 사용헀습니다.

 

blocks에서 중요한건 list 안에 dictionary의 형태로 전송할 정보를 넣는다는 것입니다.

또한 text에서 type을 보면 mrkdwn이라고 되어있으며 이것은 markdown을 의미합니다.

 

그리고 mrkdown_text라는 변수에 슬랙에 전송할 markdown 형태로 적힌 text를 적어놨습니다.

 

>, |, **, ~~ 등을 이용하면 텍스트를 bold체로 만든다던지 등의 여러 효과가 가능합니다.

 

<link_url|showing_text>를 이용하면 링크도 걸 수 있죠.

 

Slack markdown formatting에 대한 자세한 내용은 아래 링크를 참고하면 됩니다.

https://slack.com/intl/ko-kr/help/articles/202288908-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%84%9C%EC%8B%9D-%EC%A7%80%EC%A0%95

 

 

 

그리고 위 코드의 결과를 보면 아래 이미지와 같습니다.

원하는대로 markdown formatting이 된 것이 보여지며

그냥 텍스트만 보낼 때 보다 위같은 format들을 이용하면 더 가독성 좋은 메세지를 만들 수 있습니다.

 

 

 

 

...
    print(response.status_code)
    print(response.body)
...

위 부분은 slack_sdk를 이용하여 메세지를 보냈을 때 그 결과에 대한 상태값입니다.

필수적인 부분은 아니므로 무시해도 됩니다.

 

 

 

 

 

 

 

 

Slack API 등록, Slack Webhook 등록, Slack App 생성, Slack App 설치 Link

slack_sdk library와 slack token을 사용해서 slack bot으로 message 보내기 Link

 

 

 

 

 

 

 

참고 문서

slackclient library = https://slack.dev/python-slackclient/

slack_sdk library = https://pypi.org/project/slack-sdk/s

slack_sdk library example = https://ichi.pro/ko/slackbot-eul-mandeul-eo-bobsida-45570799171009

 

 

 

 

 

 

 

728x90
반응형
Comments