ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] Slacker를 활용하여 slack bot 메세지 보내기
    Develop/Web & Framework 2020. 9. 20. 15:58

     

    저는 지금 <멋쟁이 사자처럼>에서 서비스를 개발 중인데요😎

     

    유저가 악성 유저에 대한 신고를 접수하면,

    관리자인 우리 팀에게 바로 알림이 오도록 하는 기능이 있으면 좋겠다! 라는 생각이 들었고

    마침 협업 툴로 slack을 사용하고 있었기에, slack bot을 이용해보기로 했습니다!

    코드 몇 줄로 아주 간단하게 사용이 가능해요👍🏻


    0. 라이브러리 설치하기

    파이선에서 slack을 사용하기 위해 slacker 라이브러리를 설치합니다

    $ pip install slacker

     

    1. Slack API 사이트에서 token 발급받기

    Slack API 사이트에 접속하여

    bot을 사용할 workspace를 지정하고, app 이름을 설정해줍니다

    그 다음, 지정한 workspace에서 app을 추가해주면,

    이렇게 "xoxb-__로 시작하는 API token이 생성됩니다

    이 token이 공개 저장소에 노출되지 않도록 주의해주세요!!!!!!

     

    2. secret key를 저장할 json파일 생성

    저는 API 호출을 위해 사용하는 key값들을 저장하는 json파일을 별도로 생성하여 사용했어요.

    프로젝트의 제일 상위 디렉토리에 파일을 생성했습니다

     

    3. slack bot에 메세지를 보낼 함수 작성

     

    이제 slack bot에 메세지를 보낼 함수를 작성해줍니다.

    저는 신고 접수 뿐만 아니라, 후에 서비스 전체를 slack으로 관리할 생각이 있기 때문에

    아예 별도의 파일을 생성하고 함수를 작성해주었어요

    from django.conf import settings
    from slacker import Slacker		# slacker 모듈을 import
    import json				# json파일을 읽어들일 것이므로, 해당 모듈도 import
    
    def slack_notify(text=None, channel='#test', username="책화점_알리미",attachments=None):
        config_secret = json.loads(open('secret_key.json').read())	# json파일을 읽고
        token = config_secret['SLACK_NOTIFY']['TOKEN']		# token을 불러온다
        slack = Slacker(token)
        slack.chat.post_message(
            text=text,			# 메세지 내용
            channel=channel,		# 메세지를 전송할 channel
            username=username,		# 사용자 이름
            attachments=attachments)	# 부가 옵션

     

    4. 함수 호출하여 slack에 메세지 보내기

    이제 3에서 작성한 함수를 호출하여, slack에 메세지를 보내면 됩니다

    신고된 유저에 대한 정보를 담아서, 메세지를 보내볼게요

    from utils.slack import slack_notify			# 작성한 함수를 import
    
    def report(request):
        if request.method == 'POST':
            report_form = ReportForm(request.POST,request.FILES)
            if report_form.is_valid():
                report = report_form.save(commit=False)
                report.author = request.user
                report.save()
                user = MyUser.objects.get(nickname=report_form.cleaned_data.get("user"))
                print(user)
                
                # slack에 신고 접수 알림 보내기
                slack_message = "[신고접수] {}".format(user.nickname)
                slack_notify(slack_message,"#general",username='신고 접수봇')
                return redirect('notify')
        else:
            report_form = ReportForm()
            
            return render(request,'report/report.html',{'report_form':report_form})

     

    신고가 서버에 접수됨과 동시에, slack에 메세지가 날라옵니다

     

    attachments 인자를 사용하여 메세지를 커스터마이징 할 수도 있습니다.

    신고 내용을 포함해 메세지를 전달하도록 구성해봤어요

    # slack에 신고 접수 알림 보내기
    attachments = [{
    	"color": "#FF0000",
    	"title": "신고접수 알림",
    	"text": "{}".format(report_log.content)
    }]
    slack_message = "[신고접수] {}".format(user.nickname)
    slack_notify(slack_message,"#general",username='신고 접수봇',attachments=attachments)
    
    return redirect('notify')

    메세지가 잘 날아오네요!

    결론 == 슬랙 최고💛💜

    댓글

Designed by Tistory.