GASでLINEのグループにメッセージを送る

GoogleAppsScript(GAS)
スポンサーリンク

みなさんこんにちは。ノンプログラマーのうえはらです。

前回はGoogle Apps ScriptでLINEのグループIDを確認しました。

GASでLINEのグループIDを確認する
Google Apps Scriptを使用して、LINEのグループIDを取得します。

今回はそのグループIDを利用して、LINEのグループにGoogle Apps Scriptからメッセージを送信します!

LINEに送信するスクリプト

下記がLINEのグループに送信するスクリプトです。

function sendLINE(){
  var LINE_CHANNEL_ACCESS_TOKEN = 'XXX 実際はメチャクチャ長いです XXXX';//LINE Botのアクセストークン
  var url = 'https://api.line.me/v2/bot/message/push';
  var toID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';//前回取得したグループID
  
  var body = '送信テスト';

  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN,
    },
    'method': 'POST',
    'payload': JSON.stringify({
      'to': toID,
      'messages':[{
        'type': 'text',
        'text': body ,
      }]
     })
   })
}

LINEでBotの設定ができていれば、さほど難しくないですね。

もちろん、パラメータの部分を全て理解しようと思えば大変です!

とりあえず、18行の[‘text’: body ,]の部分がメッセージとして送信されることがわかればいいと思います。

実際に、実行してみてLINEのグループに「送信テスト」が送信されれば成功です!

今日の予定を取得してLINEに送信

GASで複数のGoogleカレンダーから今日の予定を取得する
Google Apps Scriptで複数のGoogleカレンダーから今日の予定を取得する方法をお伝えします。シリーズの最終目標はGoogleカレンダーの予定をLINEに送ることです。

この記事と併せて、カレンダーから予定を取得してLINEに送るスクリプトは下記のようになります。

/*カレンダーのIDを取得*/
function get_Calendar() {
  var arrCals=[];
  arrCals.push(CalendarApp.getCalendarById('*******@gmail.com'));
  arrCals.push(CalendarApp.getCalendarById('*******@group.calendar.google.com'));//小学校
  arrCals.push(CalendarApp.getCalendarById('*******@group.calendar.google.com'));//中学校
  arrCals.push(CalendarApp.getCalendarById('*******@group.calendar.google.com'));//PTA
  
  return arrCals;
}
 
/*今日の予定を取得するメインの関数*/
function get_Today_Schedule(){ 
  var arrCals = get_Calendar();//カレンダーID取得
  var date = new Date()  
  var strIntro = "おはようございます。\n今日のうえはら家の予定です。\n" ;
  var strBody = strIntro;
  /*カレンダーの本日のイベント取得*/
  for (var i = 0 ; i< arrCals.length ; i++){
    strBody = strBody + getEvents(arrCals[i],date);
  }
  
  if (strBody == strIntro){
    strBody = "おはようございます。\n今日のうえはら家の予定はありません。\n" ;
  }
  sendLINE(strBody);
}
 
/*カレンダーのイベント取得*/
function getEvents(Cals,getDate){
  var arrEvents = Cals.getEventsForDay(getDate);
  var strName = Cals.getName();//カレンダーの名前取得
  var strEvents ="";
  for (var i=0; i<arrEvents.length; i++){
    var strTitle = arrEvents[i].getTitle();
    var strStart = _HHmm(arrEvents[i].getStartTime());//開始時刻
    var strEnd = _HHmm(arrEvents[i].getEndTime());//開始時刻
    if (strStart == strEnd){
      strEvents = strEvents + '終日イベント:' + strTitle + ' (' + strName + ')' + '\n';
    }else{
      strEvents = strEvents + strStart + '~' + strEnd+ ':'  + strTitle + ' (' + strName + ')' + '\n';
    }
  }
  return strEvents;
}
 
/*時間の表示変更*/
function _HHmm(str){ 
  return Utilities.formatDate(str,'JST','HH:mm');
}

function sendLINE(body){
  var LINE_CHANNEL_ACCESS_TOKEN = 'XXX 実際はメチャクチャ長いです XXXX';//LINE Botのアクセストークン
  var url = 'https://api.line.me/v2/bot/message/push';
  var toID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';//前回取得したグループID
  
  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN,
    },
    'method': 'POST',
    'payload': JSON.stringify({
      'to': toID,
      'messages':[{
        'type': 'text',
        'text': body ,
      }]
     })
   })
}

前回、ログ表示していた部分をLINEへ送信する関数「sendLINE(strBody)」に変換します。

LINEに送信する関数では、送信するメッセージを引数で受けるので、その部分を変更しています。

これで、「get_Today_Schedule」を実行すると今日の予定が送信できます。

まとめ

今回はLINEのグループにGoogle Apps Scriptからメッセージを送信する方法をお伝えしました。

う~ん、技術的な内容はほぼ、伝えられていないですね(。pдq。)

次回は、Google Apps Scriptで一週間分の予定を取り出す方法をお伝えします。

連載目次:GASでGoogleカレンダーの予定をLINEに送る

GASでGoogleカレンダーの予定をLINEに送る方法をお伝えします。

配信内容は、下記の様にします。

1.毎朝(07:05)、その日の予定を配信する。

2.夕方(19:05)、向こう1週間の予定を配信する。

これで、予定を忘れる事もなくなるはず・・・。

  1. GASで複数のカレンダーから今日の予定を取得する
  2. GASでLINEのグループIDを確認する
  3. GASでLINEのグループにメッセージを送る
  4. GASで複数のGoogleカレンダーの予定を1週間取得する

コメント

  1. ひだりやま より:

    まさにやろうとしていたことをやってくださっており、助かります。
    コピペで運用しようとIDだったりトークンだったりを代入したのですが、ReferenceError: 「strBody」が定義されていません。(行 42、ファイル「コード」)が出てしまいます。自分なりに色々調べてみたのですが、解消できず。
    ご助言いただけると助かります。

    • UEHARA より:

      ひだりやま様、返信が遅くなり、申し訳ありません。
      44行目は「return strBody;」ではなく、「return strEvents;」でした。
      本文訂正しております。
      これで大丈夫と思うので、是非試して下さい!