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

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

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

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

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

Google

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

Q&A

解決済

1回答

1208閲覧

GASを用いてLINE公式アカウントにbotを導入したい

yumafe

総合スコア1

LINE Messaging API

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

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

Google

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

0グッド

0クリップ

投稿2020/09/17 03:11

前提・実現したいこと

LINE botでgoogleカレンダーの一週間のスケジュールを返すbotを作成しようとしています。

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

Exception: https://api.line.me のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: {"message":"The property, 'messages', in the request body is invalid (line: 1, column: 13)"}(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 82、ファイル「コード」)

プログラムを実行したところ、上記のエラーメッセージが出てきてしまいます。
具体的にmessagesをどのように変更すればよいでしょうか。

該当のソースコード

使用環境:google apps script
9行目の"messages"でエラーが原因で、UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options);が機能していないようです。

GAS

1function sendToLINE(message){ 2 var token = '############' 3; //LINE Message APIのトークンID 4 var options = 5 { 6 "method": "post", 7 "contentType": 'application/json', 8 "headers": { "Authorization": "Bearer " + token }, 9 "payload": JSON.stringify({ "messages": message }), 10 }; 11 12 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options); 13 14}

###ソースコード全文

GAS

1function myFunction(){ 2 3 var startDate = new Date(); 4 var period = 7; // 予定を表示したい日数 5 6 startDate.setDate(startDate.getDate() + 1); 7 var schedule = getSchedule(startDate, period); 8 var message = scheduleToMessage(schedule, startDate, period); 9 10 sendToLINE(message); 11} 12 13// Googleカレンダーから予定取得 14function getSchedule(startDate, period){ 15 var calendarIDs = ['############']; //カレンダーIDの配列。カレンダーを共有している場合、複数指定可。 16 17 var schedule = new Array(calendarIDs.length); 18 for(var i=0; i<schedule.length; i++){schedule[i] = new Array(period);} 19 20 for(var iCalendar=0; iCalendar < calendarIDs.length; iCalendar++){ 21 var calendar = CalendarApp.getCalendarById(calendarIDs[iCalendar]); 22 23 var date = new Date(startDate); 24 for(var iDate=0; iDate < period; iDate++){ 25 schedule[iCalendar][iDate] = getDayEvents(calendar, date); 26 date.setDate(date.getDate() + 1); 27 } 28 } 29 30 return schedule; 31} 32 33function getDayEvents(calendar, date){ 34 var dayEvents = ""; 35 var events = calendar.getEventsForDay(date); 36 37 for(var iEvent = 0; iEvent < events.length; iEvent++){ 38 var event = events[iEvent]; 39 var title = event.getTitle(); 40 var startTime = _HHmm(event.getStartTime()); 41 var endTime = _HHmm(event.getEndTime()); 42 43 dayEvents = dayEvents + '・' + startTime + '-' + endTime + ' ' + title + '\n'; 44 } 45 46 return dayEvents; 47} 48 49function scheduleToMessage(schedule, startDate, period){ 50 var now = new Date(); 51 var body = '\n1週間の予定\n' 52 + '(' +_Md(now) + ' ' +_HHmm(now) + '時点)\n' 53 + '--------------------\n'; 54 55 var date = new Date(startDate); 56 for(var iDay=0; iDay < period; iDay++){ 57 body = body + _Md(date) + '(' + _JPdayOfWeek(date) + ')\n'; 58 59 for(var iCalendar=0; iCalendar < schedule.length; iCalendar++){ 60 body = body + schedule[iCalendar][iDay]; 61 } 62 63 date.setDate(date.getDate() + 1); 64 body = body + '\n'; 65 } 66 67 return body; 68} 69 70// LINE通知 71function sendToLINE(message){ 72 var token = '############' 73; //LINE Message APIのトークンID 74 var options = 75 { 76 "method": "post", 77 "contentType": 'application/json', 78 "headers": { "Authorization": "Bearer " + token }, 79 "payload": JSON.stringify({ "messages": message }), 80 }; 81 82 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", options); 83 84} 85 86// 日付指定の関数 87function _HHmm(date){ 88 return Utilities.formatDate(date, 'JST', 'HH:mm'); 89} 90 91function _Md(date){ 92 return Utilities.formatDate(date, 'JST', 'M/d'); 93} 94 95function _JPdayOfWeek(date){ 96 // date = new Date() 97 var dayStr = ['日', '月', '火', '水', '木', '金', '土']; 98 var dayOfWeek = date.getDay(); 99 100 return dayStr[dayOfWeek]; 101}

なお、############にはそれぞれカレンダーIDとLINEトークンIDを入力しています。

試したこと

gasを初めて使うので、調べながら79行目の"payload": JSON.stringify({ "messages": message }),をいじっておりましたが上手く行かずに困っております。

お手数おかけしますが、どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

LINE の Broadcast API の使い方を間違えています。
payload にはメッセージオブジェクトの配列を指定してください。

JavaScript

1var options = { 2 (省略) 3 payload: JSON.stringify({ messages: [{ type: "text", text: "メッセージ文字列" }] }), 4};

(参考)
ブロードキャストメッセージを送る
https://developers.line.biz/ja/reference/messaging-api/#send-broadcast-message

投稿2020/09/17 04:21

draq

総合スコア2573

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

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

yumafe

2020/09/17 05:43

draq様 解決いたしました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問