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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

2053閲覧

GASでLINEBOT作成時に表示された Exception: https://api.line.me のリクエストに失敗しました(エラー: 400)を解決したい

umaretate_sika

総合スコア1

LINE Messaging API

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/08/02 07:59

編集2021/08/02 08:46

前提・実現したいこと

GASを使用して、電車遅延情報のLINE BOTを作りたいです。
数日前、インターンシップで同じ機能のSlack BOTを作ったため、そのコードを活用してLINE BOTを作ろうと思いました。
独学の上にGASを使用した経験が浅く、おそらくSlack用からLINE用にする過程でエラーが出たと推測しています。

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

Exception: https://api.line.me のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: {"message":"The request body has 2 error(s)","details":[{"message":"May not be empty","property":"messages"},{"message":"May not be empty","propert...(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 70、ファイル「コード」)

上記のようなエラーメッセージが表示されるものの、個人では何が原因で発生しているのか特定できず、原因と改善方法を教えていただきたいです。

該当のソースコード

(java script使用)

var ACCESS_TOKEN = '****' function myFunction() { //Yahoo路線情報のURLを設定 var yahoo_url = "https://transit.yahoo.co.jp/traininfo/area/4/"; //情報取得 var contents = UrlFetchApp.fetch(yahoo_url).getContentText(); //更新時刻が読み取れるように設定 var myRegexp = /<span class="subText">([\s\S]*?)</i;  //null以外ならtimeに、nullなら""にする var time = (myRegexp.exec(contents)!= null)?myRegexp.exec(contents):["",""];  //路線が読み取れるように設定 var myRegexp = /<div class="elmTblLstLine trouble">([\s\S]*?)#mdStatusTroubleLine/i;  //ざっくり抽出 var regexp = myRegexp.exec(contents); //成功した場合 if(regexp != null){ var result = []; var regexp2 = [];   //路線情報が読み取れるよう設定 var myRegexp2 = /">([\s\S]*?)</g;   //regexp2に路線情報を入れる while((regexp2 = myRegexp2.exec(regexp[1])) != null){     //遅延情報がある場合、情報取得後データを配列に追加 if(regexp2[1] != "[!]"){      result.push(regexp2[1]); } } }  //配列にデータがある場合、件数カウント、表示用に切り替え if(result != null){ var counts = result.length/ 2; var postdate = ""; for(i = 0;i<counts ;i++){ postdate += result[i*2] + ":" + result[i*2+1] + "\n"; } }else{ //無かった場合 var postdate = "現在、事故・遅延に関する情報はありません"; }   //送信するメッセージの設定 var message = { "text":"Yahoo路線情報" + "\n" + postdate + "\n" + time[1] + "\n" + "https://transit.yahoo.co.jp/traininfo/area/4/" }; // 送信のための諸準備 const replyData = { "method": "post", "headers": { "Content-Type": "application/json", "Authorization": "Bearer " + ACCESS_TOKEN }, "payload":JSON.stringify(message) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push",replyData); }

試したこと

・当初出ていた401エラーの解決のために似たような質問を探し、該当部分のコード(送信のための諸準備以降)を修正⇒400エラーに変化
・全体を確認しなおし不要だと思われる「,」を削除⇒400エラーが3つから2つに
・パソコン、chromeを再起動⇒変化なし

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

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

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

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

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

y_waiwai

2021/08/02 08:41

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
umaretate_sika

2021/08/02 08:47

修正させていただきました。 ご指摘、方法の指示ありがとうございます。
guest

回答1

0

ベストアンサー

「Messaging API リファレンス|プッシュメッセージを送る」を参考に、下記のように修正した場合どうでしょうか。

  //送信するメッセージの設定 var message = { "to": "プッシュメッセージの送信先ID", "messages": [ { "type": "text", "text": "Yahoo路線情報" + "\n" + postdate + "\n" + time[1] + "\n" + "https://transit.yahoo.co.jp/traininfo/area/4/" } ] };

投稿2021/08/02 12:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

umaretate_sika

2021/08/02 12:46

解決できました! LINEBOTには「"to": "プッシュメッセージの送信先ID",」が必要だと知りました。 初歩的な問題ですいません、、、 大変助かりました!!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問