Edited at

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

More than 1 year has passed since last update.

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