sky-y
11/27/2016 - 9:32 AM

Google Form を使用した Slack の自動招待フォーム用 Google Apps Script

Google Form を使用した Slack の自動招待フォーム用 Google Apps Script

/*
 * [SETUP]
 * 1. Slack のAPIトークンを発行する
 * 2. Google Form でフォームを作成する
 *   - 必要な項目はメールアドレスのみ
 *   - Google Form で指定したメールアドレスの項目名を FORM_ITEM_TITLE に設定する
 * 3. スクリプトエディタでこのスクリプトを登録
 *   - SLACK_API_TOKEN にAPIトークンを指定
 *   - SLACK_API_ENDPOINT にチーム名を指定
 * 4. フォームの送信時のトリガーに onFormSubmit を指定(要認証)
 */

/* Googleフォームで作成したメールアドレスの入力項目名 */
var FORM_ITEM_TITLE = "メールアドレス";

/* SlackのAPIトークン */
//TODO: https://api.slack.com/web の Test token generator からAPIトークンを発行
var SLACK_API_TOKEN = "YOUR_SLACK_API_TOKEN";

/* Slackのユーザー招待のエンドポイントURL */
//TODO: YOURTEAM をあなたのチーム名に変更
var SLACK_API_ENDPOINT = "https://YOURTEAM.slack.com/api/users.admin.invite";


function onFormSubmit(e) {
  var itemResponses = e.response.getItemResponses();

  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];

    if (itemResponse.getItem().getTitle() == FORM_ITEM_TITLE) {
      var email = itemResponse.getResponse();
      inviteToSlackTeam(email);
    }
  }
}

function inviteToSlackTeam(email) {
  Logger.log("Invite user. (email = '%s')", email);

  var query = "email=" + encodeURIComponent(email) + "&token=" + SLACK_API_TOKEN + "&set_active=true";

  var parameters = {
    method : "post",
    payload : query
  };

  var response = UrlFetchApp.fetch(SLACK_API_ENDPOINT, parameters);

  Logger.log("Result : %s", response.getContentText());
}