技術

スプレッドシートの内容を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. 技術

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

    こんにちわ先日Googleスプレッドシートにある内容を定期的…

  2. 技術

    [AWS]VPC消せないけど費用はかかる悪夢

    こんにちわ、どばきちです。先日個人用に作成したAWS…

  3. 技術

    warpではzshのbindkeyが使えない

    こんにちわ。iterm2からwarpへの乗り換えをし…

  4. 技術

    SSLサーバー証明書の更新期限通知がしたい

    こんにちわ、どばきちです。SSLサーバー証明書の更新…

  5. 技術

    [docker][PHP]Laravel開発テンプレを作ってみた

    こんにちわ、どばきちです。いざ新規に何かしらの開発を…

  6. WordPress開発・運用

    [docker]WordPressのローカル開発環境を用意してみた

    こんにちわ先日WordPressのテーマを微修正したのですが…

コメント

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

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

2024年7月
1234567
891011121314
15161718192021
22232425262728
293031  
  1. フリーランス

    最終出社!
  2. お知らせ

    Twitterをはじめました
  3. フリーランス

    フリーランス1年目振り返り
  4. 投資

    NFTを初出品してみました
  5. 技術

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