0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SlackAdvent Calendar 2023

Day 5

google formで申請してもらった情報をもとにCHに招待する

Last updated at Posted at 2023-12-04

はじめに

会社に部活の仕組みが創設されました。
そこの部に入ってもらうとき、どういうふうに入ってもらうか〜みたいなWFが全く決まってなかったので、

「よっしゃ、じゃあうちの部活は、google formで申請してもらうぞ!」
と決めました。

ただし、お金が発生したりする兼ね合いで、会社の表計算シートに色々と記述せねばなりません。
大変面倒です。

よし、色々自動化しよう!!
っていう、キッカケで、情報をやり取りしたりするCHに招待したい、そんな話です。

google formを用意する

必須事項は以下

  • 名前

これだけで大丈夫です!
一番大事なのは、次の設定です。

スクリーンショット 2023-12-04 22.00.48.png

メールアドレスを収集するようにしましょう。

準備は整った、手順を説明する

  1. google formから申請してもらう
  2. 任意のSlackCHに招待する(招待するのはBot)
  3. トリガーを設定する

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の権限

必要なのは以下。

だったかな・・。ちょっと前に書いたコードなので、間違ってたらごめんね。

最後に、招待するべきCHに利用するbotを追加して終了です。

おっと忘れてました、トリガー設定しましょう

GAS側のトリガー設定する必要があります。
GASを手動で叩くんじゃなくて、google form申請時に動くようにしたいからですね。

スクリーンショット 2023-03-29 18.34.02.png

実行する関数と、イベントを設定してOKです。

はまりどころ

ハマりどころを一応共有しておきます。
ハマりどころはなんといっても、GASのダイアログ連投問題です。

GAS様が、
「ねえ、権限ないよ!許可してよ!」
「google formからの連絡くるよ!許可してよ!」

みたいにやたらと権限を要求してくるんですけど、これをちゃんとOKしないとGASが権限ないぜ、って動かないこと多々あります。
エラーがわかりにくいのがハマりどころですかね。

まとめ

CH招待自動化したので、DMやり取りとか発生せずに、とっても楽です。
入社者とか、組織変更時に勝手にCH追加や、削除されると便利だと思いますね。
手作業、駆逐してやる!!(誰)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?