사내 chatwork에 VIP 채널을 만든 이야기

가자.



사내 슬랙에 VIP 채널을 만든 이야기

위의 항목이 재미 있었기 때문에 chatwork 버전을 만들었습니다.

하고 싶은 일


  • 익명 채널과 발언할 bot 계정을 준비한다.
  • bot 계정으로 Chatwork Webhook을 사용합니다.
  • Webhook을 AWS API Gateway에서 받고 Lambda를 발화합니다.
  • Lambda에서 Chatwork API을 사용하여 bot 계정으로 익명 채널로 발언합니다.

  • 가자.

    채팅하기



    익명 채널과 발언할 bot 계정을 만듭니다.
    익명 채널에는 함께 놀고 싶은 사용자를 모두 추가해 둡니다.
    bot 계정을 만든 후 ChatWork 화면 오른쪽 상단의 계정 이름 > API 설정에서

    작성한 bot 계정으로 API를 이용할 수 있도록 설정해 둡니다.
    ※ chatwork는 API를 이용할 때 관리자의 허가가 필요한 경우가 있습니다.

    API를 사용할 수 있게 되면 먼저 API Token을 만듭니다. (나중에 사용)
    또한 새로운 Webhook을 만들어 둡니다.

    URL은 나중에 바꿀 수 있으므로 여기에서는 적당하고 괜찮습니다.
    이벤트가 계정 이벤트가 되어 있으면 OK.
    이름은 적당히 붙여 주세요.

    AWS 수행



    ChatWork의 Webhook에서 보낸 요청을 Lambda에서 확인해 보았습니다.
    먼저 이것을 읽습니다. 읽었습니다. 분위기를 잡을 수 있습니다.

    AWS Lambda에 새 함수를 생성합니다.
    이번에는 Python을 사용하므로 런타임은 Python3.7 등으로 두십시오.


    만든 후에는 트리거 추가에서

    API Gateway를 등록합니다.

    이런 느낌으로 설정합니다.
    손쉽게 움직이기 위해 보안 설정을 모두 무시하고 있지만 필요에 따라 설정하십시오.

    람다 설정 화면으로 돌아가면

    이미지 하단과 같이 조금 아래에 API 엔드포인트가 나온다고 생각합니다.
    이것을 chatwork의 Webhook URL에 설정해 둡시다.

    그런데, 뇌가 requests 이외로부터 POST를 송출하고 싶지 않았기 때문에, 소스 코드측의 준비로서
    [검증] 람다의 레이어 기능을 빠르게 시도해 보았습니다 #reinvent
    위의 항목을 참조하여 requests 모듈이 있는 레이어를 추가합니다.
    물론, urllib의 사용법을 기억하는 수단도 있습니다. 비용이 저렴하다고 느끼는 분을 선택하십시오.

    함수 만들기


    import json
    import os
    import requests
    
    def lambda_handler(event, context):
        url = f'https://api.chatwork.com/v2/rooms/{os.environ['ROOM_ID']}/messages'
        headers = {'X-ChatWorkToken': os.environ['CW_KEY']}
        content = json.loads(event['body'])  # eventのbodyは文字列で来るようです
        content = content['webhook_event']['body']  # アカウントイベントにした場合、ここにメッセージ本文があります
        content = content.replace('[To:bot_account_id] botアカウント名さん\n', '')  # Toで発言された時入ってくる文言を除去
        params = {'body': f'{content}'}
        res = requests.post(url, data=params, headers=headers)
        return {
            'statusCode': 200,
            'body': json.dumps('Hello from Lambda!')
        }
    

    최저한 동작 타로입니다. 이것을 Lambda의 편집기 부분에 씁니다.
    사실은 Webhook을 타는 TOKEN을 사용한 인증을 넣거나 처리 결과에 따라 return하는 내용을 바꾸거나 하는 것이 좋습니다.
    이것을 쓴 사람은 어쨌든 움직이고 싶었기 때문에 그런 것을 꺾었습니다. 죄송합니다

    편집기 부분 바로 아래에 환경 변수 입력란이 있다고 생각하므로 익명 채널 ID와 익명 계정 API Token을 설정하십시오.
    채널의 ID는 브라우저에서 해당 채널을 열 때 URL에 들어있는 숫자를 사용합니다.

    움직여 보자



    움직입니다. 좋았어요.

    결론



    잔업의 숨결에 만들었기 때문에 내용에 자신이 없습니다.
    마사카리를 던지고 싶다면 점점 던져주세요.
    그리고 뭔가 안 된다면 지적해 주세요. 지우기 때문에.

    고마워요.

    좋은 웹페이지 즐겨찾기