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

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

0回答

990閲覧

LINE messaging APIでグループIDを取得したい

Kodanosuke

総合スコア42

LINE Messaging API

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/06/06 10:32

前提・実現したいこと

お世話になります.
現在,LINEのグループに参加されているメンバーのリストを取得するようなコードを作成している途中にいます.
その前段階として下記のコードで当該グループのグループIDを取得しようとしていますが,うまくいっていません.
どこが悪いがご指摘いただけないでしょうか.

よろしくお願いいたします.

該当のソースコード

GoogleAppScript

1// Messaging APIのチャネルアクセストークン 2const CHANNEL_ACCESS_TOKEN = "【※1】"; 3// 予定の追加・管理・取得をするカレンダーID 4const CALENDER_ID = "【※1】"; 5// グルチャのグループID 6const GROUP_ID = "【※3】"; 7 8const dateExp = /(\d{2})/(\d{2})\s(\d{2}):(\d{2})/; 9const dayExp = /(\d+)[/月](\d+)/; 10const hourMinExp = /(\d+)[:時](\d+)*/; 11 12/* 13 * ボットにイベントが発生したときの(メイン)処理 14 */ 15function doPost(e) { 16 let replyToken = JSON.parse(e.postData.contents).events[0].replyToken; 17 let lineType = JSON.parse(e.postData.contents).events[0].type 18 let userMessage = JSON.parse(e.postData.contents).events[0].message.text; 19 // フォロー、アンフォローイベントは今回無視 20 if(typeof replyToken === "undefined" || lineType === "follow" || lineType === "unfollow") { 21 return; 22 } 23 // ボットの状態遷移をtypeという名のキャッシュで管理 24 let cache = CacheService.getScriptCache(); 25 let type = cache.get("type"); 26 27 // 状態なし 28 if(type === null) { 29 // 「予定の追加」メッセージを受け取ったとき 30 if(userMessage === "予定の追加") { 31 cache.put("type", 1); 32 reply(replyToken, "予定の日付を教えてください!\n形式指定:『1/23』『1月23日』\nキャンセル:『やめる』と入力"); 33 // 「匿名で投稿」メッセージを受け取ったとき 34 } else if(userMessage === "匿名で投稿") { 35 cache.put("type", 10); 36 reply(replyToken, "グルチャに匿名でラインします!投稿内容を教えてください!\nキャンセル:『やめる』と入力"); 37 // メッセージの投稿に必要なグループIDの取得(後準備で説明) 38 } else if(userMessage === "getGroupID") { 39 reply(replyToken, JSON.parse(e.postData.contents).events[0].source.groupId); 40 } 41 // 状態あり 42 } else { 43 if(userMessage === "やめる") { 44 cache.remove("type"); 45 reply(replyToken, "キャンセルしました"); 46 return; 47 } 48 49 50 } 51 } 52 53 54 55/* 56 * 追加する予定の日付、開始時刻、終了時刻、名前の作成・保管 57 */ 58function createEventData(cache) { 59 const year = new Date().getFullYear(); 60 const title = cache.get("title"); 61 const startDate = new Date(year, cache.get("month") - 1, cache.get("day"), cache.get("start_hour"), cache.get("start_min")); 62 const endDate = new Date(year, cache.get("month") - 1, cache.get("day"), cache.get("end_hour"), cache.get("end_min")); 63 return [title, startDate, endDate]; 64} 65 66/* 67 * 追加する予定の確認のためのフォーマット作成 68 */ 69function toEventFormat(title, startDate, endDate) { 70 const start = Utilities.formatDate(startDate, "JST", "MM/dd HH:mm"); 71 const end = Utilities.formatDate(endDate, "JST", "MM/dd HH:mm"); 72 const str = title + ": " + start + " ~ " + end; 73 return str; 74} 75 76/* 77 * 匿名で投稿する内容の作成・保管 78 */ 79function createPost(cache){ 80 const post = cache.get("post"); 81 return post; 82} 83 84/* 85 * ボットのメッセージ応答 86 */ 87function reply(replyToken, message) { 88 const url = "https://api.line.me/v2/bot/message/reply"; 89 UrlFetchApp.fetch(url, { 90 "headers": { 91 "Content-Type": "application/json; charset=UTF-8", 92 "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN, 93 }, 94 "method": "post", 95 "payload": JSON.stringify({ 96 "replyToken": replyToken, 97 "messages": [{ 98 "type": "text", 99 "text": message, 100 }], 101 }), 102 }); 103 return ContentService.createTextOutput(JSON.stringify({"content": "post ok"})).setMimeType(ContentService.MimeType.JSON); 104} 105 106/* 107 * ボットからのポスト処理 108 */ 109function pushPost(body){ 110 const url = "https://api.line.me/v2/bot/message/push"; 111 112 // 指定のグルチャにPOSTする 113 UrlFetchApp.fetch(url, { 114 "headers": { 115 "Content-Type": "application/json; charset=UTF-8", 116 "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN, 117 }, 118 "method": "post", 119 "payload": JSON.stringify({ 120 "to": GROUP_ID, 121 "messages":[{ 122 "type": "text", 123 "text": body, 124 }] 125 }) 126 }) 127} 128 129/* 130 * 通知する予定の取得 131 */ 132function getEvents() { 133 let date = new Date(); 134 date.setDate(date.getDate() + 1); 135 const events = CalendarApp.getCalendarById(CALENDER_ID).getEventsForDay(date); 136 137 if (events.length !== 0) { 138 let body = "明日の予定は\n"; 139 events.forEach(function(event) { 140 const title = event.getTitle(); 141 const start = toHHmm(event.getStartTime()); 142 const end = toHHmm(event.getEndTime()); 143 body += "*" + title + ": " + start + " ~ " + end + "\n"; 144 }); 145 body += "です!"; 146 147 pushPost(body); 148 } 149} 150 151/* 152 * 時刻フォーマットの作成 153 */ 154function toHHmm(date){ 155 return Utilities.formatDate(date, "JST", "HH:mm"); 156}

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問