LoginSignup
0
1

More than 5 years have passed since last update.

【GAS修行⑦】Googleフォーム連携の読書管理Slack BOT作成

Posted at

・GAS熟練者への道。
・先人達のコードの「写経&コピー」の駆使の成果物のまとめ。
・第七弾
第一弾第二弾第三弾第四弾第五弾第六弾はこちら。

経緯

・「七回目か。作れるものは大量にあれど、個人的に必要なアプリはそこまでないな。」
・「今回はスクレイピングではなくて、他のGoogle Apps連携のツールにしよう。」
・「決めた。これさえあれば、秒速で管理名誉職人ですな。」
→そういうわけで、今回もサンプルアプリと仏様サイトを発見。
https://qiita.com/pchan52/items/574e930a3cc42cf7f8b9
→「また参考(※マルコピ)に作るか。」
→取り組み開始。

概要

  • Googleフォーム(読書アンケート)に回答すると、回答内容をSlcakに通知してくれる。
    →読書家として境地上げが可能。

結果

・実際の画面はこちらです。
slack.PNG

作成環境

  1. Google App Script
  2. Incoming WebHooks
    ※Slackがない場合は、一人用のSlackを開設しましょう。(何かと役に立つ。)

手順

Google Apps Scriptの設定

  • GoogleドライブからGoogleフォームを起動。
    ※Googleアカウントを持っていない人は、作成する。 image.png
  • Googleフォームの質問等を下記のように作成
    ※自分の好きな内容でも良いが、これをベースにコードを書いていく。 キャプチャ.PNG
  • フォーム作成後、これに紐づいたスクリプトエディタ起動。
    • フォームページ内の上部メニューの「点三つ」をクリックして、「スクリプトエディタ」をクリックして、起動。 キャプチfdffdaャ.PNG
  • 起動したプロジェクトに名前をつける
    ※プロジェクト名が反映されるわけではないが、自分がわかる名前をつける。
    →保存。(最初の3行のままで良い。)
  • 一旦置いておく。

Slack Incoming WebHooksの設定

  • Incoming WebHooksのトークンを発行。
    • Slack内のアプリを追加したいチャンネルに行き、アプリ名をクリックして、「アプリを追加する」をクリック。 image.png
    • 「Appディレクトリ」ページの検索欄にwebと入力して、出てくる「Incoming WebHook」をクリック。 image.png
    • Incoming WebHooksページの「設定を追加」をクリックして、下記の項目を確認。
      • 「チャンネルへの投稿」: チャンネル名
      • 「Webhook URL」: Incoming WebHooksのトークン df.png
    • 確認後、「設定を保存」で保存して、Incoming WebHooks「トークン」をメモしておく。

コード

  • スクリプトエディタに戻り、下記のコードをコピーして、保存。
slack-translate.gs
function sendToSlack(body, channel) {
  var url = "Incoming WebHooksのトークンを書く。";
  var data = { "channel" : channel, "username" : "ふぉーみんぐエンジェル", "text" : body, "icon_emoji" : ":grin:" };
  var payload = JSON.stringify(data);
  var options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  var response = UrlFetchApp.fetch(url, options);
}

function test() {
  sendToSlack("テスト通知確認です", "#チャンネル名を書く");
}

function onFormSubmit(e){

  var body = "回答受諾。即刻確認せよ。\nさもなくば・・・・・(*'ω'*)\n"; 
  var applicant = "";
  var itemResponse = e.response.getItemResponses();

  for (var j = 0; j < itemResponse.length; j++){    
    var formData = itemResponse[j];
    var title = formData.getItem().getTitle();
    var response = formData.getResponse();

    // 質問内容と合わせる。(できるだけ短めに。)
    switch (title) {
      case "名前":
        name = response;
        break;
      case "タイトル":
        bookTitle = response;
        break;
      case "作者":
        author = response;
        break;
      case "ジャンル":
        genre = response;
        break;
      case "一言感想":
        impression = response;
        break;
      case "購入URL(任意)":
        buyUrl = response;
        break;
      default:
        break;
    }
  }
  var bodyPublic = 
      body + "「名前」 : " + name + "\n「タイトル」 : " + bookTitle + "\n「作者」 : " + author + "\n「ジャンル」 : " + genre + "\n「「一言感想」 : " + impression + "\n「URL」(Amazon等) : " + buyUrl;
  sendToSlack(bodyPublic, "#チャンネル名を書く");
}

※以下の項目を自分のものに変えるのを忘れない。
   ・Incoming WebHooksのトークン(先程メモしたもの。)
   ・Slackチャンネル名(test関数とonFormSubmit関数の中の2つ。)

  • 自分のコードに書き換えて保存。
  • 保存後、「test」関数を実行して、テストメッセージ通知確認。
    • スクリプトエディタ内の上部メニューの「関数名」の部分を「test」に変更して、二つ左の「▶」ボタンで実行。
  • 通知確認後、フォーム押下の時にコードを実行してもらうために、トリガーを設定。
    • スクリプトエディタのタブメニューの「編集」→ 「現在のプロジェクトのトリガー」をクリック。
    • トリガーを作成して、下記の画像のように設定。 dsfsfafaf.PNG
  • 保存後、実際にフォームに回答して動作確認。
    • フォームページ内の上部メニューの「送信」ボタンをクリック。
    • フォーム送信設定ページ内の「クリップ」のボタンをクリックして、そこのURLをコピー。 tempsnip.png
    • そこのURLにブラウザからアクセスすれば、実際のフォームに飛ぶので、回答する。
    • 回答後、送信する。
  • 正常に動作すれば、完了。

まとめ

  • 今回は、Googleフォーム連携ということで、日程調整や軽いアンケートにも使えると実感。
  • LINEへの応用も簡単だが、今回はSlackで作成したい衝動を抑えるつもりもなく、従順になる。
  • これを見てくださるエンジニアの皆様、
    「そんなコードで満足してるとか、お前はまだまだ俺らのステージへは上がってこれなさそうだな。」とか
    「俺ならこれの何倍も簡単かつ効率的な管理ツール作れまっせ。」等の意見を何卒お待ちしております。

参考

0
1
0

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
0
1