슬랙 채널 초대 자동화

배경



현재 소속되어 있는 회사에서는 채팅 툴로서 Slack을 이용하고 있습니다만, 아르바이트는 초대된 채널 밖에 열람할 수 없다(멀티 채널 게스트) 때문에, 그때마다 의뢰가 와 채널에 초대하는 작업이 발생해 있습니다.
한번의 작업에 거기까지 시간은 걸리지 않습니다만, 날에 몇건이나 오기 때문에 자동화해 작업 부하를 줄이려고 생각했습니다.

구성





설정 절차



Googleform 설정


  • Googleform에서 새로운 양식을 만듭니다.
  • 질문은 2개로 기술식 텍스트(필수 항목)로 설정합니다. ※ 쉼표 (,)로 여러 대답을 배열로 변환하므로 설명을 넣으십시오
  • 설정에서 이메일 주소 수집 및 신뢰할 수 있는 도메인의 사용자로 제한을 선택합니다.
  • 오른쪽 상단의 ︙을 클릭하고 스크립트 편집기를 클릭합니다.


  • Google Apps Script 설정



    전체 스크립트


    function onFormSubmit() {
      var form = {};
      var formResponses = {};
      var slack_team = "<SLACK_TEAM>"; // ワークスペース名を格納する
      var slack_token = "<SLACK_TOKEN>"; // 発行したSlack Tokenを格納する
      var form_app_id = "<FORM_ID>"; // フォームIDを格納する
      var form = FormApp.openById(form_app_id);
      var formResponses = form.getResponses();
      var formResponse = formResponses[Number(formResponses.length - 1)];
      var itemResponses = formResponse.getItemResponses();
      var Invitees = formResponse.getRespondentEmail();
      var itemResponse1 = itemResponses[0];
      var itemResponse2 = itemResponses[1];
      var channelName = itemResponse1.getResponse();
      var address = itemResponse2.getResponse();
      var ary1 = address.split(',');
      var ary2 = channelName.split(',');
      var url1 = "https://slack.com/api/channels.list?token=" + slack_token;
      var url2 = "https://slack.com/api/users.list?token=" + slack_token;
      var channelList = UrlFetchApp.fetch(url1);
      var userList = UrlFetchApp.fetch(url2);
      var json1 = JSON.parse(userList.getContentText());
      var json2 = JSON.parse(channelList.getContentText());
      var user_id = [];
      var channel_id = [];
    
      for(var i = 0; i < ary1.length; i++){
        for (var row1 in json1["members"]) {
          if (json1["members"][row1]["profile"]["email"] === ary1[i]){
            user_id[i] = json1["members"][row1]["id"];
          }
        }
      }
    
      for(var i = 0; i < ary2.length; i++){
        for (var row2 in json2["channels"]) {
          if (json2["channels"][row2]["name"] === ary2[i]){
            channel_id[i] = json2["channels"][row2]["id"];
          }
        }
      }
    
      for(var i = 0; i < user_id.length; i++){
        for (var h = 0; h < channel_id.length; h++){
          var response = UrlFetchApp.fetch("https://slack.com/api/channels.invite?token=" + slack_token + "&channel=" + channel_id[h] + "&user=" + user_id[i]);
        }
      }
    
      var postUrl = '<Webhook URL>'; // 発行したWebhook URLを格納する
      var username = 'Slack招待フォーム';
      var icon = ':googleform:';
      var body = Invitees + " invited " + ary1 + " to " + ary2 + " from Google Form."
      var jsonData =
        {
         "username" : username,
         "icon_emoji": icon,
         "text" : body
        };
      var payload = JSON.stringify(jsonData);
      var options =
        {
        "method" : "post",
        "contentType" : "application/json",
        "payload" : payload
        };
      UrlFetchApp.fetch(postUrl, options);
    }
    

    변경이 필요한 부분은 다음 3가지입니다.

    Slack TOKEN



    Slack API를 활용하는 데 필요합니다.
    다음을 방문하여 TOKEN을 만듭니다.
    api.slack

    양식 ID



    Googleform ID로 URL에서 발췌합니다.
    https://docs.google.com/forms/d/{フォルダID}/edit
    

    위의 {폴더 ID} 부분이 ID가 됩니다.

    웹훅 URL



    설정 내용을 Slack에 게시하는 데 필요합니다.
    취득 순서는 아래쪽의 기사를 알기 쉽습니다.

    Slack의 Webhook URL 획득 절차

    트리거 설정



    스크립트가 가능하면 트리거 설정함으로써 다양한 타이밍에서 자동으로 실행할 수 있습니다. 이번에는 양식에 게시된 시점에서 실행되도록 설정합니다.
  • 스크립트 편집기 화면에서 [편집] → [현재 프로젝트 트리거]를 클릭합니다.
  • 오른쪽 하단의 트리거 추가를 클릭합니다.
  • 다음과 같이 설정하고 저장을 클릭합니다.

  • 실행할 함수 선택: onFormSubmit
    실행할 배포 선택: Head
    이벤트 소스 선택: 양식에서
    이벤트 유형 선택: 양식 제출 시
    오류 알림 설정: 지금 알림 수신


    트리거 설정이 끝나면 양식 응답이 전송된 시점에 채널 초대가 실행됩니다.

    결론



    이 양식을 작성하면 초대의 번거로움을 덜어주고 훨씬 쉬워집니다.
    평소에는 코드를 쓰거나 하지 않으므로, 코드가 더럽다고 생각합니다만 용서해 주세요.

    이 엔트리가 채널 초대 작업에 어려움을 겪고 있는 분들에게 도움이 되었으면 합니다.

    좋은 웹페이지 즐겨찾기