멘션에 응답하는 슬랙 봇 만들기steemCreated with Sketch.

in hive-101145 •  2 years ago  (edited)

사진: 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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!