Webは用いる人のリテラシーで決まる ウェブ運用と開発現場を経験したエンジニアのTIPS
TOP > BLOG > IT記事

Chatwork APIとPython&Flaskで時間指定のメッセージ送信機能を作ってみた

早川朋孝 早川朋孝
EC専門のSE

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公式マニュアルに記載があるので楽ちんです。

curl -X POST -H “X-ChatWorkToken: 自分のAPIトークン” -d “body=Hello+Chatwork%21&self_unread=0” “https://api.chatwork.com/v2/rooms/{room_id}/messages”

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

基本的なデータの流れは以下の通り。いたって普通のタイマー機能です。

  1. Chatworkへの送信データ入力し、併せて時間を指定し、DBに登録する
  2. 登録したデータを定期的にPythonで実行し、指定時間に上記のプログラムでデータを送信する
  3. 不要なデータの定期削除

はい。たったこれだけです。ま、本格的なサービスとして運用するには考慮事項が増えるだろうけど、個人的に使う分にはシンプルで十分。その他考慮事項はセキュリティは言うに及ばず、実行済みのデータの定期削除したりするくらい。

私でもこんなに簡単にすぐできるのだから、腕のいいChatworkのエンジニアが指定時間のメッセージ送信機能を実装できないはずがない。なんらかの政治的な理由があるとか、作っても儲からないとか、実は設計が悪くてエンジニアが面倒がってるとか、そんなところだろう。

×
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP