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

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

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

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

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1072閲覧

Google Apps Scriptを利用してGmailに届いたメールを複数のLINEグループに送信したい

seisui

総合スコア5

LINE Messaging API

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

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/02/03 04:55

編集2020/02/04 04:50

前提・実現したいこと

Google Apps Scriptを利用してGmailに届いた特定(subject=火災)のメールを複数のLINEグループに送信したいと思っています。
https://yuis-programming.com/?p=486
のサイトにイメージに近いコードがあった為そのまま利用しています。

発生している問題・エラーメッセージ

上記サイトを参照してGmailが届いたら1つのLINEグループに転送をかける事は出来たのですが 複数のLINEグループに同時送信する事が出来ません。 どなたか複数のLINEグループに同時送信できるようにアドバイスをいただけませんでしょうか?

該当のソースコード

// 検索結果に応じたGmailをLINEに通知する // 検索 var FindSubject = 'subject:(火災) '; function getMail(){ //指定した件名のスレッドを検索して取得 var myThreads = GmailApp.search(FindSubject, 0, 10); //スレッドからメールを取得し二次元配列に格納 var myMessages = GmailApp.getMessagesForThreads(myThreads); for(var i in myMessages){ for(var j in myMessages[i]){ //スターがないメッセージのみ処理 if(!myMessages[i][j].isStarred()){ var strDate = myMessages[i][j].getDate(); var strSubject = myMessages[i][j].getSubject(); var strMessage = myMessages[i][j].getPlainBody().slice(0,200); //LINEにメッセージを送信 sendLine(strDate,strSubject,strMessage); //処理済みのメッセージをスターをつける myMessages[i][j].star(); } } } } function sendLine(strDate,strSubject,strMessage){ //Lineに送信するためのトークン var strToken = ""; var options = { "method" : "post", "payload" : "message=" + strDate + strSubject + strMessage, "headers" : {"Authorization" : "Bearer "+ strToken} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); }

※追記
LINENotifyを複数作成(総務LINEグループ、経理LINEグループ)して
掲示のコードを下記のように変更しています。
//Lineに送信するためのトークン
var strToken = "総務LINEグループのトークン";
var strToken = "経理LINEグループのトークン";

上記の場合は経理LINEグループにしかLINEが届きません。
本当は上記2つのグループに同じ内容が届くようにしたいです。

※追記2
コードの一部を下記のように変更致しました。
function sendLine(strDate,strSubject,strMessage){

//Lineに送信するためのトークン
var strToken = "ZqK1G○○○",
strToken2 = "h62M○○○";
var options =
{
"method" : "post",
"payload" : "message=" + strDate + strSubject + strMessage,
"headers" : {"Authorization" : "Bearer "+ strToken}

},
options2 =
{
"method" : "post",
"payload" : "message=" + strDate + strSubject + strMessage,
"headers" : {"Authorization" : "Bearer "+ strToken2}

};

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


実行すると8行目の「 var myThreads = GmailApp.search(FindSubject, 0, 10);」のコードが
getMail 上限を超えています: : User-rate limit exceeded.
というエラーで止まってしましました。。
ご指摘いただけるとありがたいです。

トリガーは1分毎に動作するようにしています。

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

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

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

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

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

y_waiwai

2020/02/03 05:04

提示のコードではどういう動作となるんでしょうか 質問を編集して追記してください
seisui

2020/02/03 05:21

先ほど訂正いたしました。コメントありがとうございます。
guest

回答1

0

ベストアンサー

トークンというのは部屋ごとにみんな違うものです。
コード上ではそうなってないようですが、そこらへんは大丈夫でしょうか

投稿2020/02/03 05:16

y_waiwai

総合スコア88042

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

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

seisui

2020/02/03 05:22

コメントありがとうございます! 修正点が漏れていたため修正いたしました。 トークンを複数作ってはいたのですが、GAXのコードもそれぞれに作成する必要があるという事でしょうか?
y_waiwai

2020/02/04 00:22

var strToken = "総務LINEグループのトークン"; var strToken = "経理LINEグループのトークン"; コード中にこのように並べて書いてあるのだったら、あとの方しか有効じゃありません 関数の引数にトークンも取るようにして、それぞれのトークンを渡してそれぞれ実行させるようにしましょう
seisui

2020/02/04 04:58

コメントありがとうございます。 下記のようにコードを変更してみました。 function sendLine(strDate,strSubject,strMessage){ //Lineに送信するためのトークン var strToken = "ZqK1G○○○", strToken2 = "h62M○○○"; var options = { "method" : "post", "payload" : "message=" + strDate + strSubject + strMessage, "headers" : {"Authorization" : "Bearer "+ strToken} }, options2 = { "method" : "post", "payload" : "message=" + strDate + strSubject + strMessage, "headers" : {"Authorization" : "Bearer "+ strToken2} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options2); } 関数 sendLineを実行すると不具合は出ないのですが、スクリプト全体を実行しようとすると getMail 上限を超えています: : User-rate limit exceeded. とエラーが出るようになってしまいました。
y_waiwai

2020/02/04 05:07

そのエラーはおそらく修正箇所とは関係ないでしょう まずはsendLine関数だけテキトーな文字列入れてきちんと動くかチェックすればどうでしょう
seisui

2020/02/04 06:36

y_waiwaiさん何度もありがとうございます。 とりあえず function sendLine(strDate,strSubject,strMessage){ //Lineに送信するためのトークン var strToken = "ZqK○○", strToken2 = "h62○○"; var options = { "method" : "post", "payload" : "message=" + strDate + strSubject + strMessage, "headers" : {"Authorization" : "Bearer "+ strToken} },    options2 = { "method" : "post", "payload" : "message=" + strDate + strSubject + strMessage, "headers" : {"Authorization" : "Bearer "+ strToken2} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options2); } だけを動かすと、[火災テスト1] undefinedundefinedundefinedと返答が帰ってくるのでsendLine関数は動作しているようです。 getMail関数を入れると「上限を超えています: : User-rate limit exceeded」が出てしまいます。
y_waiwai

2020/02/04 06:47

そのエラーはGoogleに要求するリクエストの上限を超えたってやつなので、1日程度なにもしないでおいとけばどーでしょう
seisui

2020/02/04 07:42

なるほど! 色々しまくってたので、しばらく放置してみます。 また報告させてください。
seisui

2020/02/07 03:02

ここ数日放置しているのですが、1日に1回程度上限を超えています: : User-rate limit exceededのエラーが出るようです。 しかし今日ログをみると落ち着いてきた??ようなのでもう少し様子を見てみます!
seisui

2020/02/10 01:36

無事解決いたしました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問