1
4

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 1 year has passed since last update.

Googleフォームが回答されたらLINEに通知する

Posted at

前提

  • Web系全然知らない
  • Googleフォームでの回答内容をLINEで受け取りたい
  • Googleフォームでは名前、メアドは入力必須にしている
  • Googleフォーム回答されたら任意の自動送信メールも送りたい
  • 通知を送るLINEグループは作成済み

作業1 - LINE Developer

1. LINE Notifyのトークンを作成する

  1. 以下にアクセスする(Developerアカウント設定していない場合はする)
    https://notify-bot.line.me/my/
  2. トークンを発行するを選択する
  3. トークン名と通知を送信するグループを選択して発行する
    トークン名は通知の冒頭に[トークン名]として表示されるので何の通知かわかる内容にすると良い
  4. 発行されたトークンをメモする ※再度確認できなくなるので忘れたら再発行

作業2 - LINE

トークンを発行するとLINEにLINE Notifyアカウントからメッセージが来ている想定

1. トークン発行時に設定したLINEグループにLINE Notifyアカウントを追加する

作業3 - Googleフォーム

1. Googleフォームを新規作成して内容を決める

2. Google Apps Scriptを開く

  1. 作成したGoogleフォームを開いている状態で、右上の縦3点リーダー > スクリプト エディタを選択する

作業4 - Google Apps Script

1. 実装

  1. 以下を実装する(メッセージはいい感じに変えていただいて)
    参考にしながら修正してたので書き方に統一感ないところとかはご了承を...
    function onFormSubmit(event) {
        var message = "\n"
        var userEmail = ""
        var userName = ""
        var items = event.response.getItemResponses()
      
        for (var i = 0; i < items.length; i++) {
      
          if (i == items.length - 1) {
            // userメアドはメッセージには含めない
            userEmail = items[i].getResponse()
            break
          }
      
          message += "▼" + items[i].getItem().getTitle() + "\n" + items[i].getResponse() + "\n"
      
          if (i == 0) {
            userName = items[i].getResponse()
          }
        }
    
        // FormApp.getActiveForm();
        sendToLINE(message);
        sendEmailToUser(userEmail, userName, message);
    }
    
    /**
     * LINEに送信する
     */
     function sendToLINE(message) {
        const token = "LINE Notifyのトークン";
        const lineNotifyApi = "https://notify-api.line.me/api/notify";
        const options = {
          "method": "post",
          "headers": {
            "Authorization": "Bearer "+ token
          },
          "payload": {
            "message": message
          }
        }
    
         UrlFetchApp.fetch(lineNotifyApi, options);
    }
    
    /**
     * ユーザーにメールを送信する
     */
     function sendEmailToUser(userEmail, userName, message) {
    
        var title = "Googleフォームのご回答ありがとうございます"
        var content = userName
        + ' 様\n\n'
        + 'この度はGoogleフォームを回答していただき、ありがとうございます。\n'
        + '下記の内容で、受付けました。\n'
        + '後ほど折り返しご連絡させていただきますので、いましばらくお待ちください。\n\n'
        + '----------\n'
        + message
        + '\n\n'
        + '----------\n'
        + '\n\n※本メールはGoogleフォームからの自動送信メールです。';
    
        MailApp.sendEmail({
            to: userEmail, 
            subject: title, 
            body: content,
            name: "差出人名"
        }); 
    }
    
  2. "LINE Notifyのトークン"箇所に作業1-1-4でメモしたトークンを記載する
  3. 以下のコメントアウトしている箇所をアンコメントする

    ​ // FormApp.getActiveForm();

  4. スクリプトを保存する(実行の隣のボタンまたは cmd + s)
  5. 実行を選択する
  6. Googleの権限認証が表示される(はず)ので許可する
  7. 許可できたら3のアンコメント箇所はコメントアウトして保存する

2. トリガー設定

  1. 左タブのトリガー > トリガーを追加
  2. 実行する関数を今回だとonFormSubmitにする
  3. イベントのソースを選択 > フォームからにする
  4. イベントの種類を選択 > フォーム送信時
  5. エラー通知設定 > 毎日通知を受け取る
  6. 保存する

準備完了

実際にGoogleフォームで回答してみてLINEに通知がいくことと、メアド先にメールが飛ぶことを確認できればOKです。
スクリプトがこけた場合は以下2か所で確認できます。

  • メール(失敗メールが来てるはず)
  • Google Apps Script左タブの実行数

試していたら起きたエラー

LINE Notifyに関しては以下を参考にして最初は実装していました。
https://daily-coding.com/gas_line/
実行すると以下のエラーになリました。

Exception: Request failed for https://notify-api.line.me returned code 400. Truncated server response: {"status":400,"message":"message: must not be empty"} (use muteHttpExceptions option to examine full response)
    at sendToLINE(コード:39:18)
    at onFormSubmit(コード:23:5)

作業4-1-1のコードは修正版ですが、参考にしたサイトが以下のようなpayloadタグの中にmessageタグを形式にしていませんでした。

const options = {
	"method"  : "post",
	"headers" : {
		"Authorization" : "Bearer "+ token
	}
	"payload" : "message=" + message,
};

message`タグがないから発生しているようです。最終的には前述したとおり以下のようにしています。

const options = {
  "method": "post",
  "headers": {
  	"Authorization": "Bearer "+ token
  },
  "payload": {
  	"message": message
  }
}

参考にしたサイト(LINE Notifyに関して)

https://ytakeuchi.jp/?p=841
https://daily-coding.com/gas_line/

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?