Google Spreadsheetから、Chatworkに定型文を送れるようにしてみた

プログラミング
スポンサーリンク

はじめに

コロナの影響で完全テレワークになり、出退勤・休憩入り・休憩戻り時に、Chatworkに連絡を入れることになりました。

Chatwork開く > チャットを選ぶ > 文面を考える(またはコピペする) > 送信 というのを、1日4回毎日行うのがすごく手間に感じました。

ということで、GoogleSpreadSheetでチャットや定型文を設定しておいて、簡単に送信できるようにしてみました。

設定

1,Chatwork > 右上の自分のアイコン > API設定 > API Token から、API Tokenの発行をする
(初回は管理者にリクエストがいき、受理されたら発行されるはず)

2,Google Spread Sheed->ツール->スクリプトエディタ を押下して、下記コードを貼り付ける

chatwork.js
function onOpen() { // スプレッドシートを開いたときにメニューが作成されるようにする
    SpreadsheetApp
        .getActiveSpreadsheet()
        .addMenu('ChatWork', [ //メニューを定義し関数と紐づける
            { name: '始める', functionName: 'func3' },
            { name: '終わる', functionName: 'func4' },
            { name: '休憩入る', functionName: 'func5' },
            { name: '休憩戻る', functionName: 'func6' },
            { name: '日報', functionName: 'func7' },
            { name: 'マイチャット', functionName: 'func12' },
        ]);
}

//行番号を定義しておき、送信処理にわたす
function func3(row = 3) {
    sendRow(row)
}

function func4(row = 4) {
    sendRow(row)
}

function func5(row = 5) {
    sendRow(row)
}

function func6(row = 6) {
    sendRow(row)
}

function func7(row = 7) {
    sendRow(row)
}

function func8(row = 8) {
    sendRow(row)
}

function func9(row = 9) {
    sendRow(row)
}

function func10(row = 10) {
    sendRow(row)
}

function func11(row = 11) {
    sendRow(row)
}

function func12(row = 12) {
    sendRow(row)
}

//送信
function sendRow(row = 0) {
    const client = ChatWorkClient.factory({ token: "xxxxxxx" }); // Chatwork API
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getSheetByName('cw'); //定型文を取得したい、シート名を設定
    const ui = SpreadsheetApp.getUi();
    const roomName = sheet.getRange('C' + row).getValue();
    const roomId = sheet.getRange('D' + row).getValue();
    const message = sheet.getRange('E' + row).getValue();
    const confirmMsg = roomName + "\n" + message;
    const result = ui.alert('', confirmMsg, ui.ButtonSet.OK_CANCEL); //メニューを押下したら、モーダル表示

    //モーダルでOKを選んだら、ChatworkAPIに送信
    if (result == 'OK') {
        client.sendMessage({
            room_id: roomId,
            body: message
        });
    }
}

3,手順1で取得したChatworkAPI Tokenを、コードの下記に設定

{token: "xxxxxxx"}

4,定型文を取得したい、シート名を、コードの下記に設定(この場合シート名:cw) ※ファイル名ではない

const sheet= ss.getSheetByName('cw');

5,スクリプトエディタ->リソース->ライブラリ->Add a library に下記の文字列を入れて追加

M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT

6,最新のバージョンを選んで、保存

7,cwシートのC列2行目から、下記のイメージで入力。
この値を見出しとし、C列3行目から値を入力していく。

CDE
部屋名部屋ID発言

8,部屋名:確認画面の表示に使うので、任意入力

9,部屋ID:に、送信したいチャットのIDを設定する。テスト用に自分のマイチャットを設定しておく。
Chatworkのチャットを開いたときのURLの、rid以降が該当する(下記の場合111111111)

www.chatwork.com/#!rid111111111

10,シートの発言に、送信したいメッセージを設定する。

11,設定完了

使い方

1,Spread Sheetをリロードすると、メニュー右上に、Chatworkが追加される
2,追加されたメニューの中から、マイチャットを押下すると、送信先の部屋名と、発言がモーダルで表示される。
3,OKを押下して、自分のマイチャットに送信されること。キャンセルを押下して、送信されないことを確認する。

調整

・メニュー名を変更したい
コードの下記のnameを変更する。funcのあとの数字とシートの行が対応している。
例、シートの12行目「マイチャット」と、メニューの名前「マイチャット」が対応

{name: '始める', functionName: 'func3'},
{name: '終わる', functionName: 'func4'},
{name: '休憩入る', functionName: 'func5'},
{name: '休憩戻る', functionName: 'func6'},
{name: '日報', functionName: 'func7'},
{name: 'マイチャット', functionName: 'func12'},

・定型文を増やしたい
シートの8-11行目を予備にしてあるので、ここに追加し、上記メニューにも追加する

{name: '追加したい', functionName: 'func8'},

おわりに

有志の情報のおかげで、3時間くらいでできたと思います。ありがたいですね。
自動送信も考えましたが、チャットと実行動に差異が出そうだったので、やめときました 笑

参考:
ajike switch

マネーマニア

コメント