ari23の研究ノート

メーカ勤務エンジニアの技術ブログです

Teamsへの勤怠連絡を半自動化する

最近、やっとヘイシャでもMicosoft365が導入されました! それによりTeamsが使えるようになったので、今回は勤怠連絡を半自動化する方法をまとめます🐜

開発環境

開発環境は以下の通りです。普通のPC環境であれば十分です。

項目 内容
OS Windows 10
Office Microsoft 365 E3(たぶん)

実現方法

今回は

.batファイルをダブルクリックしたら、事前に設定した文字が勤怠連絡専用のチャンネルに投稿される半自動化

を実現します。

この方法について、以下の2点について議論します。

なぜ「半自動化」なのか

おそらく、「そんな中途半端じゃなくて、PC起動時や終了時に自動でチャンネルに投稿する方がいいじゃん」っていう意見があると思いますが、それをやってしまうと以下の懸念事項があります。

  • 投稿時に必ず回線が接続できているかどうか保証できない
  • PC起動時=業務開始とは限らない

特に2つ目は誤爆する危険があって、業務時間外のとき自動で投稿されてしまうと、あとの処理がややこしくなってしまいますよね。なので、今回は「半自動化」としています。

「.batファイル1つ」でやる

ググってみると、PowerShellを使う方法や、フリーソフトを使う方法がありますが、それらは複数のファイルを管理する必要があったり、インストールの手間があったりします。

目的は、毎日『業務開始します』って打つ手間を減らしたいだけなので、できるだけ簡単にするために「.batファイル1つ」だけで実現します。

構築手順

Teamsの設定と、.batファイルの用意をします。

Teams設定

Teams側の設定として、Incoming Webhookという機能を使います。Incoming Webhookについては、Micorosoftのページや、以前の記事を参考にしてください。

まず、投稿したいチャネルの「…」マークを左クリックし、「コネクタ」を左クリックする。

チャンネルのコネクタ選択
チャンネルのコネクタ選択

「Incoming Webhook」を探して、「追加」を左クリックする。

Incoming Webhook選択
Incoming Webhook選択

再度「追加」を左クリックする。

Incoming Webhook追加
Incoming Webhook追加

中央にあるボックスに「testuser」と入力して、「作成」を左クリックする。

Incoming Webhook設定
Incoming Webhook設定

下部にURLが出現するので、そのとなりにあるマークをクリックしてURLをコピーする。最後に「完了」をクリックする。
URLは適当なテキストファイルなどにメモしておくとよい。

Incoming WebhookのURL取得
Incoming WebhookのURL取得

チャネルに設定した名前で以下のような投稿があれば、Teamsの設定は完了。

Incoming Webhook設定後のチャンネル
Incoming Webhook設定後のチャンネル

.batファイル用意

以下のような.batファイルを用意します。コマンドなどはMicosoft公式ページを参考にしています。

なお、上記のTeamsの設定で入手したURLはhttps://hogeとします。

@echo off

rem Incoming WebhookのURLを格納
set URL=https://hoge

rem postしたい文字列を格納
rem Unicodeにエンコードすること
set posttext='Test\u6295\u7a3f'

rem Teamsのchannelにpost
curl.exe -H "Content-Type:application/json" -d "{'text':%posttext%}" %URL%

作成した.batファイルをクリックして、Teamsの指定したチャンネルに投稿できていれば動作確認は完了。

Test投稿
Test投稿

.batファイルについて、2点解説します。

curl.exe

上記で使用しているcurl.exeは、URLを使って指定のプロトコルでデータ転送できるツールであり、従来は別途インストールする必要がありました。

しかし、2018年頃からWinddows 10にはcurl.exeが標準で付属されるようになったため、最近は最初から使えるようになりました。(参考URLはこちら

文字列をエンコード

上記で1点注意しなければならないのは、Windowsの仕様で転送する日本語が文字化けしてしまうというバグがあります。

これは、コマンドプロンプトの文字コードをchcp 65001などを叩いて、Shift-JISからUTF-8に変えても転送データには変化ないため、転送データをあらかじめエンコードしておく必要があります。

日本語をUnicodeに変換するには、「Unicode 変換」などでググって適当なWebツールを使うのが簡単です。

例えばこのサイトでは、変換したい文字列を入力して、クリックするだけでUnicodeの文字列が取得できます。

Unicode変換サイト
Unicode変換サイト

取得した文字列を上記.batファイルのposttextに入れてあげれば、文字化けせずに投稿が可能です。

実はPowerShellを使えばエンコードせずにデータ転送が可能です。しかし、.psファイルはダブルクリックで(デフォルトでは)動作しないため、.psファイルを動作させるための.batファイルを用意しなければならず、ファイル管理が面倒になってしまいます。

エンコードするのも手間ではありますが、今回Teamsに送りたい文字列は定型文であり、エンコードは最初だけなので、この手法が一番簡単かなと思います。

おわりに

紹介した方法は作業効率化できると思ったんですが、私の場合社用のスマートフォンを持たされていて、スマホでコピペの方が簡単かもしれないと最近気づきましたw

でも、例えば新人さんの教育の題材としてはちょうどいいかもしれません(と言ってみるw)。

参考になれば幸いです(^^)