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

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

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

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1755閲覧

GASを利用しLine Flex Message の送信

yuto0315

総合スコア1

LINE Messaging API

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/07/07 14:40


前提

GAS(google appscript)を使用してLINEにFlex Messageを送信したいです。
送信されたメッセージに返信するのではなく、GASのトリガーを利用して、ある時間になったらFlex Messageが送信されるようにしたいです。

実現したいこと

記述されたデータ(JSON)をLINEのサーバーに投げてラインメッセージとして送信されるようにしたい。

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

Exception: Request failed for https://notify-api.line.me returned code 400. Truncated server response: {"status":400,"message":"message: must not be empty"} (use muteHttpExceptions option to examine full response)

該当のソースコード

JavaScript

1 var channel_access_token = ''; //ここにアクセストークンを書く 2 3 var message = { 4 "messages" : [ 5 { 6 'type':'flex', 7 'altText':'this is a flex message', 8 //↓このcontentsの部分にSimulatorのJSONをコピー 9 'contents': { } 10 } 11 ] 12 }; 13 14 15 //Lineの送信データの作成部分 16 var options = { 17 "headers" : { 18 "Content-Type" : "application/json", 19 "Authorization" : "Bearer " + channel_access_token 20 }, 21 "method" : "post", 22 "payload" : JSON.stringify(message) 23 }; 24 25 var response = UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); 26 Logger.log(response); //レスポンスがほしいときはコメント外す 27}

試したこと

https://notify-api.line.me からの400番のエラーが返ってきているのでURLが違うか、"messege"の内容がおかしいのではと考えた。

URLについてはhttps://developers.line.biz/ja/docs/messaging-api/sending-messages/ のコード中に記載のあるURLをすべて試した。

また、Flex Message であることが問題なのでは、と考え、以下のコードを実行したところうまく送信された。

JavaScript

1var accessToken = ''; //ここにアクセストークンを書く 2 var options = { 3 'method' : 'post', 4 'headers': { 5 'Authorization': 'Bearer ' + accessToken 6 }, 7 'payload' : { 8 'message': message 9 } 10 }; 11 var response = UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options); 12 //Logger.log(response);

補足情報(FW/ツールのバージョンなど)

https://note.com/koshikake0124/n/n5bb2107fad0f を参考にしましたがこちらは送信されたメッセージに対して返答するものなので、少し違うのでは?と考えています。
全くのにわかですので、ここに乗っていない大切な情報があるかもしれません。必要な情報は聞いていただけるとありがたいです。タグが不適切な可能性があります。

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

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

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

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

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

yuto0315

2022/07/08 07:34

そのなのでしょうかやはり、、、その判断が初心者、にわかでは難しいため質問させて頂きました。
guest

回答1

0

ベストアンサー

URL が LINE Notify なのにペイロードが LINE Messaging API になってるからじゃないでしょうか。


  • LINE Notify API は、テキストメッセージと画像、スタンプぐらいしか使えないが割と簡単です。
    Flex Messageは使えません。
  • LINE Messaging API は、ちょっと複雑な代わりに LINE Notify より自由度が高いです。

お好きなほうをどうぞ。一応動作確認した簡単なサンプルを置いておきます。

  • LINE Notify

JavaScript

1function sendWithNotify() { 2 const token = "(LINE Notify のパーソナルアクセストークン)"; 3 4 const message = "テストメッセージ with LINE Notify"; 5 6 const endpoint = "https://notify-api.line.me/api/notify"; 7 const options = { 8 headers: { 9 "Content-Type": "application/x-www-form-urlencoded", 10 Authorization: "Bearer " + token 11 }, 12 method: "post", 13 muteHttpExceptions: true, 14 payload: "message=" + encodeURIComponent(message) 15 }; 16 17 const res = UrlFetchApp.fetch(endpoint, options); 18 if (res.getResponseCode() !== 200) { 19 throw new Error(res.getContentText()); 20 } 21}
  • LINE Messaging API

JavaScript

1function sendWithMessaging() { 2 const token = "(チャネルアクセストークン)"; 3 const to = "U......."; //宛先ユーザID 4 5 const sampleFlexMessage = { 6 "type": "bubble", 7 "body": { 8 "type": "box", 9 "layout": "vertical", 10 "contents": [ 11 { 12 "type": "text", 13 "text": "Brown Cafe", 14 "weight": "bold", 15 "size": "xl" 16 }, 17 { 18 "type": "text", 19 "text": "Miraina Tower, 4-1-6 Shinjuku, Tokyo", 20 "wrap": true, 21 "color": "#666666", 22 "size": "sm", 23 "flex": 5 24 } 25 ] 26 } 27 }; 28 29 const endPoint = "https://api.line.me/v2/bot/message/push"; 30 const payload = { 31 to, 32 messages: [{ 33 "type": "flex", 34 "altText": "sample flex message", 35 "contents": sampleFlexMessage 36 }] 37 }; 38 39 const options = { 40 headers: { 41 "Content-Type": "application/json; charset=UTF-8", 42 Authorization: "Bearer " + token 43 }, 44 method: "post", 45 muteHttpExceptions: true, 46 payload: JSON.stringify(payload) 47 }; 48 49 const res = UrlFetchApp.fetch(endPoint, options); 50 if (res.getResponseCode() !== 200) { 51 throw new Error(res.getContentText()); 52 } 53}

投稿2022/07/07 23:58

編集2022/07/08 14:18
draq

総合スコア2577

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

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

yuto0315

2022/07/08 00:55

正しいURLはどうしたら見つかるでしょうか?
draq

2022/07/08 02:27

使いたいのは LINE Notify API、LINE Messaging API のかどっちなんでしょうか。
yuto0315

2022/07/08 05:19

返信ありがとうございます。 それらの違いを理解していないのですが、 Line flex message が送信できるのはどちらなのでしょうか? ご教授よろしくお願いします。
yuto0315

2022/07/08 06:53

LINEMessage api?のbotに登録してみたのですが、LINE notify の方が良いということがわかりました。なのでnotify apiを使用したいです。 この場合、urlはnotifyで、ペイロードを変更する必要がありますよね?、、、
yuto0315

2022/07/08 15:45

ありがとうございました!無事に解決することができました。 貴重なお時間を咲いていただきありがとうございました。非常に感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問