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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Q&A

解決済

1回答

776閲覧

GASによるGoogleカレンダーの内容をLINE通知

usami

総合スコア13

Google Apps Script

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

0グッド

0クリップ

投稿2019/06/17 12:50

編集2019/06/18 01:24

GASでGoogleカレンダーの内容をLINEに通知するシステムを組んでいますが

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

と出てしまい実行できません。
どのようにすれば実行できるようになるでしょうか?

GAS

1/*カレンダーのIDを取得*/ 2function get_Calendar() { 3 var arrCals=[]; 4 arrCals.push(CalendarApp.getCalendarById('カレンダーID'));//4名さま用卓 5 6 return arrCals; 7} 8 9/*今日の予定を取得するメインの関数*/ 10function get_Today_Schedule(){ 11 var arrCals = get_Calendar();//カレンダーID取得 12 var date = new Date() 13 var strIntro = "予約です。\n" ; 14 var strBody = strIntro; 15 16 sendLINE(strBody); 17} 18 19/*カレンダーのイベント取得*/ 20function getEvents(Cals,getDate){ 21 var arrEvents = Cals.getEventsForDay(getDate); 22 var strName = Cals.getName();//カレンダーの名前取得 23 var strEvents =""; 24 for (var i=0; i<arrEvents.length; i++){ 25 var strTitle = arrEvents[i].getTitle(); 26 var strStart = _HHmm(arrEvents[i].getStartTime());//開始時刻 27 var strEnd = _HHmm(arrEvents[i].getEndTime());//開始時刻 28 if (strStart == strEnd){ 29 strEvents = strEvents + '終日予約:' + strTitle + ' (' + strName + ')' + '\n'; 30 }else{ 31 strEvents = strEvents + strStart + '~' + strEnd+ ':' + strTitle + ' (' + strName + ')' + '\n'; 32 } 33 } 34 return strEvents; 35} 36 37/*時間の表示変更*/ 38function _HHmm(str){ 39 return Utilities.formatDate(str,'JST','HH:mm'); 40} 41 42function sendLINE(body){ 43 var LINE_CHANNEL_ACCESS_TOKEN = 'ほにゃ';//LINE Botのアクセストークン 44 var url = 'https://api.line.me/v2/bot/message/push'; 45 var toID = 'ほにゃ';//取得したグループID 46 47 UrlFetchApp.fetch(url, { 48 'headers': { 49 'Content-Type': 'application/json; charset=UTF-8', 50 'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN, 51 }, 52 'method': 'POST', 53 'payload': JSON.stringify({ 54 'to': toID, 55 'messages':[{ 56 'type': 'text', 57 'text': body , 58 }] 59 }) 60 }) 61}

こちらのコードは問題なく動きました⬇︎

GAS

1function sendLINE(){ 2 var LINE_CHANNEL_ACCESS_TOKEN = 'ほにゃ';//LINE Botのアクセストークン 3 var url = 'https://api.line.me/v2/bot/message/push'; 4 var toID = 'ほにゃ';//取得したグループID 5 6 var body = '送信テスト'; 7 8 UrlFetchApp.fetch(url, { 9 'headers': { 10 'Content-Type': 'application/json; charset=UTF-8', 11 'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN, 12 }, 13 'method': 'POST', 14 'payload': JSON.stringify({ 15 'to': toID, 16 'messages':[{ 17 'type': 'text', 18 'text': body , 19 }] 20 }) 21 }) 22}

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

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

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

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

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

papinianus

2019/06/17 22:10

やりたいことがわけわからなすぎるのですが、どれを実行しましたか? あと、今このコードだと提示されたエラーにはならないように思えるので、エラーになったときのコードをお示しください
usami

2019/06/18 01:17

sendLINEを実行しました。 APIキーやID以外はこのコードです。
macaron_xxx

2019/06/18 03:51 編集

sendLineを実行したら、引数でわたってくるはずのbodyがわたってこず、空だから、エラーが出てるんですよ。 function test() {sendLINE('test');} こんなやつを実行してやればいいはず。
papinianus

2019/06/18 09:20

常識的に考えて、get_Today_Scheduleを実行したと思いました。これはエラーにならないはずです。 結局どうしたいのですか?
guest

回答1

0

ベストアンサー

get_Today_Scheduleを実行してください。4名さま用卓のカレンダーidを忘れずに。

javascript

1/*カレンダーのIDを取得*/ 2function get_Calendar() { 3 return CalendarApp.getCalendarById('カレンダーID');//4名さま用卓 4} 5 6/*今日の予定を取得するメインの関数*/ 7function get_Today_Schedule(){ 8 const date = new Date(); 9 const event = getEvents(get_Calendar(), date); 10 const strIntro = "予約です。\n" ; 11 const strBody = strIntro + event; 12 sendLINE(strBody); 13} 14 15/*カレンダーのイベント取得*/ 16function getEvents(Cal,getDate){ 17 const arrEvents = Cal.getEventsForDay(getDate); 18 const strName = Cal.getName();//カレンダーの名前取得 19 var strEvents =""; 20 for (var i=0; i<arrEvents.length; i++){ 21 var strTitle = arrEvents[i].getTitle(); 22 var strStart = _HHmm(arrEvents[i].getStartTime());//開始時刻 23 var strEnd = _HHmm(arrEvents[i].getEndTime());//開始時刻 24 if (strStart === strEnd){ 25 strEvents = strEvents + '終日予約:' + strTitle + ' (' + strName + ')' + '\n'; 26 }else{ 27 strEvents = strEvents + strStart + '~' + strEnd+ ':' + strTitle + ' (' + strName + ')' + '\n'; 28 } 29 } 30 return strEvents; 31} 32 33/*時間の表示変更*/ 34function _HHmm(str){ 35 return Utilities.formatDate(str,'JST','HH:mm'); 36} 37 38function sendLINE(body){ 39 var LINE_CHANNEL_ACCESS_TOKEN = 'ほにゃ';//LINE Botのアクセストークン 40 var url = 'https://api.line.me/v2/bot/message/push'; 41 var toID = 'ほにゃ';//取得したグループID 42 43 UrlFetchApp.fetch(url, { 44 'headers': { 45 'Content-Type': 'application/json; charset=UTF-8', 46 'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN, 47 }, 48 'method': 'POST', 49 'payload': JSON.stringify({ 50 'to': toID, 51 'messages':[{ 52 'type': 'text', 53 'text': body , 54 }] 55 }) 56 }) 57}

投稿2019/06/19 14:32

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問