現在、アルバイトのシフトを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を通して実行した場合のみ二度送信されるという問題を解決したいです。
よろしくお願いいたします
回答1件
あなたの回答
tips
プレビュー