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

파이썬 슬랙 봇 만들기(3-5): 파일 전송하기 > 슬랙에 자동으로 파일 업로드하기

by davi_kr 2023. 4. 18.

목차

    반응형

    이전 포스팅 - 2023.04.18 - [파이썬/파이썬 활용] - 파이썬 슬랙 봇 만들기(3-4): 파일 전송하기 > 견적서 생성 모달 창 만들기

     

    파이썬 슬랙 봇 만들기(3-4): 파일 전송하기 > 견적서 생성 모달 창 만들기

    이전 포스팅 - 2023.04.18 - [파이썬/파이썬 활용] - 파이썬 슬랙 봇 만들기(3-3): 파일 전송하기 > 모달 드롭다운 만들기 이번 포스팅에선 지난 시간에 이어서 모달로 견적서 정보 받는 화면을 만들어

    develop-davi-kr.tistory.com

     

    이번 포스팅에선 견적서 생성하기를 눌렀을 때, 아래와 같이 견적서 파일이 발송되는 코드를 리뷰해보겠습니다.

    01

    이 파일 자체는 실제로.. 현업에서 사용하는 거라서 열어서 보기는 어렵고 그냥 어떻게 돌아간다는 원리 설명 정도만 해보겠습니다.

    [코드 리뷰]

    @app.view("view_4")
    def handle_submission(ack, body, client, view, logger, payload):
        ack()
        print(body)
    
        request_route = body["view"]["state"]["values"]["making_estimate1"][
            "input_request_route"
        ]["selected_option"]["value"]
        company_name = body["view"]["state"]["values"]["making_estimate2"][
            "input_company_name"
        ]["value"]
        company_email = body["view"]["state"]["values"]["making_estimate3"][
            "input_company_email"
        ]["value"]
        week_period = body["view"]["state"]["values"]["making_estimate4"][
            "input_week_period"
        ]["selected_option"]["value"]
        times_per_week = body["view"]["state"]["values"]["making_estimate5"][
            "input_times_per_week"
        ]["selected_option"]["value"]
        times_per_service = body["view"]["state"]["values"]["making_estimate6"][
            "input_times_per_service"
    
        import sys
        import io
        import os
    
        sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8")
        sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding="utf-8")
        sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
    
        from function_packages.slack_connection import sending_file
        from office.functions import estimate_price_calculator
        import openpyxl as ex
        from datetime import datetime as dt, timedelta as td
    
        # 견적서에 기입할 날짜 작성(오늘 날짜, 견적 유효기간)
        today = dt.now().date().strftime("%Y.%m.%d")
        month_later = dt.now().date() + td(days=30)
        month_later = month_later.strftime("%Y.%m.%d")
        valid_date_noti = f"견적 유효기한: {month_later}(금일 기준 +30일)"
    
        estimate_dict = estimate_price_calculator(
            week_period, times_per_week, times_per_service
        )
    
        wb = ex.load_workbook(
            "견적서 파일 경로"
        )
        sheet = wb["견적서"]
        sheet["h7"] = today
        sheet["b10"] = valid_date_noti
        sheet["c17"] = f"({week_period} {times_per_week}/ 1회당 {times_per_service})"
        sheet["g12"] = company_name
        sheet["g13"] = company_email
        sheet["h17"] = estimate_dict["total_time_per_month"]
        sheet["i17"] = estimate_dict["user_hourly_price"]
        sheet["k17"] = estimate_dict["total_price_per_month"]
        sheet["k18"] = estimate_dict["total_price_per_month"]
        sheet["k19"] = estimate_dict["total_tax_per_month"]
        sheet["k20"] = estimate_dict["taxed_total_price_per_month"]
        estimate_file_name = f"견적서 파일 경로/견적서({company_name}).xlsx"
        wb.save(estimate_file_name)
    
        import slack_sdk
        Token = "두번째 봇 토큰"
        client = slack_sdk.WebClient(token=Token)
    
        client.files_upload_v2(
                channel="보낼 채널 아이디", initial_comment="견적서 발송 테스트입니다.", estimate_file_name
            )

    전편에서 견적서 생성하기를 누르면 view4 값이 전달되면서 위의 함수가 실행됩니다.

    request_route, company_name, company_email, week_period, times_per_week, times_per_service에는 입력해줬던 값을 추출해서 담습니다.

    이제 엑셀 파일을 수정하고 슬랙으로 업로드를 해줘야 하는데요.

    여기서는 엑셀을 편집할 수 있는 openpyxl을 사용해줬습니다.

    이 함수에 대한 설명은 나중에 따로 해보겠습니다.

    간단히 소개만 하자면 파이썬으로 엑셀을 자동화 할 때, 주로 사용하는 라이브러리라고 보시면 됩니다.

    그리고 estimate_price_calculator는 별도로 가격을 계산하는 함수입니다.

    다 계산을 하면 ex.load_workbook('파일 경로')를 통해 엑셀 파일을 열어줍니다.

    그리고 sheet['h7'] = today처럼 각각의 셀에 값을 입력해줍니다.

    만약에, sheet['h7'] = 3*10 이런 식으로 쓰면 곱한 값이 올라가고 =수식을 적어주면 수식이 적혀서 올라갑니다.

    다 편집을 하고 나면 기존의 엑셀 파일은 템플릿으로 남겨둬야 하니까 새로운 이름(estimate_file_name)을 가진 견적서 엑셀 파일로 저장(wb.save)을 해줍니다.

    그리고 slack_sdk 라이브러리를 설치하고 두번째 봇을 연동해서 files_upload_v2를 통해 새로 저장한 파일을 슬랙으로 업로드합니다.

    이렇게 하고 조금 기다려주면 슬랙에서 엑셀 파일을 확인해볼 수 있습니다.

    여기까지 자동으로 슬랙 봇을 통해서 엑셀 견적서 파일을 업로드 하는 방법을 알아봤습니다.

    이렇게 자동화를 해두면 얘기하거나 상담하면서도 바로 파일을 만들어서 보내줄 수도 있고

    더 좋은 건.. 여기에다가 시트도 연동해두면 시트에서는 누구에게 어떤 기준으로 정보를 보냈는지를 기록으로 남겨둘 수 있어서 지표를 보는데도 엄청난 도움이 됩니다.

     

    참고 - 2023.04.12 - [파이썬/파이썬 활용] - 파이썬을 이용한 구글 스프레드시트 연동 및 자동화 방법

     

    파이썬을 이용한 구글 스프레드시트 연동 및 자동화 방법

    실무에서 활용하고 있는 파이썬 - 구글 스프레드시트 연동법에 대해 적어보려 합니다. 파이썬으로 연동한 db에서 데이터 뽑고 시트에다 자동으로 데이터 기록해주고 자동으로 기록된 데이터가

    develop-davi-kr.tistory.com

     

    반응형

    댓글