質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

813閲覧

「Googleフォーム」から送信された内容を「LINEのトークルーム(userid宛)」に返信する処理において、複数端末で「Googleフォーム」の送信ボタンを同時押ししたときに、1つの端末に他の端末

MasakiTM

総合スコア115

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/06/18 02:54

「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/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

スクリプトプロパティはセッションを跨いでアクセスする必要がある共有情報(LINEのアクセストークン等)を保存するところです。
基本的にはあらかじめ手動で値を設定しておくか、初期化等で最初の1回だけセットするだけで毎回書き換えるのは使い方を間違っています。

セッション間でも共有しているため、タイミングによって処理中にスクリプトプロパティの情報が他のセッションに書き換えられる可能性はあります。必要な情報は関数の引数で引き渡すようにしましょう。

投稿2020/06/18 03:59

draq

総合スコア2573

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasakiTM

2020/06/18 04:44

ご回答ありがとうございます。 こんなイメージで挑戦してみます。。初心者なもので^^; 大きく間違ってる場合はご指摘ください。。。 function sendform(e){ ............. return ( u, msgn ); } var b = sendform(u); var c = sendform(msgn); function createMessage(b,c) { var d = b; var e = c; .......
MasakiTM

2020/06/18 10:39

わかりませでした、、別で質問します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問