からくりブログ

株式会社からくり社員のブログです

Googleスプレッドシートに記入してある予定をGoogleチャットでアナウンス

はじめに

Googleスプレッドシートを読み込み、指定した日付に合致した場合は指定したコメントをアナウンスする機能(以下、アナウンス機能)を作成しました。

上記のようにスプレッドシートで年月日と送る内容を指定しておくとGoogleチャットに送られてくるようになります。

アナウンス機能を作成するにあたりGoogle Apps Script(以下GAS)と着信Webhookを使用しました。

今回はGASの処理と着信Webhookについて説明していきます。

まずは、どのようにアナウンス機能が動いているかは処理フローがありますのでこちらをご覧ください。

この記事では、処理フローにある「指定のスプレッドシートから日付配列(年、月、日)を取得」と「メッセージ送信」について紹介したいと思います。

サンプルスクリプトについて

指定のスプレッドシートから日付配列(年、月、日)を取得

function SampleTextDate () {
  // 対象スプレッドシートを取得
  const spreadsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/sample/edit');
  // 上記スプレッドシートの'sample'シートを取得
  const sheet = spreadsheet.getSheetByName('sample')
  // 上記シートの最終行番号を取得(数値)        
  const lastRow = sheet.getLastRow()                          

  let retArray = []
  for (let i = 2; i <= lastRow; i++) {
    let dateArray = []
    // 年を取得
    let year = Number(sheet.getRange(i, 1).getValue())
    dateArray.push(year)
    // 月を取得
    let month = Number(sheet.getRange(i, 2).getValue())
    dateArray.push(month)
    // 日を取得
    let day = Number(sheet.getRange(i, 3).getValue())
    dateArray.push(day)

    // 配列に格納
    retArray.push(dateArray)
  }

  return retArray;
}

上記のスクリプトの各々の処理の説明をします。

  1. SpreadsheetApp.openByUrl(‘対象スプレッドシートのURL’)
    • 上記で対象スプレッドシートのオブジェクトを取得しています。
  2. 対象スプレッドシート.getSheetByName(‘対象シート’)
    • 取得した対象スプレッドシート内の’対象シート’を取得しています。
  3. 対象シート.getLastRow()
    • 対象シートで、値が入っているセルの中で一番最後の行の行番号を取得できます、行番号なので型は数値になります。
  4. 対象シート.getRange(i, 1).getValue()
    • getRangeはセルを取得できます。
      • 第一引数が行番号
      • 第二引数が列番号
    • getValue()はそのセルの値を取得できます。
      したがって、getRange(A, 1).getValue()は「A行目の1列目の値を取得」になります。
    • 取得した値の型は文字列となる為、サンプルコードではNumber()を使って数値型に変換しています。

スクリプトの説明については以上になります。
続いては、着信Webhookを使用して、BOTスクリプトがGoogle Chatにメッセージを送るための方法を説明します。

着信Webhookについて

着信 Webhook を使用すると、Chat アプリではないアプリケーションから非同期メッセージを Google Chat に送信できます。
今回作成したものはトリガーで毎日実行し、日付が一致していた場合にGoogle Chat に送信されるようになっています。
また、着信 Webhook はPythonやJavaにも対応しているので、
例えばLinuxサーバーで障害が発生したときに Google Chat で担当者に通知するようにモニタリング アプリケーションを作成することも可能です。
しかし着信 Webhook は会話型ではないので、ユーザーからのメッセージや Google Chat からのイベントに返信したり、メッセージを受け取ったりすることはできません。

着信 Webhook を使用するには、メッセージを受信する Google Chat スペースに登録してから、メッセージを送信するスクリプトの作成が必要です。
着信 Webhook の管理はウェブブラウザからのみ行えるため、Webhook は Chat ウェブアプリから設定する必要があり、Chat モバイルアプリでは設定できません。

  • 着信 Webhook を登録する方法
    1. ウェブブラウザで Google Chat を開きます。
    2. 着信 Webhook を追加するスペースに移動します。
    3. 上部のスペースのタイトルの横にある下矢印 から [アプリと統合] をクリックします。
    4. [Webhookを管理]をクリックします。
    5. このスペースにすでに他の Webhook がある場合は、[他にも追加] をクリックします。それ以外の場合は、この手順をスキップします。
    6. [名前] に着信 Webhookの名前を入力します。
    7. [アバターの URL] は設定しなくても問題ありません。
    8. [保存] をクリックします。
    9. [content_copy コピー] をクリックして、Webhook の URL 全体をコピーします。URLはスクリプトに組み込むため控えておきます。
    10. ボックスの外側をクリックすると、[Incoming Webhooks] ダイアログが閉じます。

上記の項番3と項番8のスクリーンショットを添付します。

項番3のスクリーンショット

項番8のスクリーンショット

スクリプトにWebhook が登録されているスペースにメッセージを送る処理を記述していきます。

/**
 * roomにメッセージを送信する
 *
 * @param [in] msg メッセージ
 */
function mtdSendMessage_k(msg){
  /* Webhook URL */
  const url = 'https://chat.googleapis...'; //コピーしたURLを添付

  var botMessage = { 'text': msg }
  /* メッセージ送信のための設定 */
  var options = {
    'method': 'POST',
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8'
    },
    'payload': JSON.stringify(botMessage)
  };

  /* メッセージ送信 */
  var result = UrlFetchApp.fetch(url, options);
}

このスクリプトではWebhook URL にメッセージの作成リクエストを POST 送信して、Webhook が登録されているスペースにメッセージを投稿しています。

最後に

今回は、Googleスプレッドシートに記入してある予定をGoogleチャットでアナウンスする方法を紹介しました。

GASのコードの書き方や着信Webhookの登録方法を紹介しましたが、いかがだったでしょうか?

参考になれば幸いです。

「Googlenスプレッドシートに記入してある予定をGoogleチャットでアナウンス」は以上になります。

ご覧いただき、ありがとうございました。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>