技術

スプレッドシートの内容をChatworkに定期通知する<後編>

こんにちわ

スプレッドシートの内容をChatworkに定期通知するための下準備まで前編でご紹介させて頂きました。前回の投稿についてはこちらをご確認ください。

全体的な作業の流れ

全体的な作業の流れについて簡単におさらいしたいと思います。

  1. ChatworkのAPIトークンを取得する<前編>
  2. GASのChatworkライブラリを追加する<前編>
  3. GASでChatwork通知のコードを書く<後編(今回)>
  4. GASのトリガーの設定をする<後編(今回)>

ということで、今回は3の手順からご紹介させて頂きたいと思います。

3. GASでChatwork通知のコードを書く

とりあえず一旦今回書いてみたサンプルコードを一旦貼ってみた上で、後ほど何をしているのかご説明していきたいと思います。このコードではスプレッドシート上にある売上の値を取得してChatworkに通知するサンプルコードになります。このサンプルコードを利用するときは、上部の定数で定義している箇所をご利用の環境に合わせて設定して頂くとそのままご利用いただけると思います。

// 1で取得したChatworkのAPI Token
const API_TOKEN_CHATWORK = '1の手順で取得したAPIトークン'
// 投稿したいroom_id (urlの「#!rid」の後ろの値)
const ROOM_ID_TEST = 'XXXXXXX'
// 投稿対象となるシート名
const SHEET_NAME_FOR_POST_CONTENTS = "テスト"
// 売上のセル
const CELL_RANGE_SALES = 'B4'

/**
 * ChatWorkクライアントを生成します
 */
function factory() {
  return ChatWorkClient.factory({token: API_TOKEN_CHATWORK});
}

/**
 * テストROOMに対してメッセージを投稿します
 * @param message 投稿メッセージ
 */
function postTestRoom(message) {
  factory().sendMessage({room_id: ROOM_ID_TEST, body: message});
}

/**
 * 投稿用メッセージを生成します
 * @sales 売上の値
 */
function buildPostMessage(sales) {
  return `[info][title]売上[/title]
${sales}円[/info]
`
}

/**
 * 売上の値をシートから取得します
 */
function getSalesBySheet() {
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadSheet.getSheetByName(SHEET_NAME_FOR_POST_CONTENTS);
  return sheet.getRange(CELL_RANGE_SALES).getValue();
}

/**
 * 日次でトリガーで実行するための関数です
 */
function postDaily() {
  // スプレッドシートから売上(投稿する値)を取得する
  const sales = getSalesBySheet()
  // 投稿する値をChatworkに投稿用に整形して投稿する
  postTestRoom(buildPostMessage(sales))
}

各パートごとに説明していきたいと思います。

エントリポイントとなる関数

/**
 * 日次でトリガーで実行するための関数です
 */
function postDaily() {
  // スプレッドシートから売上(投稿する値)を取得する
  const sales = getSalesBySheet()
  // 投稿する値をChatworkに投稿用に整形して投稿する
  postTestRoom(buildPostMessage(sales))
}

こちらがトリガー設定で実行することを想定するChatworkに通知するための関数です。トリガー設定については4の手順でご説明したいと思います。こちらの関数でしていることは、getSalesBySheet()でシート上にある売上の値を取得して、その値を元にpostTestRoom()でChatworkに通知しています。こちらの実行をするとChatworkに以下の様な投稿がされます。buildPostMessage()を使って投稿内容の整形をしていますが、取得する値を通知するだけであれば必須ではありません。

スプレッドシートの値を取得する

/**
 * 売上の値をシートから取得します
 */
function getSalesBySheet() {
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadSheet.getSheetByName(SHEET_NAME_FOR_POST_CONTENTS);
  return sheet.getRange(CELL_RANGE_SALES).getValue();
}

「テスト」シートの「B4」セルに売上の値が入っていることを想定しています。こちらの関数では、B4セルから取得した売上の値のみを返却しています。

Chatworkに通知する

/**
 * テストROOMに対してメッセージを投稿します
 * @param message 投稿メッセージ
 */
function postTestRoom(message) {
  factory().sendMessage({room_id: ROOM_ID_TEST, body: message});
}

2の手順で追加した「ChatworkClient」ライブラリの機能を使って投稿しています。room_idは、Chatworkの該当の部屋を表示している時のURLで「#!ridXXXXXXXX」となっている箇所の「XXXXXXXX(ridとかは不要)」の部分になります。bodyは投稿したいテキストメッセージになります。

4. GASのトリガーを設定する

解説

3の手順まででスプレッドシートの値を元にChatworkへの通知することができています。あとはこれを日次で実行するように設定することで、毎日同時間帯に投稿させることができます。

トリガー設定は、あらかじめ決められた日次や、定期的に実行したい場合に利用します。

手順

GASのメニューからトリガーを選択できます。

以下は設定例になります。この例では日次で朝の7時から8時の間に先程実装した「postDaily」関数を実行する設定になります。この設定を入れておくことで、あとは自動で定期的に実行されるようになります。

おわりに

結構長くなってましたね。。お疲れ様でした!何かしらのお役に立てれば幸いです。

でわでわ!

スプレッドシートの内容をChatworkに定期通知する<前編>前のページ

[Mac]codeコマンドでCursorが起動するようになってた次のページ

関連記事

  1. 技術

    [AWS]1コインサーバーでLAMP(Laravel8)を使う<前編>

    こんにちわ、どばきちです。AWSにはLightsai…

  2. 技術

    Remix上でGSAPアニメーションを動かしてみた

    こんにちわ最近のWebサイトを見ているとかっこいいアニメーシ…

  3. 技術

    [AWS]1コインサーバーでLAMP(Laravel8)を使う<後編>

    こんにちわ、どばきちです。前回はLightsailの…

  4. フリーランス

    iPhoneの領収書整理を自動化してみた話

    こんにちわ、どばきちです。フリーランスになってからと…

  5. 技術

    [AWS]Amazon Linux2 カーネル4.14から5.10へ

    こんにちわ、どばきちです。Amazon Linux2…

  6. 技術

    [Mac]codeコマンドでCursorが起動するようになってた

    こんにちわ僕はVisual Studio Codeをターミナ…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

2025年2月
 12
3456789
10111213141516
17181920212223
2425262728  
  1. 技術

    スプレッドシートの内容をChatworkに定期通知する<前編>
  2. 雑談

    Mr.Children 「生きろ」
  3. WordPress開発・運用

    [docker]WordPressのローカル開発環境を用意してみた
  4. フリーランス

    インボイスの登録申請。。気をつけて!
  5. 技術

    HHKBでMacにログインできるようになった!
PAGE TOP