Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (3)

반응형

슬랙 봇에서 사용자 이벤트 수신하기

이번에는 슬랙 이벤트를 구독하고 이벤트에 반응하는 봇을 만들어 보자. 이 글은 공식 문서 "Building an app with Bold for Python"을 참고하여 작성했다.

ngrok 설치하기

로컬에서 개발하기 위해서는 Slack이 앱 이벤트를 전송하는 데 사용하는 URL를 외부로 노출해야 한다. ngrok는 로컬 컴퓨터 개발 환경을 외부에서 접속할 수 있게 외부 URL을 생성해 주는 도구이다. ngrok 공식 사이트에서 ngrok를 다운로드받아 설치한다.

포트 3000을 포워딩하도록 ngrok를 실행한다.

ngrok http 3000


ngrok를 실행하면, 외부에서 호출할 수 있는 URL https://ef5e-58-231-23-82.jp.ngrok.io 이 생성된다. etc-image-0 그리고 ngrok는 실행할 때마다 url이 계속 바뀐다. 그래서 ngrok를 실행할 때마다 URL을 확인해야한다.

이벤트 구독하기

app_home_opened 이벤트를 구독해 보자. Slack Apps Settings 페이지에서 Event Subscriptions를 선택한다. 여기에서 Slack이 앱이 구독하는 이벤트를 구독하는 URL 입력할 수 있다. 로컬 개발의 경우에는 ngrok URL을 사용한다.

Python for Bolt는 /slack/events 경로에서 들어오는 모든 요청을 수신 대기하게 된다. 그래서 요청 URL에는 ngrok URL과 /slack/events를 추가한 URL을 입력한다.

예시: https://ef5e-58-231-23-82.jp.ngrok.io/slack/events etc-image-1 URL을 입력했을 때 슬랙 봇이 잘 동작한다면 Verified 녹색 텍스트가 나타난다.

요청 URL을 저장한 스크롤을 내려 Subscribe to bot events 섹션을 찾는다. 여기서 [Add Bot User Event] 버튼을 눌러 app_home_opened를 이벤트를 검색한다. 그리고 검색된 app_home_opened를 선택하여 추가한다. etc-image-2

마지막으로 맨 아래에서 [Save Changes] 버튼을 눌러 변경사항을 저장한다. etc-image-3

여기까지 설정하면 앱에서는 app_home_opened 이벤트를 수신하기 시작한다. app_home_opened 이벤트는 사용자가 앱 홈에 진입했을 때 발생한다.

앱 홈 활성화하기

app_home_opened 이벤트를 수신하고 응답하기 위해서는 앱 홈을 활성화해야 한다.

App Home 화면으로 이동하여 스크롤을 아래로 내려서 Show Tabs 섹션을 찾는다. etc-image-4

Show Tabs 섹션에서 Home Tab을 활성화한다. etc-image-5

이벤트에 응답하기

이벤트에 응답하려면 리스너를 작성해야 한다. 리스너는 이벤트 본문, 전체 요청 페이로드와 앱을 인스턴스화하는 데 사용한 봇 토큰과 같은 정보를 담고 있는 context 객체를 내려준다.

이제 app_home_opened 이벤트가 발생했을 때, 사용자에게 Home tabview를 publish 하는 리스너를 설정해 보자.

리스너는 Python 데코레이터를 사용한다. 아래 내용을 기존 코드에 붙여 넣는다.

@app.event("app_home_opened")
def update_home_tab(client, event, logger):
  try:
    # views.publish is the method that your app uses to push a view to the Home tab
    client.views_publish(
      # the user that opened your app's app home
      user_id=event["user"],
      # the view object that appears in the app home
      view={
        "type": "home",
        "callback_id": "home_view",

        # body of the view
        "blocks": [
          {
            "type": "section",
            "text": {
              "type": "mrkdwn",
              "text": "*Welcome to your _App's Home_* :tada:"
            }
          },
          {
            "type": "divider"
          },
          {
            "type": "section",
            "text": {
              "type": "mrkdwn",
              "text": "This button won't do much for now but you can set up a listener for it using the `actions()` method and passing its unique `action_id`. See an example in the `examples` folder within your Bolt app."
            }
          },
          {
            "type": "actions",
            "elements": [
              {
                "type": "button",
                "text": {
                  "type": "plain_text",
                  "text": "Click me!"
                }
              }
            ]
          }
        ]
      }
    )
  
  except Exception as e:
    logger.error(f"Error publishing home tab: {e}")

위 코드는 샘플이다. 하지만 Block Kit Builder를 사용하려면 홈 화면을 좀 더 이쁘게 만들 수 있다.

이제 슬랙 사이드바에서 앱을 클릭하여 앱 홈으로 이동해 보자.  이제 홈이 열리면서 아래 화며과 같이 View가 표시되어야 한다.  etc-image-6 첫 번째 Python용 Bolt 앱을 빌드한 것을 축하합니다. 🎆🙌

다음 글에서는 본격적으로 슬랙에서 대화하는 봇을 만드는 과정을 설명하겠다.



etc-image-7
or
[카카오페이로 후원하기] [토스페이로 후원하기]

반응형