115
102

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-09

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

115
102
7

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
115
102

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?