반응형
슬랙봇 개발기1, 2에서 소켓 모드를 사용하여 프로젝트를 세팅하는 방법에 대해서 서술했다.
이번에는 커맨드를 사용할 때마다 사용자에게 답장을 보내는 슬랙봇을 만들어보자 !
슬랙봇에게 메시지를 보낼 수 있도록 하려면 Features-App Home-Show Tabs-Message Tab에서
Allow users to send Slack commands and message from the messages tab에 체크를 해주어야한다.
Event subscriptions를 체크하고 app_mention과 message.im 이벤트를 구독하도록 해보자,
app_mention 이벤트는 @를 사용하여 슬랙봇을 멘션했을 때마다 message_listener에서 처리할 수 있게 되고,
message.im 이벤트를 구독하면 슬랙봇 대화창에 말을 걸때마다 message_listener에서 처리할 수 있다.
{
'envelope_id': '74c47500-a33c-43ba-b849-b216dc47d744',
'payload': {
'token': '5BqbHHQosPgHgxeA5LXAcPNX',
'team_id': 'T043853J0CX',
'api_app_id': 'A04ENV4NG1H',
'event': {
'client_msg_id': '5fe8189c-672c-48fa-9089-f5259167e909',
'type': 'message',
'text': 'hi',
'user': 'U043NJWLRAP',
'ts': '1670736778.160529',
'blocks': [{'type': 'rich_text', 'block_id': 'TOtRU', 'elements': [{'type': 'rich_text_section', 'elements': [{'type': 'text', 'text': 'hi'}]}]}],
'team': 'T043853J0CX',
'channel': 'D04F1MT6JD7',
'event_ts': '1670736778.160529',
'channel_type': 'im'
},
'type': 'event_callback',
'event_id': 'Ev04EL4MHQG5',
'event_time': 1670736778,
'authorizations': [{'enterprise_id': None, 'team_id': 'T043853J0CX', 'user_id': 'U04EP312SV8', 'is_bot': True, 'is_enterprise_install': False}],
'is_ext_shared_channel': False,
'event_context': '4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUMDQzODUzSjBDWCIsImFpZCI6IkEwNEVOVjRORzFIIiwiY2lkIjoiRDA0RjFNVDZKRDcifQ'},
'type': 'events_api',
'accepts_response_payload': False, 'retry_attempt': 0, 'retry_reason': ''
}
message.im 이벤트가 올 때마다 도착하게 되는 메시지 형식이다.
def message_listener(req):
req = json.loads(req)
if req.get("type") == "events_api":
type = req.get("payload").get("event").get("type")
channel_type = req.get("payload").get("event").get("channel_type")
if type == "message" and channel_type == "im":
socket.send_socket_mode_response(SocketModeResponse(envelope_id=req.get("envelope_id")))
text = req.get("payload").get("event").get("text")
channel = req.get("payload").get("event").get("channel")
socket.web_client.chat_postMessage(channel=channel, text="nice to meet you")
다음과 같은 메시지가 전달되게 되는 데, 메시지를 받게 되면 처음에는 ack를 반환해주어야 한다.
그 다음에 유저에게 답장을 해보자. 유저에게 답장을 하려면 bot permissions에 chat:write scope이 포함되어야 한다.
다음과 같이 유저가 말을 걸면 답장을 하는 슬랙봇이 완성되었다.
반응형
'프로젝트 > 슬랙봇' 카테고리의 다른 글
슬랙봇 개발기 ② - python slack sdk + flask 서버 구축 (0) | 2022.12.11 |
---|---|
슬랙봇 개발기 ① - 소켓 모드란 무엇일까? (0) | 2022.12.11 |