最近、チャットワークから業務効率化に関するメールが頻繁にくるようになりました。メールを使うのは効率的ではないとのこと。そこで今回は Google Apps Script(GAS)でメール送信と定期実行を設定するに対して、チャットワークにもメッセージを送れるように機能を追加します。
Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れるではGoogleドライブにGoogle Apps Scriptを接続する方法を紹介していますが、前回スプレッドシートの変化からメールを送る処理をしたので、今回もスプレッドシート ⇒ スクリプトエディタからGASを作成していきます。
チャットワークでメッセージを送る
それでははじめましょう。
ライブラリを追加
まずGoogle Apps Script(GAS)でチャットワークにメッセージを送れるようにするためにライブラリを追加します。左のメニューのライブラリからスクリプトIDを入力して検索します。検索する文字列は https://github.com/cw-shibuya/chatwork-client-gas によると「1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav」であることがわかります。
チャットワークAPIトークンの取得
次にチャットワークからAPIトークンを取得します。これをChatWorkApiTokenという変数名で保存します。そのあと以下のコードでメッセージを送ることができます。
|
let ChatWorkApiToken = "各自で取得してください"; function SendChatWorkMessage() { let client = ChatWorkClient.factory({token: ChatWorkApiToken}); // チャットワークAPI let obj = { room_id:XXXX, //ルームID body: "送りたいメッセージ", } client.sendMessage(obj); } |
メンションも表示可能
もうちょっと汎用性を持たせるために、引数にルームIDと相手の名前、メンション、メッセージを渡すようにすると複数の相手にメッセージを送ることができます。
|
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列に書かれていますが、空欄の場合はチャットワークアカウントはないということなのでその場合は送りません。
|
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を取得します。
|
function GetChatWorkRoomIdFromItemId(sheet, itemID){ let row = GetRowFromItemId(itemID); if(row > 0) return sheet.getRange(row, 11).getValue(); else return ""; } |
GetChatWorkMentionIdFromItemId関数はL列に書かれているチャットワークのメンションIDを取得します。
|
function GetChatWorkMentionIdFromItemId(sheet, itemID){ let row = GetRowFromItemId(itemID); if(row > 0) return sheet.getRange(row, 12).getValue(); else return ""; } |
鳩でも分かるC#管理人からのお願い
できる仕事であれば請け負います。鳩でもわかるC#管理人はクラウドワークスに在宅ワーカーとして登録しています。お仕事の依頼もお待ちしております。
⇒ 仕事を依頼する
コメントについて
コメントで英語などの外国語でコメントをされる方がいますが、管理人は日本語以外はわからないので基本的に内容が理解できず、承認することもありません。それからへんな薬を売っているサイトやリンク先のサイトが存在しないというスパムコメントも多々あります。
Some people make comments in foreign languages such as English, but since the manager does not understand anything other than Japanese, he basically cannot understand the content and does not approve it. Please use Japanese when making comments.
そんななか日本語のコメントもいただけるようになりました。「○○という変数はどこで宣言されているのか?」「××というメソッドはどこにあるのか」「例外が発生する」「いっそのことソース丸ごとくれ」という質問ですが、管理人としては嬉しく思います。「自分が書いた記事は読まれているんだな」と。疑問点には可能な限り答えます。記事に問題があれば修正いたします。
そのうえでお願いがあります。「匿名」という味も素っ気もない名前ではなく、捨てハンでいいのでなにかハンドルネームをつくってほしいと思います。
管理人のモチベーションアップのために
よろしければご支援お願いします。
⇒ 管理人の物乞いリスト