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

설정 절차
Googleform 설정

설정 절차
Googleform 설정

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
이벤트 소스 선택: 양식에서
이벤트 유형 선택: 양식 제출 시
오류 알림 설정: 지금 알림 수신

트리거 설정이 끝나면 양식 응답이 전송된 시점에 채널 초대가 실행됩니다.
결론
이 양식을 작성하면 초대의 번거로움을 덜어주고 훨씬 쉬워집니다.
평소에는 코드를 쓰거나 하지 않으므로, 코드가 더럽다고 생각합니다만 용서해 주세요.
이 엔트리가 채널 초대 작업에 어려움을 겪고 있는 분들에게 도움이 되었으면 합니다.
Reference
이 문제에 관하여(슬랙 채널 초대 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sho-ichi/items/d2740f1119f20dc4ffc1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(슬랙 채널 초대 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho-ichi/items/d2740f1119f20dc4ffc1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)