
こんにちわ
スプレッドシートの内容をChatworkに定期通知するための下準備まで前編でご紹介させて頂きました。前回の投稿についてはこちらをご確認ください。
スプレッドシートの内容をChatworkに定期通知する<前編>
全体的な作業の流れ
全体的な作業の流れについて簡単におさらいしたいと思います。
- ChatworkのAPIトークンを取得する<前編>
- GASのChatworkライブラリを追加する<前編>
- GASでChatwork通知のコードを書く<後編(今回)>
- GASのトリガーの設定をする<後編(今回)>
ということで、今回は3の手順からご紹介させて頂きたいと思います。
3. GASでChatwork通知のコードを書く
とりあえず一旦今回書いてみたサンプルコードを一旦貼ってみた上で、後ほど何をしているのかご説明していきたいと思います。このコードではスプレッドシート上にある売上の値を取得してChatworkに通知するサンプルコードになります。このサンプルコードを利用するときは、上部の定数で定義している箇所をご利用の環境に合わせて設定して頂くとそのままご利用いただけると思います。
1// 1で取得したChatworkのAPI Token
2const API_TOKEN_CHATWORK = '1の手順で取得したAPIトークン'
3// 投稿したいroom_id (urlの「#!rid」の後ろの値)
4const ROOM_ID_TEST = 'XXXXXXX'
5// 投稿対象となるシート名
6const SHEET_NAME_FOR_POST_CONTENTS = "テスト"
7// 売上のセル
8const CELL_RANGE_SALES = 'B4'
9
10/**
11 * ChatWorkクライアントを生成します
12 */
13function factory() {
14 return ChatWorkClient.factory({token: API_TOKEN_CHATWORK});
15}
16
17/**
18 * テストROOMに対してメッセージを投稿します
19 * @param message 投稿メッセージ
20 */
21function postTestRoom(message) {
22 factory().sendMessage({room_id: ROOM_ID_TEST, body: message});
23}
24
25/**
26 * 投稿用メッセージを生成します
27 * @sales 売上の値
28 */
29function buildPostMessage(sales) {
30 return `[info][title]売上[/title]
31${sales}円[/info]
32`
33}
34
35/**
36 * 売上の値をシートから取得します
37 */
38function getSalesBySheet() {
39 const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
40 const sheet = spreadSheet.getSheetByName(SHEET_NAME_FOR_POST_CONTENTS);
41 return sheet.getRange(CELL_RANGE_SALES).getValue();
42}
43
44/**
45 * 日次でトリガーで実行するための関数です
46 */
47function postDaily() {
48 // スプレッドシートから売上(投稿する値)を取得する
49 const sales = getSalesBySheet()
50 // 投稿する値をChatworkに投稿用に整形して投稿する
51 postTestRoom(buildPostMessage(sales))
52}
53
54各パートごとに説明していきたいと思います。
55
56エントリポイントとなる関数
57
58/**
59 * 日次でトリガーで実行するための関数です
60 */
61function postDaily() {
62 // スプレッドシートから売上(投稿する値)を取得する
63 const sales = getSalesBySheet()
64 // 投稿する値をChatworkに投稿用に整形して投稿する
65 postTestRoom(buildPostMessage(sales))
66}こちらがトリガー設定で実行することを想定するChatworkに通知するための関数です。トリガー設定については4の手順でご説明したいと思います。こちらの関数でしていることは、getSalesBySheet()でシート上にある売上の値を取得して、その値を元にpostTestRoom()でChatworkに通知しています。こちらの実行をするとChatworkに以下の様な投稿がされます。buildPostMessage()を使って投稿内容の整形をしていますが、取得する値を通知するだけであれば必須ではありません。
スプレッドシートの値を取得する
1/**
2 * 売上の値をシートから取得します
3 */
4function getSalesBySheet() {
5 const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
6 const sheet = spreadSheet.getSheetByName(SHEET_NAME_FOR_POST_CONTENTS);
7 return sheet.getRange(CELL_RANGE_SALES).getValue();
8}「テスト」シートの「B4」セルに売上の値が入っていることを想定しています。こちらの関数では、B4セルから取得した売上の値のみを返却しています。
Chatworkに通知する
1/**
2 * テストROOMに対してメッセージを投稿します
3 * @param message 投稿メッセージ
4 */
5function postTestRoom(message) {
6 factory().sendMessage({room_id: ROOM_ID_TEST, body: message});
7}2の手順で追加した「ChatworkClient」ライブラリの機能を使って投稿しています。room_idは、Chatworkの該当の部屋を表示している時のURLで「#!ridXXXXXXXX」となっている箇所の「XXXXXXXX(ridとかは不要)」の部分になります。bodyは投稿したいテキストメッセージになります。
4. GASのトリガーを設定する
解説
3の手順まででスプレッドシートの値を元にChatworkへの通知することができています。あとはこれを日次で実行するように設定することで、毎日同時間帯に投稿させることができます。
トリガー設定は、あらかじめ決められた日次や、定期的に実行したい場合に利用します。
手順
GASのメニューからトリガーを選択できます。
以下は設定例になります。この例では日次で朝の7時から8時の間に先程実装した「postDaily」関数を実行する設定になります。この設定を入れておくことで、あとは自動で定期的に実行されるようになります。
おわりに
結構長くなってましたね。。お疲れ様でした!何かしらのお役に立てれば幸いです。
でわでわ!