Google AppsのスクリプトでServerlessチャットボット


TLドクター


“ガス(Google Appsのスクリプト)”を使用して、“Googleカレンダー”“今日のイベントを通知する”Googleチャット“、”おしゃべりと“ラインメッセンジャー”毎朝.
必要なのは
  • ウェブブラウザ
  • アカウント(Google、チャット、線、ライン開発者)
  • そして、それは無料です.
    ソースコード:kurab/notifyEvents

    Google Appsのスクリプトは何ですか?


    これはJavaScriptベースのプログラミング言語は、Googleによって提供される多くのことを行うことができ、Googleのサービスと統合するのは簡単です.
    今日では、非エンジニアでさえ、Pythonにそれらのすべてのルーチン作業をすることができます.しかしPythonでは、これをインストールしなければならないという点で始めるのは少し難しいです.Google Appsのスクリプトでは、一方、すべての必要なブラウザとGoogleアカウントですので、非エンジニアでも簡単に始めることができます.さらに、GSuiteを使用する企業も多いので、Googleのサービスに比較的日常的な作業を行うことができます.
    ガスは基本的にJavascriptであるので、あなたはちょうどGoogleによって問題の大部分を解決することができます.

    ハローワールド


    まず、Googleのドライブへのアクセス.今回は「my drive > bot」ディレクトリで作業したいです.
    を選択して“Google Appsのスクリプト”から“+新しい”メニューの左上または“右クリック”メニューより多くの.

    次に、このようにスクリプトエディタに移動します.

    プロジェクト名としてHelloWorldという名前を付け、次のようにコードを更新します.
    function myFunction() {
      console.log('Hello, World');
    }
    
    コードを保存した後に▶) メニューで.何も起こらないようですが、メニュー「ビュー」ログからログを見つけることができます.

    おめでとう!今すぐあなたの最初のGoogle Appsのスクリプトを行っている.これはガスの基本的な作業の流れです.

    カレンダーイベント


    GoogleカレンダーAPIのリファレンスです.

    Calendar Service


    今回は今日のイベント情報を取得したいです.
    ガスファイルと名前“NotifyCalendar”または何かを作成しましょう.
    開始するには、スクリプトからカレンダーにアクセスし、カレンダー名を取得します.
    カレンダーの「設定と共有」でカレンダーIDを見つけてください.カレンダーカレンダーIDを統合し、次のコードで{カレンダーID }に貼り付けます.
    function notifyEvents() {
      const calendarId = '{Calendar ID}';
      const calendar = CalendarApp.getCalendarById(calenderId);
      const calendarName = calendar.getName();
    
      console.log(calendarName);
    }
    
    これを実行すると、あなたのカレンダーへのアクセスのレビューがあります.その後、実行を完了するのを待つ、ログを開くと、カレンダー名が表示されます.まだログがない場合はしばらく待ちます.
    さあ、今日のイベントをカレンダーに入れて、ログに入れましょう.
    function notifyEvents() {
      const calendarId = '{Calendar ID}';
      const calendar = CalendarApp.getCalendarById(calenderId);
      const calendarName = calendar.getName();
    
      const today = new Date();
      const calendarEvents = calendar.getEventsForDay(today);
    
      console.log(calendarEvents);
    }
    
    今日のイベントがある場合は、[{ }{ {}}}}のようなデータを取得します.イベントがない場合は[]のような空の配列を取得します.
    あなたが持っている場合はイベントをリスト表示し、“ないイベント”を表示します.さて、今日だけではなく、期間を指定する場合は、getEventsメソッドを使用します.
    function notifyEvents() {
      const calendarId = '{Calendar ID}';
      const calendar = CalendarApp.getCalendarById(calendarId);
      const calendarName = calendar.getName();
    
      const today = new Date();
      const calendarEvents = calendar.getEventsForDay(today);
    
      if (calendarEvents.length) {
        for (var event of calendarEvents) {
          var eventTitle = event.getTitle() ? event.getTitle() : '(no title)';
          console.log(eventTitle);
        }
      } else {
        console.log('no event');
      }
    }
    
    gettitleメソッドはno titleイベントに対して“no title”を返さない.自分で設定する必要があります.
    あなたのカレンダー上のいくつかのイベントがタイムアウトされ、いくつかはありませんので、タイムイベントを持っている場合は、同様にそれを表示します.同時に、あなただけでなく、思いやりのメッセージを追加するイベントの名前を送信する必要はありません.
    function notifyEvents() {
      const calendarId = '{Calendar ID}';
      const calendar = CalendarApp.getCalendarById(calendarId);
      const calendarName = calendar.getName();
    
      const today = new Date();
      const calendarEvents = calendar.getEventsForDay(today);
    
      var message = 'Good morning!\n' +
                    'Notification from ' + calendarName + 'at' +
                     Utilities.formatDate(today, 'GMT+0900', 'MM/dd') +
                    '\n-----------------------------------------';
    
      if (calendarEvents.length) {
        for (var event of calendarEvents) {
          var eventTitle = event.getTitle() ? event.getTitle() : '(no title)';
          message = message + '\n- ' + eventTitle;
          if (!event.isAllDayEvent()) {
            message = message + ' at '+ 
                      Utilities.formatDate(event.getStartTime(), 'GMT+0900', 'HH:mm') + '~' + 
                      Utilities.formatDate(event.getEndTime(), 'GMT+0900', 'HH:mm') + '(JST)';
          }
        }
      } else {
        message = message + '\nno event';
      }
    
      console.log(message);
    }
    
    我々は正常に今すぐカレンダーイベントを取得している.
    あなたはAPIによってより多くの情報を得ることができます.

    Class CalendarEvent


    ポストチャット


    グーグルチャット


    チャットWebhookのURLをチャットルームでは、カレンダーのイベントを投稿します.

    { Webhook URL }にペーストします.
    function notifyEvents() {
        ...
      } else {
        message = message + '\nno evnet';
      }
    
      postToChat(message);
    }
    
    function postToChat(message) {
      const chatWebhook = '{Webhook URL}';
      const messageText = { 'text': message };
      const options = {
        'method': 'POST',
        'headers': {
          'Content-Type': 'application/json; charset=UTF-8'
        },
        'payload': JSON.stringify(messageText)
      };
      var result = UrlFetchApp.fetch(chatWebhook, options);
      Logger.log(result);
    }
    
    アクセスを確認するようお願いしますので、許可してください.

    チャット


    チャットの設定とチャットチャットルームIDを投稿したい場合は、チャットWorkトークンを発行します.XXXXXX (番号)URLのridXXXXXX.
    ガスエディタでメニューを開きます.

    M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT


    最新版、18を設定します.

    あなたのチャットワークAPIトークンとルームIDを貼り付けます.
    function notifyEvents() {
      ...
      //postToChat(message);
      postToChatwork(message);
    }
    
    function postToChat(message) {...}
    
    function postToChatwork(message) {
      const chatworkToken = '{Chatwork API Token}';
      const chatworkRoomId = '{Chatwork Room ID}';
      const chatworkClient = ChatWorkClient.factory({token: chatworkToken});
      chatworkClient.sendMessage({room_id: chatworkRoomId, body: message});
    }
    

    ラインメッセンジャー


    今回は、自分だけにメッセージを送ることができますので、固定IDにメッセージを送信することができます.
    フロー:
  • オンライン開発者は「プロバイダ」と「メッセージングAPIチャンネル」を作成します
    API設定(メッセージングAPI設定)の
  • の問題
    メッセージングAPI設定の
  • 、無効に「自動応答メッセージ」と「挨拶メッセージ」(私たちがそれらを必要としないCuz)
  • 基本的な設定で
  • 、“あなたのユーザーID”をコピーします.
  • ガスの上の
  • ウェブアプリケーションとして発行して、URL(メニューアプリケーションとして展開する)をコピーしてください
  • オンライン開発者、メッセージングAPI設定で、あなたがウェブフック
  • としてSTEP 5でコピーしたURLを設定してください
    あなたのラインSmartphoneアプリの
  • は、友人
  • になるためにQRコードをスキャンします
  • 走行ガス
  • ラインデベロッパーの詳細については、他の記事などを見ておきましょう.上記の手順2および4でコピーしたトークンとユーザーIDを入れます.
    ...
    function postToLine(message) {
      const lineToken = '{LINE Token}';
      const lineMessagePushUrl = 'https://api.line.me/v2/bot/message/push';
      const lineHeaders = {
        "Content-Type": "application/json; charset=UTF-8",
        "Authorization": "Bearer " + lineToken
      };
      const linePayload = {
        "to" : "{User ID}",
        "messages" : [{
          "type": "text",
          "text": message
        }]
      };
      const options = {
        "method": "POST",
        "headers": lineHeaders,
        "payload": JSON.stringify(linePayload)
      };
      var result = UrlFetchApp.fetch(lineMessagePushUrl, options);
      Logger.log(result);
    }
    

    トリガを設定し、毎朝実行する


    最後に、自動実行を設定しましょう.メニューの「実行」ボタンの横にある「トリガー」ボタンをクリックすると、「トリガー設定」ページにリダイレクトされます.新しいトリガーを作成します.
    この場合、私はこのアプレットに毎朝1回だけ通知して欲しい.午前9時から午前10時までの神秘的な範囲について、私は数日間それを実行しようとしました、そして、それは9 : 46 amです、そして、毎日は異なります.私は不快に感じません、しかし、私のケースでは、通知が仕事の開始の前に来る限り、私はそれがよいと思いました.

    それだけです.私は週末と日曜日に通知を得るつもりです.それで、土曜日と日曜日にメッセージを送らないために、ガスにプロセスを加えます.休み.私はそれを行うことができますが、今回、それは大丈夫です.
    function notifyEvents() {
      const calendarId = '[email protected]';
      const calendar = CalendarApp.getCalendarById(calendarId);
      const calendarName = calendar.getName();
    
      const today = new Date();
      const dayOfWeek = today.getDay();
      if (dayOfWeek === 0 || dayOfWeek === 6) return;
    
      const calendarEvents = calendar.getEventsForDay(today);
      ...
    }
    ...
    

    PS


    Google AppsのスクリプトをGogledすると、スプレッドシートからの記事がたくさんあります.そしてエクセルのマクロに相当する印象を持っていて、誰も維持できない秘密のExcelマクロを思い出させてくれました.
    まあ、とにかく、私はそれが良いものをGoogle Appsのスクリプトを使用するオプションを持って良いことだと思う.
    この記事のサンプルスクリプトはこちら.

    kurab/notifyEvents