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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

Q&A

解決済

1回答

223閲覧

LINENotifyを用いてシフト確認の自動送信を行いたい

hatochun

総合スコア10

Google Apps Script

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

0グッド

0クリップ

投稿2022/05/14 06:50

現在、アルバイトのシフトをGoogle formから受け取り、スプレッドシートに保存し、受け取ったシフトを確認用としてユーザーに自動送信するプログラムを作成しています。
使用言語はGASです。
現在発生している問題としては、
・Google form からシフトを送信し、自動送信することは問題なくできているが、必ず二重で送信される
・Google form側から間違えて二重送信を行う(画面のリロードなど)を行うと4回確認のLINEが送信される
といった問題が発生しています。
皆様の意見などをいただきたいと考えております。

以下現在のプログラムの概要などです。
〇プログラムで用いるスプレッドシートのファイル
・ファイルA : Googleフォームから受け取ったデータをためておくファイル。
ファイルAのシート1には送られてきたデータがあり、タイムスタンプ、バイトの氏名、希望する日時、時間、備考が保存される。
シート2にはLINEで自動送信をするため、バイトの名前とその人のLINEのトークンが保存されている。

〇用いているデータを保存する配列
・shift_data(配列) :ファイルAのシート1からgetRange()でデータを取得したもの。シート1の1行1列から最終行最終列までを格納。
例(実際に以下のように記述はしていませんが、どのような要素が含まれているかの参考程度にお願いします。)

GAS

1shift_data=[["タイムスタンプ","バイト1","〇月×日","AA:BB","CC:DD"], 2["タイムスタンプ","バイト2","△月◇日","EE:FF","GG:HH"],...] 3 4//配列には、タイムスタンプ、氏名、日付、希望する出勤時間、希望する退勤時間の順に格納

・token_data(配列): ファイルAのシート2からgetRange()でデータを取得したもの。シート2の1行1列から最終行最終列までを格納。

GAS

1token_data=[["バイト1","token1"], 2["バイト2","token2"],...] 3 4//配列には、1列目にバイトの氏名、2列目にその人のトークンが格納されています。

アルゴリズムの擬似コードは以下の通りです。

Google formからデータを受け取ったら、それをトリガーとして関数を呼び出します。
(文面をcontentsに追加する部分は省略しています。)

func myfunction(){ for(var j=0 to token_data.length) if(shift_data[shift_data.length-1][1]==token_data[j][1]) //Google form から受け取ったデータは最終行に追加されているため、 //そのデータの氏名とtoken_dataの氏名が一致するか判別する var token=[token_data[j][1]] var options={"method":"post","payload":"message="contents,"header":{"Authorization":"Bearer"+token}} UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options) end if end for }

この関数をトリガーを用いずに直接実行すると、問題なく一回だけ送信されます。
Google formを通して実行した場合のみ二度送信されるという問題を解決したいです。
よろしくお願いいたします

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/05/14 13:09 編集

①同じフォームの送信時のトリガーが、二重に登録されている可能性があります。 https://script.google.com/home/triggers を開き、二重に登録されていないか確認してみてはいかがでしょうか。 (「前回の実行」に実行時間が表示されます) ②ファイルAのシート2 に記載されているtoken_dataの LINEのトークン が本当に重複していないか、今一度確認してください。 仮に重複している場合、疑似コードを見る限りでは、重複している回数だけ送信処理が実行されると思います。(トークンが見つかり送信した後break for もしくはreturnしていないため)
hatochun

2022/05/14 13:35

ありがとうございます。 ①の件は後日確認してみます。おそらくトリガーに問題があるため今回の事象が起きていると思うので、トリガー関連は確認します。 ②の件は重複はありませんでした。また後出しで申し訳ないのですが、if文に入ったらbreakやreturn をするといったように変更をしてみましたが、やはりそれでも二度実行されていたようでした。
guest

回答1

0

自己解決

指摘いただいた通り、トリガーが二重に設定されていました。
開発しているユーザーが複数おり、そのユーザーがそれぞれ設定しているということが起こったため複数回の送信が行われていたようでした。
回答いただきありがとうございました。

投稿2022/05/20 08:25

hatochun

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問