Webex TeamsでEminemが毎朝「What you gonna do?」とメッセージするBOTを作った

仕事で使っているチャットツールとしてWebex Teamsを使っています。
Teamsではプロジェクトの中のもう少し細かい粒度で部屋が切られており、今回とある部屋でメインを務めることになりました。
その部屋には自分以外にも上司や関連する人が複数いるのですが、実際に作業をしているのは僕だけという状況でした。
そこで、以下の理由からbotを作ることにしました。
・作業をしているにもかかわらず、対外的に何をやっているのか分からない。
・全体のタスクの進捗度を上司が把握できない。難しくてつまづいてるのか、純粋に作業量が多いのかなど、把握できない。
・自分自身、タスク管理が下手なので何をすべきか毎日整理したい
・同僚が似たようなbot作ってた(彼はshell scriptのワンライナーでやってる超お手軽スクリプトでした)
早速、Webex Teamsでボブ・マーリーが毎朝「What you gonna do?」とメッセージするBOTを作ったを参考にして、平日の朝10時にEminemがWhat you gonna do?と聞いてくるbotを作りました。Eminemを選んだ理由は特にありませんが、昔から好きだったので、なんとなくです。
プログラマではないのでお見苦しいコードかと思いますが、参考になればと思います。
今回のポイントとして:
・コードはさくらVPSに設置(CentOS7.5なのでデフォルトでpython2系が入ってますが、周りからの圧力もといオススメにより3.4.9を入れました)
・毎朝10時に実行 -> cronで対応。
・土日祝に実行させない -> jpholidaypを利用
以下コードです。


# -*- coding: utf-8 -*-
# coding:utf-8
import sys
import os
import logging
import requests
# 変数設定
TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
roomID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
jpholidayp_command = "/usr/bin/python3 /home/arkey22/git/what_you_gonna_do/jpholidayp/jpholidayp"
# ログ設定
log_path = "/var/log/what_you_gonna_do/what_you_gonna_do.log"
log_format = '%(asctime)s- %(levelname)s - %(message)s'
logging.basicConfig(filename=log_path, format=log_format, level=logging.INFO)  # 通常のログ出力レベル
def is_it_holiday():
""" 土日祝の判定 """
flag = os.system(jpholidayp_command)
return flag
def notify_teams(eminem_says):
""" Teams APIを叩いてメッセージをPOSTする """
headers = {
'Authorization': 'Bearer ' + TOKEN,
}
files = {
'roomId': (None, roomID),
'markdown': (None, eminem_says),
}
logging.info("Called Teams API.")
api_status = requests.post('https://api.ciscospark.com/v1/messages', headers=headers, files=files)
if api_status.status_code != requests.codes.ok:
logging.error("Failed to call API.")
return False
if __name__ == '__main__':
if is_it_holiday() != 0:
notify_teams("# What you gonna do?")


Teamsから見るとこんな感じになります。

このbotはプロジェクトの収束に伴い、10月末を以て運用を終えましたが、他のプロジェクトでも流用出来るかなと思っています。
以上です。Eminemさん、お疲れ様でした。