본문 바로가기
실무/슬랙 봇 만들기

파이썬 슬랙 봇 만들기(3-2): 파일 전송하기 > 드롭다운 메뉴 만들기

by davi_kr 2023. 4. 18.

목차

    반응형

    이전 포스팅 > 2023.04.18 - [파이썬/파이썬 활용] - 파이썬 슬랙 봇 만들기(3-2): 파일 전송하기 > 드롭다운 메뉴 만들기

     

    이번 포스팅에선 드롭다운을 만들어보겠습니다.

     

    [코드 리뷰하기]

    app.py에 아래와 같이 코드를 입력합니다.

    @app.event("app_mention")
    def event_test(say, body):
        print(body)
        word = body["event"]["blocks"][0]["elements"][0]["elements"][1]["text"].replace(
            " ", ""
        )
    
        if word == "접수":
            say(f"안녕하세요! <@{body['event']['user']}>!")
            say(
                blocks=[
                    {
                        "type": "actions",
                        "elements": [
                            {
                                "type": "static_select",
                                "placeholder": {
                                    "type": "plain_text",
                                    "text": "어떤 종류로 접수하시나요?",
                                },
                                "action_id": "select_2",
                                "options": [
                                    {
                                        "text": {
                                            "type": "plain_text",
                                            "text": "사무실",
                                        },
                                        "value": "사무실",
                                    },
                                    {
                                        "text": {
                                            "type": "plain_text",
                                            "text": "테스트 테스트",
                                        },
                                        "value": "테스트 테스트",
                                    },
                                ],
                            },
                        ],
                    }
                ],
            )

    앱에서 davi_test_bot을 호출하면 반응하도록 하는 코드인데요.

    body에서 일반 사용자가 사용한 단어를 추출하고

    그 단어가 '접수'면 그때 say 매서드로 드롭다운을 보내는 방식입니다.

    .replace(" ", "")는 혹시나 사용자가 접수라는 텍스트를 적다가 빈칸을 만드는 경우, 인식을 못할 수도 있을까봐 미리 변환해주도록 추가해뒀습니다.

    print(body)를 적어보면 이렇게 복잡하다보니....

    '접수'라는 단어 찾기가 아주 복잡합니다. (다 가려두긴 했는데.. 세 줄 정도가 그냥 빼곡하게 다 값들로 채워져 있다고 보시면 됩니다.)

    <@{body['event']['user']}> 는 슬랙에서 멘션할 때 사용되는 표현입니다.

     

    [드롭다운 elements 이해하기]

    드롭다운은 blocks 부분으로 구성됩니다.

    block에 대한 이해도가 좀 필요한데, 이건 직접 보면서 해보시는게 좋을 것 같습니다.

    https://app.slack.com/block-kit-builder/T04QWT5MTM0

    여기 링크로 들어가보시면 샘플로 만들어볼 수 있도록 페이지가 나옵니다.

    elements의 타입은 block의 종류를 의미합니다.

    (block의 종류는 section, actions, divider 등으로 위 페이지에서 확인 가능합니다.)

    elements는 block의 구성 요소를 의미하는데

    그 안에서의 type이 static_select로 아래 이미지처럼 드롭다운으로 나오는 걸 의미합니다.

    1개의 값만 선택 가능한게 특징입니다.

    placeholder는 최초에 드롭다운이 나올 때, 디폴트로 적혀있는 값을 의미합니다.

    "action_id"는 이 드롭다운이 어떤 action_id를 갖고 있는지를 의미하고 이걸 기준으로 이 다음번 행동을 연결해줄 거라 꼭 적어주셔야 합니다.

    "options"는 [] 안에 {},{} 형태로 구성되고 각각은 타입과 text로 입력되고 value는 text를 선택 했을 때, value를 어떻게 줄 것인지를 의미합니다.

    현재는 2가지 옵션만 있는데, 더 추가하고 싶으면 그 아래다가 같은 형태를 지켜가며 붙여주기만 하면 됩니다.

    아래는 예시입니다.

    이번엔 여기까지 포스팅 하겠습니다.

    반응형

    댓글