最近、チャットワークから業務効率化に関するメールが頻繁にくるようになりました。メールを使うのは効率的ではないとのこと。そこで今回は Google Apps Script(GAS)でメール送信と定期実行を設定するに対して、チャットワークにもメッセージを送れるように機能を追加します。
Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れるではGoogleドライブにGoogle Apps Scriptを接続する方法を紹介していますが、前回スプレッドシートの変化からメールを送る処理をしたので、今回もスプレッドシート ⇒ スクリプトエディタからGASを作成していきます。
Contents
チャットワークでメッセージを送る
それでははじめましょう。
ライブラリを追加
まずGoogle Apps Script(GAS)でチャットワークにメッセージを送れるようにするためにライブラリを追加します。左のメニューのライブラリからスクリプトIDを入力して検索します。検索する文字列は https://github.com/cw-shibuya/chatwork-client-gas によると「1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav」であることがわかります。
チャットワークAPIトークンの取得
次にチャットワークからAPIトークンを取得します。これをChatWorkApiTokenという変数名で保存します。そのあと以下のコードでメッセージを送ることができます。
1 2 3 4 5 6 7 8 9 10 |
let ChatWorkApiToken = "各自で取得してください"; function SendChatWorkMessage() { let client = ChatWorkClient.factory({token: ChatWorkApiToken}); // チャットワークAPI let obj = { room_id:XXXX, //ルームID body: "送りたいメッセージ", } client.sendMessage(obj); } |
メンションも表示可能
もうちょっと汎用性を持たせるために、引数にルームIDと相手の名前、メンション、メッセージを渡すようにすると複数の相手にメッセージを送ることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function SendChatWorkMessage(roomId, mention, name, message) { let client = ChatWorkClient.factory({token: ChatWorkApiToken}); if(mention != "" && name != "") message = "[To:" + mention + "]" + name + "さんへ\n" + message; else if(name != "") message = name + "さんへ\n" + message; else if(mention != "") message = "[To:" + mention + "]" + message; let obj = { room_id:roomId, //ルームID body: message, } client.sendMessage(obj); } |
在庫が不足してきたらチャットワークにメッセージを送る
ではGoogle Apps Script(GAS)でメール送信と定期実行を設定するにチャットワークにメッセージを送る機能を追加します。
ToBuy関数を少し変えます。在庫がなくなってきたらチャットワークで担当者にメッセージを送る処理を追加します。メールのときと同じように何回も同じメッセージが送られないようにJ列をチェックしますが、SendMailIfNeed関数が実行されてメールが送られると「済」になってしまうため、先にSendChatWorkMessageIfNeed関数はSendMailIfNeed関数よりも先に実行されなければなりません(というかSendMailIfNeed関数を見直したほうがいいのかな?)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function ToBuy(itemID){ let spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); let sheet = spreadsheet.getSheetByName("シート1"); let value = GetStockFromItemId(sheet, itemID); if(value > 0){ DecrementStockFromItemId(sheet, itemID); SetDayFromItemId(sheet, itemID); SetTimeFromItemId(sheet, itemID); SendChatWorkMessageIfNeed(sheet, itemID); // これを追加 SendMailIfNeed(sheet, itemID); return true; } return false; } |
必要であればチャットワークでメッセージをおくります。チャットワークルームIDはK列に書かれていますが、空欄の場合はチャットワークアカウントはないということなのでその場合は送りません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function SendChatWorkMessageIfNeed(sheet, itemID) { if(GetNumberToOrder(sheet, itemID) > 0){ if(GetCheckFromItemId(sheet, itemID) == "済") return; let value = GetNumberToOrder(sheet, itemID); let name = GetManagerNameFromItemId(sheet, itemID); let itemName = GetItemNameFromItemId(sheet, itemID); let roomId = GetChatWorkRoomIdFromItemId(sheet, itemID); let mention = GetChatWorkMentionIdFromItemId(sheet, itemID); const message = itemName + "を" + value + " 発注してください。"; if(roomId != "" && mention != "") SendChatWorkMessage(roomId, mention, name, message) } } |
GetChatWorkRoomIdFromItemId関数はK列に書かれているチャットワークルームIDを取得します。
1 2 3 4 5 6 7 |
function GetChatWorkRoomIdFromItemId(sheet, itemID){ let row = GetRowFromItemId(itemID); if(row > 0) return sheet.getRange(row, 11).getValue(); else return ""; } |
GetChatWorkMentionIdFromItemId関数はL列に書かれているチャットワークのメンションIDを取得します。
1 2 3 4 5 6 7 |
function GetChatWorkMentionIdFromItemId(sheet, itemID){ let row = GetRowFromItemId(itemID); if(row > 0) return sheet.getRange(row, 12).getValue(); else return ""; } |