ChatworkやSlackのtoの扱いには悩む人も多いだろう。Toがくるとスマホアプリで通知をしている利用者も多いだろうから、それだけに「メッセージは送りたいけど、今みたいな遅い時間や営業時間外に相手に通知がいくと悪いな」と遠慮する人がいるのも納得できる。みんな真面目なのだ。
この問題の解決方法はいたって簡単で、時間指定でメッセージを送信する機能をChatworkが開発すればいいだけなのだが、なぜかこの時間指定機能がないのである。理由はよう分からん。
そこで、好きな時間を指定して指定のルームにメッセージ送信する機能をAPIを作ってみた。
使用言語とライブラリー、ミドルウェアなど
- Python
- Flask
- mysql
- nginx
Flask
Flaskは書籍が少ない。ネット記事はいくつかあった。それらを参考にしながらも動かすのに少し時間がかかったが、慣れればどうってことない。PHPを書ける人なら、少し勉強すればすぐ慣れると思う。PythonでWebアプリを開発したいならFlaskは選択肢の一つになるだろう。
Chatwork API
ChatworkのAPIの仕様はこちら
https://developer.chatwork.com/ja/
今回はメッセージ送信なのでroomsのエンドポイントを利用する。
https://api.chatwork.com/v2/rooms/{room_id}/messages
簡単な動作確認なら、API KEYがあればcurlですぐ確認できる。上記Chatwork API公式マニュアルに記載があるので楽ちんです。
Pythonのサンプル
ChatworkのAPIを扱うPythonのcodeサンプルは以下の通り。メッセージやroom_idなどの必要な情報は問い合わせフォームから得たものを利用している。「resp」という記載のある行でリクエストが実行される。そして念のためstatus_codeを確認し、問題なければTrueを返し、必要に応じてゴニョゴニョする。
def job(room_id, apikey, body): url = 'https://api.chatwork.com/v2/rooms/' + str(room_id) + '/messages' headers = { 'X-ChatWorkToken': apikey } params = {'body': body} resp = requests.post(url, headers=headers, params=params) if resp.status_code == 200: return True else: return False return result
基本的なデータの流れは以下の通り。いたって普通のタイマー機能です。
- Chatworkへの送信データ入力し、併せて時間を指定し、DBに登録する
- 登録したデータを定期的にPythonで実行し、指定時間に上記のプログラムでデータを送信する
- 不要なデータの定期削除
はい。たったこれだけです。ま、本格的なサービスとして運用するには考慮事項が増えるだろうけど、個人的に使う分にはシンプルで十分。その他考慮事項はセキュリティは言うに及ばず、実行済みのデータの定期削除したりするくらい。
私でもこんなに簡単にすぐできるのだから、腕のいいChatworkのエンジニアが指定時間のメッセージ送信機能を実装できないはずがない。なんらかの政治的な理由があるとか、作っても儲からないとか、実は設計が悪くてエンジニアが面倒がってるとか、そんなところだろう。