「Googleフォーム」から送信された内容を「LINEのトークルーム(userid宛)」に返信する処理において、複数端末で「Googleフォーム」の送信ボタンを同時押ししたときに、1つの端末に他の端末の送信内容が届いてしまう。送信された端末確実に届けるようにしたい。
タイトルの件について以下のような操作を行いたいです。
1.GoogleフォームにLINEのユーザーID格納 //ここは別のスクリプトでうまくいっています。
2.Googleフォームで各入力項目を入力し送信
3.Googleフォームのスクリプトのトリガー「送信時」で下記のソースコードで動作する
[動作内容]
Googleフォームからのメール送信及びLINEトークルームへの返信
そして、以下のような想定しない動作が発生しています。
1.複数ユーザーがGoogleフォームを同時送信
2.Googleフォームを送信した特定1人のLINEトークルームに他の人の内容が返ってしまう。
ソースコードの誤っている点をご教授いただければ助かります。
発生している問題・エラーメッセージ
該当のソースコード
var data = SpreadsheetApp.openById("スプレッドシートID").getSheetByName("スプレッドシートのシート名"); function sendform(e){ var items = e.response.getItemResponses(); //Googleフォームの内容格納 //Googleフォームの内容を取り出していく var msg = ''; for (var i = 0; i < items.length; i++) { var item = items[i]; var q = item.getItem().getTitle(); //Googleフォームの質問のタイトル var a = item.getResponse(); //Googleフォームの質問の回答 msg += q + ': ' + a + '\n'; //タイトルと回答を全て取得し整形 //【LINEの宛先格納】Googleフォームの回答でタイトルが"UserID"であればその回答の"UserID(LINEの宛先)"を取り出し、スクリプトのプロパティに"key"として格納 if(q=="UserID"){ var u = a; PropertiesService.getScriptProperties().setProperty("key",a); } } //まず指定のメールアドレスにGoogleフォームの送信内容を送信する var to = 'メールアドレス'; GmailApp.sendEmail(to, 'タイトル', msg); //LINEトークルームには"UserID"なしで整形しなおしたメッセージを返信 var msgn = ''; for (var i = 0; i < items.length; i++) { var itemn = items[i]; var v = itemn.getItem().getTitle(); if(v=="UserID"){ continue; //Googleフォームの質問のタイトルが"UserID"であればcontinueで省略 } var w = itemn.getResponse(); msgn += v + ': ' + w + '\n\n'; } //①【LINEの返信メッセージ格納】Googleフォームの質問の"UserID"を省略した返信メッセージ作成しスクリプトのプロパティ"msgnm"へ格納 PropertiesService.getScriptProperties().setProperty("msgnm",msgn); //LINEトークルームへ返信(返信する関数は以下参照) createMessage(); } ////メッセージ返信 var access_token = "アクセストークン" function createMessage() { //スクリプトのプロパティ"msgnm"を参照し、messageへ格納 message = "メッセージ色々"+PropertiesService.getScriptProperties().getProperty("msgnm"); return push(message); } //実際にメッセージを送信する関数を作成します。 function push(text) { var url = "https://api.line.me/v2/bot/message/push"; var headers = { "Content-Type" : "application/json; charset=UTF-8", 'Authorization': 'Bearer ' + access_token, }; //宛先をスクリプトのプロパティ"key"とする。 var to = PropertiesService.getScriptProperties().getProperty("key"); var postData = { "to" : to, "messages" : [ { 'type':'text', 'text':text, } ] }; var options = { "method" : "post", "headers" : headers, "payload" : JSON.stringify(postData) }; return UrlFetchApp.fetch(url, options); }
試したこと
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/18 04:44
2020/06/18 10:39