はじめに
会社に部活の仕組みが創設されました。
そこの部に入ってもらうとき、どういうふうに入ってもらうか〜みたいなWFが全く決まってなかったので、
「よっしゃ、じゃあうちの部活は、google formで申請してもらうぞ!」
と決めました。
ただし、お金が発生したりする兼ね合いで、会社の表計算シートに色々と記述せねばなりません。
大変面倒です。
よし、色々自動化しよう!!
っていう、キッカケで、情報をやり取りしたりするCHに招待したい、そんな話です。
google formを用意する
必須事項は以下
- 名前
これだけで大丈夫です!
一番大事なのは、次の設定です。
メールアドレスを収集するようにしましょう。
準備は整った、手順を説明する
- google formから申請してもらう
- 任意のSlackCHに招待する(招待するのはBot)
- トリガーを設定する
botはすでに作ってある前提とします。(作り方については割愛)
Slackの招待
招待するソースコードです。確かどっか、良い記事があって使わせていただいた記憶・・。
記載ミスあったらごめんね。
// slack apiを投げる〜
function callWebApi(token, apiMethod, payload) {
const response = UrlFetchApp.fetch(
`https://www.slack.com/api/${apiMethod}`,
{
method: "post",
contentType: "application/x-www-form-urlencoded",
headers: { "Authorization": `Bearer ${token}` },
payload: payload,
}
);
//console.log(`Web API (${apiMethod}) response: ${response}`)
return response;
}
// メンバーを招待します
function inviteMember(channel, id) {
try {
const apiResponse = callWebApi(bot_token, "conversations.invite", {
channel : channel,
users : id,
});
var json = JSON.parse(apiResponse.getContentText());
if (json["ok"] == false) {
Logger.log(json["error"]);
}
Logger.log("channel : " + channel + " id : " + id);
}
catch (e) {
Logger.log("error:" + e.essage);
}
}
// emailアドレスからuserIdを取得します
function getUserId(email) {
const apiResponse = callWebApi(bot_token, "users.lookupByEmail", {
email : email,
});
var json = JSON.parse(apiResponse.getContentText());
var values = json["user"];
var id = values["id"];
var name = values["name"];
Logger.log("id :" + id + " name : " + name);
return id;
}
// google formを送るとここに来ます
function submitForm(e) {
var email = e.response.getRespondentEmail(); // 投稿者に紐づいているmailアドレスを取ってくる
var id = getUserId(email);
inviteMember("CHのID", id);
}
基本的には、
emailアドレスから、userIDを割り出し、そのuserIDを対象CHに招待する 、これだけです。
slack botの権限
必要なのは以下。
-
conversations.invite
- channels:manage
-
users.lookupByEmail
- users:read.email
- users.profile:read(コレも必要だったかも)
だったかな・・。ちょっと前に書いたコードなので、間違ってたらごめんね。
最後に、招待するべきCHに利用するbotを追加して
終了です。
おっと忘れてました、トリガー設定しましょう
GAS側のトリガー設定する必要があります。
GASを手動で叩くんじゃなくて、google form申請時に動くようにしたいからですね。
実行する関数と、イベントを設定してOKです。
はまりどころ
ハマりどころを一応共有しておきます。
ハマりどころはなんといっても、GASのダイアログ連投問題です。
GAS様が、
「ねえ、権限ないよ!許可してよ!」
「google formからの連絡くるよ!許可してよ!」
みたいにやたらと権限を要求してくるんですけど、これをちゃんとOKしないとGASが権限ないぜ、って動かないこと多々あります。
エラーがわかりにくいのがハマりどころですかね。
まとめ
CH招待自動化したので、DMやり取りとか発生せずに、とっても楽です。
入社者とか、組織変更時に勝手にCH追加や、削除されると便利だと思いますね。
手作業、駆逐してやる!!(誰)