公開Slack用 自動招待フォーム by GAS

  • 93
    いいね
  • 6
    コメント

Slackっていけてますよね。閉じた環境で使ってる分には良いんだけど
Publicなチームを作ろうとした際に問題なのが招待問題。

メアド縛りができるのでgmail.comを許可できればいいのですが
なぜかドメインでgmail.comが指定できないため、個別招待をするしか無いです。

node.js使ったり、hubot使ったりしてAPI叩く自動招待の仕組みがありますが
何がしかサーバを用意しなくちゃいけないのがめんどくさいですよね。
そこで、GASを使いましょう。GoogleAppsではFormがはじめから用意されているので
フォームが投稿されたらSlack API叩いて招待するのをGASで組めます。

Step1 Slackのトークン取得

URL : https://api.slack.com/custom-integrations/legacy-tokens
上記URLに、当該チームにアクセスできるアカウントでアクセスします。

Slack_Web_API___Slack.png

Step2 GoogleDriveで新規のフォーム作成

HandsOn_-_Google_ドライブ.png

フォームが作成できたら、URLからIDを取得します。
無題のフォーム_-_Google_フォーム_と_GAS_Station_-_Google_ドライブ.png

上記例の場合は、 1YOkv3BRafIMq3bKKyS3QwA6Rxd4s27GUnPJ1cqM7xWk になります。

Slackに招待するためのアカウント(メールアドレス)を記入してもらうフォームを作成しておきます。
無題のフォーム_-_Google_フォーム.png

準備出来たもの

Slackのチーム名(サブドメイン名)
Slackのトークン
GoogleフォームのID

Google Apps Script仕込み

これらを下記GASの冒頭の変数にそれぞれ埋め込んで、フォームにGASを追加します。

slack_inv.gs

var slack_team = "<YOUR_SLACK_TEAM>"
var slack_token = "<YOUR_SLACK_TOKEN>"

var form_app_id = "<YOUR_FORM_ID>"

function form_submit(){
  var form = FormApp.openById( form_app_id );
  var formResponses = form.getResponses();
  for (var i = 0; i < formResponses.length; i++) {
    var formResponse = formResponses[i];
    var itemResponses = formResponse.getItemResponses();
    for (var j = 0; j < itemResponses.length; j++) {
      var itemResponse = itemResponses[j];
      slack_api(itemResponse.getResponse());
      Logger.log('Response #%s to the question "%s" was "%s"',
                 (i + 1).toString(),
                 itemResponse.getItem().getTitle(),
                 itemResponse.getResponse());
    }
  } 
}


function slack_api(inv_addr){
    inv_addr = encodeURIComponent(inv_addr);
  var url = "https://"+ slack_team +".slack.com/api/users.admin.invite";
  var query = "email="+encodeURIComponent(inv_addr)+"&token="+slack_token+"&set_active=true";

  var parameters = {
    method : "post",
    payload : query
  };
  var response = UrlFetchApp.fetch(url,parameters);
  Logger.log(response.getContentText());
}

Step3 フォームにスクリプトの追加

スクリプトの新規作成

グーグルフォームの編集画面で、メニューから ツール>スクリプトエディタを選択すると、新規スクリプトが生成されます。

無題のフォーム_-_Google_フォーム.png

ダイアログで、空のプロジェクトを選択

無題のプロジェクト.png

全ステップのスクリプト内容をコピペし、下準備したチーム名、トークン、フォームIDを書き換えます。
書き換え終わったら、保存しましょう。 メニューのファイル>保存
適当な名前で保存して結構です。

Step4 トリガーの設定

実際にフォームでメールアドレスが投稿された際に実行したいので、トリガーを設定します。
スクリプトエディター内のメニューから リソース>現在のプロジェクトのトリガー を選択します。
無題のプロジェクト.png

まだトリガーが存在してないはずです。今スグ追加をクリックします。
無題のプロジェクト.png

実行:form_submit
イベント: フォームから
フォーム送信時
を選択して保存します。

無題のプロジェクト.png

完成

以上で、フォームにメアドが投稿されるたびに自動でそのメールアドレスをSlackの招待リストに追加し
Slackから招待メールが送信されるようになりました。

チウイ:招待APIは非公開との情報もありいつまでこのAPIが使えるかわかりません。

join gasja.slack.com !

Google Apps Scriptの情報交換を行うSlackを作りました。
https://gasja.slack.com です。参加は http://goo.gl/forms/lkxl34CsSG より行えます。

Join_gasja_slack_com.png