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

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

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

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

Google カレンダー

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

Q&A

1回答

2619閲覧

LINE BOTとGoogleカレンダーの連携

GG_Glow

総合スコア12

LINE Messaging API

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

Google カレンダー

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

0グッド

0クリップ

投稿2021/05/29 09:07

編集2021/05/29 10:39

現在LINE BOTとGoogleカレンダーを連携してGoogleカレンダーの情報をLINE BOTで変更したり、Googleカレンダーの予定を自動的に送信してくれるBOTを作成しています。
LINE DevekioersでWebhook URLの設定や応答メッセージ、挨拶メッセージを無効にするなどの設定は既に完了しており、オウム返しのBOTは作成できるので。本コードが問題あると思います。

Js

1var CHANNEL_ACCESS_TOKEN = "アクセストークン"; 2var dateExp = /(\d +)/(\ d +)\ s(\ d +):(\ d +)/; 3//doPost関数(Lineからメッセージを受け取る) 4function doPost(e) { 5 GetMessage(e); 6}   //受け取ったメッセージの処理 7function GetMessage (e) { 8 var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; 9 if (typeof replyToken === 'undefined') { 10 return; 11 } var messageText = JSON.parse(e.postData.contents).events[0].message.text; 12 var cache = CacheService.getScriptCache(); 13 var type = cache.get(" type"); 14 15 if (type === null) { 16 //予定の追加 17 if (messageText === "予定の追加") { 18 cache.put(" type", 1); 19 //開始日時の質問 20 replyPlans(replyToken, "予定日をいずれかの形式で教えてください", 21 "12/1\n3:00", "4/1 13:00"); 22 //今日、7日間の予定の取得 23 } else if (messageText.match(" 今日の予定")) { 24 reply(replyToken, getEvents()); 25 } else if (messageText.match(" 今週の予定")) { 26 reply(replyToken, notifyWeekly()); 27 } else { 28 //処理方法 の返答 29 replyPlans(replyToken, "「予定の追加」で予定追加します。", "「今日の予定」で今日の予定をお知らせします。", "「今週の予定」で7日間の予定をお知らせします。"); 30 } 31 } else { 32 //キャンセル処理 33 if (messageText === "キャンセル") { 34 cache.remove(" type"); 35 reply(replyToken, "予定追加のキャンセルをしました"); 36 return; 37 } 38 39 switch (type) { 40 case "1": 41 //開始日時の追加 42 if (messageText.match(dateExp)) { 43 var [matched, start_month, start_day, start_Hour, start_Min] = 44 messageText.match(dateExp); 45 cache.put(" type", 2); 46 cache.put(" start_month", start_month); 47 cache.put(" start_day", start_day); 48 cache.put(" start_hour", start_Hour); 49 cache.put(" start_min", start_Min); 50 //終了日時の質問 51 var year = new Date().getFullYear(); 52 var startDate = new Date(year, cache.get("start_month") - 1, cache.get("start_day"), cache.get("start_hour"), cache.get("start_min")); 53 reply(replyToken, " 開始日時は\n" + EventFormat(startDate) + "\nですね。\n\n次に予定の終了日時をお知らせください。"); 54 break; 55 } else { 56 reply(replyToken, "予定追加処理中です。\n「キャンセル」\nで追加作業をキャンセルします。"); 57 break; 58 } case "2": 59 // 終了日時の追加 60 if (messageText.match(dateExp)) { 61 var [matched, end_month, end_day, end_Hour, end_Min] = 62 messageText.match(dateExp); 63 cache.put("type", 3); 64 cache.put("end_month", end_month); 65 cache.put("end_day", end_day); 66 cache.put("end_hour", end_Hour); 67 cache.put("end_min", end_Min); 68 //予定 名 の 質問 69 var year = new Date().getFullYear(); 70 var endDate = new Date(year,cache.get("end_month")-1,cache.get("end_day"), cache.get("end_hour"),cache.get("end_min")); 71 reply(replyToken,"終了日時は\n"+EventFormat(endDate)+"\n ですね。\n\n最後に予定名を教えてください。"); 72 break; 73 } else { 74 reply(replyToken,"予定追加処理中です。\n「キャンセル」\nで追加作業をキャンセルします。"); 75 break; 76 } 77 case "3": 78 //最終確認 79 cache.put(" type", 4); 80 cache.put(" title", messageText); var [title, startDate, endDate] = createData(cache); 81 //予定追加の確認 82 replyPlans(replyToken, "予定名:"+title,"開始日時:\n"+EventFormat(startDate)+"\n終了日時:\ n" + 83 EventFormat(endDate), "予定を追加しますか?\n「はい」か「いいえ」でお知らせください。"); 84 break; 85 case "4": 86 if (messageText === "はい"); { 87 cache.remove("type"); 88 var [title,startDate,endDate]=createData(cache); 89 CalendarApp.getDefaultCalendar().createEvent(title,startDate,endDate); 90 reply(replyToken,"Googleカレンダーに追加しました"); 91 }else if(messageText === "いいえ") { 92 cache.remove(" type"); 93 reply(replyToken, "予定の追加をキャンセルしました。"); 94 } else { 95 reply(replyToken, "「はい」か「いいえ」でお答えください。"); break; 96 } 97 break; 98 } 99 } 100} 101function createData(cache) { 102 var year = new Date().getFullYear(); 103 var title = cache.get(" title"); 104 var startDate = new Date(year, cache.get("start_month") - 1, cache.get("start_day"), cache.get("start_hour"), cache.get("start_min")); 105 var endDate = new Date(year, cache.get("end_month") - 1, cache.get("end_day"), cache.get("end_hour"), cache.get("end_min")); 106 return [title, startDate, endDate]; 107} 108function EventFormat(Data) { 109 var y = Date.getFullYear(); 110 var m = Date.getMonth() + 1; 111 var d = Date.getDate(); 112 var w = Date.getDay(); 113 var H = Date.getHours(); 114 var M = Date.getMinutes(); 115 var weekname = ['日', '月', '火', '水', '木', '金', '土']; 116 m = ('0' + m).slice(-2); 117 d = ('0' + d).slice(-2); 118 return y + '年' + m + '月' + d + '日(' + weekname[w] + ')\n' + H + '時' + M + '分' 119} 120 121function replyPlans(replyToken, Message, Message2, Message3) { 122 var url = "https://api.line.me/v2/bot/message/reple"; 123 UrlFetchApp.Fetch(url, { 124 "headers": { 125 "Content-Type": "application/json;charset=UTF-8", 126 "Authorization": "Bearer" + CHANNEL_ACCESS_TOKEN, 127 }, 128 "method": "post", 129 "payload": JSON.stringify({ 130 "replyToken": replyToken, 131 "messages": [{ 132 "type": "text", 133 "text": message, 134 }, { 135 "type": "text", 136 "text": message2, 137 }, { 138 "type": "text", 139 "text": message3, 140 }], 141 }), 142 }); 143 return ContentService.createTextOutput(JSON.stringify({ "content": "postok" })).setMimeType(ContentService.MimeType.JSON); 144} 145 146function reply(replyToken, Message) { 147 var url = "https://api.line.me/v2/bot/message/reple"; 148 UrlFetchApp.Fetch(url, { 149 "headers": { 150 "Content-Type": "application/json;charset=UTF-8", 151 "Authorization": "Bearer" + CHANNEL_ACCESS_TOKEN, 152 }, 153 "method": "post", 154 "payload": JSON.stringify({ 155 "replyToken": replyToken, 156 "messages": [{ 157 "type": "text", 158 "text": message, 159 }], 160 }), 161 }); 162 return ContentService.createTextOutput(JSON.stringify({ "content": "postok" })).setMimeType(ContentService.MimeType.JSON); 163} 164 165//今日の予定 166function getEvents() { 167 var events = CalendarApp.getDefaultCalendar().getEventsForDay(new Date()); 168 var body = "今日の予定は"; 169 170 if (events.length === 0) { 171 body += "ありません。"; 172 return body; 173 } 174 175 body += "\n"; 176 events.forEach(function (event) { 177 var title = event.getTile(); 178 var start = HmFormat(event.getStartTime()); 179 var end = HmFormat(event.getStartTime()); 180 body += "★" + title + ":" + start + "~" + end + "\n"; 181 }); 182 body += "です。"; 183 return body; 184} 185 186//7日間の予定 187function notifyWeekly() { 188 var body = "7日間の予定は\n"; 189 var weekday = ['日', '月', '火', '水', '木', '金', '土']; 190 for (var i = 0; i < 7; i++) { 191 var dt = new Date(); 192 dt.setDate(dt.getDate() + i); 193 var events = CalendarApp.getDefaultCalendar().getEventsForDay(dt); 194 body += Utilities.formatDate(dt, "JST", '★MM/dd(' + weekday[dt.getDay()] + ')') + "\n"; 195 if (events.length === 0) { 196 body += "ありません。\n"; 197 } 198 199 events.forEach(function (event) { 200 var title = event.getTitle(); 201 var start = HmFormat(event.getStartTime()); 202 var end = HmFormat(event.getStartTime()); 203 body += title + ";" + start + "~" + end + "\n"; 204 }); 205 } 206 return body; 207} 208 209function HmFormat(date) { 210 return Utilities.formatDate(date, "JST", "HH:mm"); 211}

オウム返しBOTはDopostでのエラーが出てもLINE BOT事態に反映されるのでエラー自体は問題がないと思っています。
現在case4のelse if(96行目)の部分がエラーが出て、if文にしてもいいのかが気になります。(解決しましたが動作はできませんでした。)

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

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

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

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

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

guest

回答1

0

現在case4のelse if(96行目)の部分がエラーが出て、if文にしてもいいのかが気になります。

javascript

1 case "4": 2 if (messageText === "はい"); { 3 cache.remove("type"); 4 var [title,startDate,endDate]=createData(cache); 5 CalendarApp.getDefaultCalendar().createEvent(title,startDate,endDate); 6 reply(replyToken,"Googleカレンダーに追加しました"); 7 }else if(messageText === "いいえ") {

直前のif文にて、判定のための()直後にセミコロンが入っています。
そのため、「ifブロックが完結しているのに、else ifが出てきた」と判断されてエラーとなっているのではないでしょうか。

投稿2021/05/29 09:28

attakei

総合スコア2738

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

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

GG_Glow

2021/05/29 10:35

ありがとうございます。 case4のif文はエラーが出なくなりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問