9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LineBotでGoogleカレンダーの予定を通知する

Last updated at Posted at 2021-04-02

##はじめに
最近、LineBotの作り方を勉強したいですw。
ここでは、他者のブログから学んだことをやりました。作り方とコードを再整理しました。
今回はLINE APIの一つであるMessaging APIとGoogle Apps Scriptを使って、LINE経由でgoogleカレンダ上の予定を自動で通知させます。

1.LineBotを作成する

LINE公式アカウント(旧ライン@)の作り方 を参照してください。

2.GoogleカレンダーIDを取得する

Googleカレンダー【設定】 → 【マイカレンダーの設定】 → 【カレンダーの統合】
image.png

ここまで通知Botに必要な項目3つすべてを取得しました。
Your user ID
チャンネルアクセストークン
カレンダーID

3.イベント通知LineBotの実装

Google Apps Scriptを新規作成して、以下のコードを貼り付けて、access_token user_id  calendar_id の値を書きます。

// LINE Messaging API: Channel access token
const access_token = '';
// LINE Your user ID
const user_id = '';
// Set your google calendar ID
const calendar_id = '';

function getGoogleCalendar() {
  var today = new Date();

  var myCalendar = CalendarApp.getCalendarById(calendar_id);

  var myEvents = myCalendar.getEventsForDay(today);

  var message = [];

  if (myEvents.length == 0) {
    message.push('There are no events today');
  } else {
    message.push('There are ' + myEvents.length + ' events today\n');
    myEvents.forEach(function (event) {
      var eventStartTime = event.getStartTime();
      var eventEndTime = event.getEndTime();
      eventStartTime = Utilities.formatDate(eventStartTime, 'JST', 'HH:mm');
      eventEndTime = Utilities.formatDate(eventEndTime, 'JST', 'HH:mm');
      if (event.getTitle()) {
        message.push(
          '\n' +
            event.getTitle() +
            '\n' +
            '今日 from ' +
            eventStartTime +
            ' to ' +
            eventEndTime +
            '\n'
        );
      }
      if (event.getDescription()) {
        message.push(event.getDescription() + '\n');
      }
    });
    message.push('https://calendar.google.com/calendar/u/0/gp?hl=ja');
  }

  message = message.join('');

  return postMessage(message);
}

// method for post message to LINE
function postMessage(message) {
  // var url = 'https://api.line.me/v2/bot/message/push'; // Send broadcast message API (all following users without user_id)
  var url = 'https://api.line.me/v2/bot/message/broadcast';  // Sends a push message to a user, group, or room API

  var headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    Authorization: 'Bearer ' + access_token,
  };

  var postData = {
    to: user_id,
    // to: user_id,
    messages: [
      {
        type: 'text',
        text: message,
      },
    ],
  };

  var options = {
    method: 'post',
    headers: headers,
    payload: JSON.stringify(postData),
  };

  return UrlFetchApp.fetch(url, options);
}

注:全てのフォロワーに送りたい場合、対象IDがいらないので、53と61行を代わりに52と62行のコードを使える。

4.実行結果確認

スクリーンショット(イベントあり・なし)
image.png

5.自動的に投稿を実行される

トリガーをかける
image.png

定時的に当日のイベントを投稿する
image.png

6.Source Code (GitHub)

参照サイト

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?