技術のメモ帳

気が向いたときに書いてます

[GAS]フォームの回答結果をSlackにPOSTする

Googleフォームで、フィードバックや苦情を受け付けている場合、そのメッセージをSlackにPOSTすることで、プログラマーが迅速にエンドユーザーの問題解決ができることがあります。

本エントリは、そんなケースを想定したTIPSです。

フォームの準備

今回はサンプルのため、メールアドレス・フィードバックの種別・メッセージの3つを設定しました。

スクリプトエディタの起動

Googleフォームの[ツール]→[スクリプトエディタ]を選択します。

エディタ起動後、[空のプロジェクトを選択]で、新規プロジェクトを作成します。

トリガーの設定

ひとまず、フォームが送信されたときに呼び出される関数を設定します。

次の関数を設定し、[リソース]→[現在のプロジェクトトリガー]よりトリガー設定を表示します。

function postFeedbackSlack() {
  Logger.log("todo");
}

トリガー設定で[トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。]をクリックします。

Slack投稿関数の実装

トリガーに設定した関数を実装していきます。Slack投稿の詳細については、前回のエントリを参考にしてください。

なお、FromAppの仕様が変更されているため、e.namedValues[key]は使えませんのでご注意ください。

function postFeedbackSlack(e) {
  var result    = {},
      responses = e.response.getItemResponses();
  for(var i = 0; i < responses.length; i++) {
    var response = responses[i],
        title    = response.getItem().getTitle(),
        content  = response.getResponse();
    result[title] = content;
  }
  var message = '*' + result['種別'] + '*\n' + result['メッセージ'];
  postMessageSlack(message);
}

function postMessageSlack(message) {
  var token    = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'),
      slackApp = SlackApp.create(token),
      props    = {
        channelId: "***CHANNEL_ID***",
        userName:  "***USER_NAME***"
      };
  slackApp.postMessage(props.channelId, message, { username: props.userName });
}

フォームの回答後、次のように投稿されます。

参考リンク

Class FormApp | Apps Script | Google Developers