前提・実現したいこと
Google apps script、スプレッドシート、Line notifyを用いてgoogleフォームから送信されたアンケートをLineに自動送信する
発生している問題・エラーメッセージ
googleフォームからアンケートを送信するとスプレッドシートから - フォーム送信時のトリガーが連続で複数回実行され、Line notifyから同じメッセージが複数回送られる。時間主導型トリガーの似たプログラムは指定通り実行される。
該当のソースコード
function onFormSubmit(e){ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getActiveSheet(); var row = sheet.getLastRow(); var who = sheet.getRange(row, 2).getValue(); var meigara = sheet.getRange(row, 4).getValue(); var kind = sheet.getRange(row, 5).getValue(); sendMessage("\n" + who + "が変更しました。" +"\n" + meigara + "\n" + kind ); } function sendMessage(message){ var url = "https://notify-api.line.me/api/notify"; var token = "トークン名"; var options = { "method" : "post", "payload" : "message= " + message, "headers" : {"Authorization" : "Bearer " + token} }; UrlFetchApp.fetch(url,options); }
試したこと
トリガーがなぜか複数回実行されていて、Lineにもメッセージが同じ数送られる結果となっている。トリガーを作り直しても症状は変わらなかった。Googleフォームで直ぐに別の回答を送ると症状が改善し、時間が経過して再度送るとまた複数回同じメッセージが送られる傾向がある。
補足情報(FW/ツールのバージョンなど)
スプレットシートに同じ内容が連続で記入されていないことからスプレットシートへのGoogleフォームのアンケート結果自動記入に誤りはないと思われる。
全画面表示にするとスクリプトエディタが表示されました。スプレットシートのプログラムをフォームに書き換えしましたが、承認エラーが起きました。
https://notify-api.line.me/api/notify のリクエストに失敗しました(エラー: 401)。サーバー応答の一部: {"status":401,"message":"Invalid access token"}(応答の全文を見るには muteHttpExceptions オプションを使用してください) at sendHttpPost(コード:101)
function onFormSubmit(e){
var itemResponses = e.response.getItemResponses();
var who = itemResponses[0].getResponse();
var when = itemResponses[1].getResponse();
var state = itemResponses[2].getResponse();
var add = itemResponses[3].getResponse();
sendMessage("\n" + who + "状況を変更しました。\n状況 "+ state+ "\n追記 "+ add + "\n" + when );
}
function sendMessage(message){
var url = "https://notify-api.line.me/api/notify";
var token = "トークン";
var options = {
"method" : "post",
"payload" : "message= " + message,
"headers" : {"Authorization" : "Bearer " + token}
};
UrlFetchApp.fetch(url,options);
}
Invalid access tokenは無効なアクセストークン、なのでトークンが違います。違ってないですって言われてもトークンを発行しているlineが無効だと言っている以上、無効です。
回答ありがとうございます。
トークンを再発行することで、LINEにメッセージを送信することができました。スプレットシートのプログラムをフォームにあわせて書き換え、実行もできました。丁寧に答えてくださり、ありがとうございました。
> トークンを再発行
適切な対応だと思います。今回は質問者様がアドバイスレベルの回答に添って適切に対応したことが解決に辿りつけた理由だと思います。みなさんがyoshie様みたいな質問者だったらすてきなんですが。
回答3件
あなたの回答
tips
プレビュー
