사진: Unsplash 의 Pankaj Patel
매니페스트를 사용하여 앱 만들기
미리 정의된 매니페스트를 사용하여 앱을 생성하려면 다음 단계를 따릅니다.
api.slack.com/apps 링크를 클릭하여 앱 생성 메뉴로 이동합니다.
From an app manifest를 선택합니다.
워크스페이스를 선택한 후 [Next] 버튼을 클릭합니다.
아래에 제공된 입력 필드에 아래 매니페스트 구성을 붙여 넣고 [Next] 버튼을 클릭합니다.
다음은 제공된 매니페스트입니다.
_metadata:
major_version: 1
minor_version: 1
display_information:
name: MentionBot
description: Receive app mentions and respond instantly
background_color: "#11359e"
features:
app_home:
home_tab_enabled: false
messages_tab_enabled: true
messages_tab_read_only_enabled: true
bot_user:
display_name: MentionBot
always_online: true
oauth_config:
scopes:
bot:
- app_mentions:read
- chat:write
settings:
event_subscriptions:
bot_events:
- app_mention
interactivity:
is_enabled: true
org_deploy_enabled: false
socket_mode_enabled: true
입력한 구성이 요약과 일치하는지 검토하고 확인한 후 [Create] 버튼을 클릭합니다.
미리 구성된 매니페스트를 사용하여 매우 짧은 시간에 슬랙 앱을 생성했습니다.
원하는 경우 앱 매니페스트 API를 사용하여 프로그래밍 방식으로 앱을 생성할 수도 있습니다.
Event Subscriptions 메뉴로 이동하여 Subscribed 된 이벤트와 Scope에 필요한 권한이 모두 추가되었는지 확인할 수 있습니다.
미리 정의된 매니페스트가 없는 경우, 앱을 생성한 후 각 메뉴에 직접 들어가서 하나씩 추가해야 합니다.
app_mention 이벤트를 캡처하고 응답하는 방법
이전에는 슬랙 봇이 앱 채널에서 멘션되었을 때만 반응했지만, 이제는 일반 채널에서도 멘션 하면 슬랙 봇이 응답합니다.
이를 위해서는 app_mention 이벤트를 캡처해야 합니다.
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
# Install the Slack app and get xoxb- token in advance
app = App(token=os.environ["SLACK_BOT_TOKEN"])
@app.event("app_mention")
def event_app_mention(body, say):
print(body)
say("Hi there!")
if __name__ == "__main__":
SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
위 코드에서 event_app_mention 함수가 app_mention 이벤트를 캡처하고 처리합니다. 이 함수는 슬랙 봇에게 멘션 되었을 때 동작합니다. 이벤트가 발생하면 함수 내부에서 say() 함수를 호출하여 슬랙 봇이 응답할 수 있도록 합니다.
이제 코드를 실행하고 일반 채널에서 슬랙 봇을 멘션해보세요. 슬랙 봇이 응답하는 것을 확인할 수 있습니다.
함수 event_app_mention이 app_mention 이벤트에 의해 트리거 되면, 이벤트에 대한 정보가 포함된 body 매개 변수를 수신합니다. body 매개 변수는 다음 데이터를 포함하는 JSON 형식의 문자열입니다:
{
"token": "4gbsaFnuIVoWnF3PkVtBNx41",
"team_id": "T4HCGFNBX",
"api_app_id": "A04PZT188QM",
"event": {
"client_msg_id": "2c1e312c-0a78-4a32-8293-259599542ffb",
"type": "app_mention",
"text": "<@U04Q00YJJS1> 안녕",
"user": "UBBBLQHT4",
"ts": "1677412514.103329",
"blocks": [
{
"type": "rich_text",
"block_id": "Cyp",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "user",
"user_id": "U04Q00YJJS1"
},
{
"type": "text",
"text": " 안녕"
}
]
}
]
}
],
"team": "T4HCGFNBX",
"channel": "C4H7VG4UT",
"event_ts": "1677412514.103329"
},
"type": "event_callback",
"event_id": "Ev04RPFHQ2C9",
"event_time": 1677412514,
"authorizations": [
{
"enterprise_id": None,
"team_id": "T4HCGFNBX",
"user_id": "U04Q00YJJS1",
"is_bot": True,
"is_enterprise_install": False
}
],
"is_ext_shared_channel": False,
"event_context": "4-eyJldCI6ImFwcF9tZW50aW9uIiwidGlkIjoiVDRIQ0dGTkJYIiwiYWlkIjoiQTA0UFpUMTg4UU0iLCJjaWQiOiJDNEg3Vkc0VVQifQ"
}
이 body 매개 변수에는 이벤트를 트리거 한 메시지의 team_id, user 및 text와 같은 정보가 포함됩니다. 이 정보에 액세스 하여 봇에서 적절한 응답을 생성하는 데 사용할 수 있습니다.
결론
이제 멘션을 감지하고 응답하는 슬랙 봇을 만들었습니다. 앱 매니페스트를 사용하여 앱을 생성하는 방법과 app_mention 이벤트를 캡처하고 처리하는 방법을 배웠습니다. 이제 이 기능을 활용하여 봇을 보다 유용하게 만들 수 있습니다.
이 글이 마음에 드셨다면 투표와 리블로그를 눌러 저의 글을 더 많은 분들과 공유해주세요. 그리고 이와 같은 콘텐츠를 더 보고 싶으시다면 @anpigon을 팔로우해주세요.
읽어주셔서 감사합니다!
티스토리에서 작성하였습니다.
원본 글: https://anpigon.tistory.com/255