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

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

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

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

Google Apps Script

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

Q&A

解決済

3回答

1453閲覧

GASを用いてグループLINEにアンケートを自動送信

yoshie

総合スコア17

LINE Messaging API

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

Google Apps Script

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

1グッド

0クリップ

投稿2019/02/24 07:16

編集2019/02/25 11:24

前提・実現したいこと

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フォームのアンケート結果自動記入に誤りはないと思われる。

papinianus👍を押しています

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

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

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

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

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

yoshie

2019/02/28 13:52 編集

全画面表示にするとスクリプトエディタが表示されました。スプレットシートのプログラムをフォームに書き換えしましたが、承認エラーが起きました。 https://notify-api.line.me/api/notify のリクエストに失敗しました(エラー: 401)。サーバー応答の一部: {"status":401,"message":"Invalid access token"}(応答の全文を見るには muteHttpExceptions オプションを使用してください) at sendHttpPost(コード:101)
yoshie

2019/02/28 04:06 編集

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); }
papinianus

2019/03/01 01:47

Invalid access tokenは無効なアクセストークン、なのでトークンが違います。違ってないですって言われてもトークンを発行しているlineが無効だと言っている以上、無効です。
yoshie

2019/03/01 02:10

回答ありがとうございます。 トークンを再発行することで、LINEにメッセージを送信することができました。スプレットシートのプログラムをフォームにあわせて書き換え、実行もできました。丁寧に答えてくださり、ありがとうございました。
papinianus

2019/03/01 02:54

> トークンを再発行 適切な対応だと思います。今回は質問者様がアドバイスレベルの回答に添って適切に対応したことが解決に辿りつけた理由だと思います。みなさんがyoshie様みたいな質問者だったらすてきなんですが。
guest

回答3

0

イメージ説明
普通は上図のようにスクリプトエディタが表示されるようです。

ここに表示がないということは上の方がいっておられるように、編集権限がないということが考えられるので、編集権限をもつユーザに編集権限を付与してもらう必要があります。
共同編集者とフォームを共有する

投稿2019/02/28 17:05

dett

総合スコア115

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

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

yoshie

2019/03/01 02:02

回答ありがとうございます。 全画面表示にすると表示されるメニューが変わることを知らず、作業をしていました。
guest

0

ベストアンサー

私自身その現象にあたったことがないのですが、こちらの質問・回答・コメントによると、スプレッドシートではなくフォームにスクリプトを書き、そちらのトリガで実行すると複数送信が抑制されるそうです。

投稿2019/02/26 02:46

papinianus

総合スコア12705

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

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

yoshie

2019/02/26 04:23

回答ありがとうございます。フォームからスクリプトを記入しようとしたのですが、Googleフォームの編集画面のメニューにスクリプトエディタがなく対処法が見つかりません。
papinianus

2019/02/26 04:45

編集画面の右上に・が縦に3つならんだところがありませんでしたっけ?
yoshie

2019/02/26 05:05

・が3つ並んだボタンを押して出できたメニューにスクリプトエディタとあとアドオン…もありません。
papinianus

2019/02/26 05:10

フォームに対するスクリプトの編集権がないっていう事態については、申し訳ないですがノウハウないです。
guest

0

解決方法

  1. googleフォームにスクリプトする
  2. 全画面表示でgoogleフォームのスクリプトエディタのボタンが現れる
  3. スクリプトエディタのプログラムをフォームに合わせて書き換え
  4. Invalid access tokenからトークンを再発行

コード
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 token = ['トークン'];
var options =
{
"method" : "post",
"payload" : {"message": message,
},
"headers" : {"Authorization" : "Bearer "+ token}

};

UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

投稿2019/03/01 02:32

yoshie

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問