【Python】ChatworkでAPIを使って自動的にメッセージを送る

PythonでChatworkに自動通知 APIトークン・ルームID取得

Pythonでバッチを組むと、処理結果やエラーをどこかに通知したくなります、メールだと埋もれがちなので、チャットに飛ばしておくと見落としが減って便利です

通知先としてよく挙がるLINEやメールは、最近ちょっとハードルが上がっています、LINEは手軽だったLINE Notifyが2025年3月で終了して、今はメッセージ送信にLINE公式アカウントの用意が必要になりました、メールも安定して送ろうとすると外部サービスの契約が要りがちです

その点Chatworkは、アカウントさえあればAPIトークンルームIDの2つを用意するだけでPythonから数行でメッセージを送れます、この記事ではその2つの取得方法から、実際に送るサンプルコードまでまとめてご紹介します

公式ドキュメントにあるソースを少し弄った程度のシンプルなプログラムです、難しい準備は要らないので身構えなくて大丈夫です

目次

APIの利用に必要なもの

プログラムのなかで使うパラメータは次の2つです

  • APIトークン(誰として送るか=送信元アカウントの鍵)
  • ルームID(どのチャットに送るか=宛先)

それぞれの取得方法を順番に見ていきます

APIトークンを取得

ここで取得したAPIトークンのアカウントとしてメッセージが送られます、普段使いのアカウントではなく通知用アカウントを別で作ってトークンを取得するのがおすすめです

STEP
サービス連携を開く

ログイン後、右上のアカウント名をクリックして、メニューの中からサービス連携をクリックします

Chatworkの右上メニューからサービス連携を開く
STEP
APIトークンをコピーする

ChatworkのWEBページに移動するので、左側のメニューでAPIトークンをクリックします、トークンが表示されるのでコピーして控えておきます

Chatworkのサービス連携画面でAPIトークンをコピーする

パーソナルプラン以外(ビジネスプランなど)では、APIトークンの利用に組織管理者への申請・承認が必要なことがあります、トークンの画面が出てこないときは管理者に確認してみてください

APIトークンはパスワードと同じです、人に教えたりGitHubなどの公開リポジトリにそのまま載せたりしないように気をつけてください、もし漏れてしまったときはサービス連携の画面から再発行すれば、古いトークンは無効になります

ルームIDを取得

次は、メッセージを送りたいルームのルームIDを調べます

STEP
対象のグループチャットを開く

通知の対象にするグループチャットをクリックして、アクティブな状態にしておきます

STEP
グループチャットの設定を開く

右上の歯車アイコンをクリックして、グループチャットの設定をクリックします

Chatworkの歯車アイコンからグループチャットの設定を開く
STEP
ルームIDを控える

設定画面の左下にルームIDが表示されているので、控えておきます

Chatworkのグループチャット設定画面の左下に表示されるルームID

ブラウザ版ならURLからも確認できます、対象のルームを開いたときのアドレスが https://www.chatwork.com/#!rid●●●●●●●● のようになっていて、#!rid のうしろの数字がルームIDです

Pythonのプログラム

肝心のPythonプログラムがこちらです、APIトークンとルームIDはコードに直書きせず、.envファイルから読み込む形にしています、こうしておけば値を差し替えるのも楽ですし、うっかり鍵を公開してしまう事故も防げます

まず読み込みに使うpython-dotenvを入れておきます

pip install python-dotenv

次にプロジェクトの直下に.envを作って、さっき取得したAPIトークンとルームIDを書いておきます

CHATWORK_TOKEN=取得したAPIトークン
CHATWORK_ROOM_ID=取得したルームID

作った.env.gitignoreに入れて、GitHubなどにアップしないようにしておきます、これで鍵をコードに直書きせず、リポジトリにも残さずに済みます

本体のコードがこちらです、ステータスコードが200かどうかで送信成功をTrueFalseで返すようにしています

import os

import requests
from dotenv import load_dotenv

load_dotenv()
CHATWORK_TOKEN = os.environ["CHATWORK_TOKEN"]
CHATWORK_ROOM_ID = os.environ["CHATWORK_ROOM_ID"]


def send_to_chatwork(message, chatwork_token=CHATWORK_TOKEN, room_id=CHATWORK_ROOM_ID) -> bool:
    url = f"https://api.chatwork.com/v2/rooms/{room_id}/messages"
    headers = {
        "accept": "application/json",
        "content-type": "application/x-www-form-urlencoded",
        "x-chatworktoken": chatwork_token,
    }
    payload = {
        "self_unread": 0,
        "body": message,
    }
    response = requests.post(url, data=payload, headers=headers)
    return response.status_code == 200

やっていることはシンプルで、https://api.chatwork.com/v2/rooms/{room_id}/messages に対して、ヘッダーにX-ChatWorkToken(取得したAPIトークン)を入れて、bodyにメッセージ本文を入れてPOSTするだけです、self_unreadは自分側を未読にするかどうかの任意指定で、0だと既読の状態で送られます

あとは send_to_chatwork(‘通知したいメッセージ’) のように呼べば、バッチの好きなタイミングで通知できます

ChatworkのAPIには利用回数の制限があります、ループの中で大量に送るような使い方は避けて、処理結果やエラーの要点だけ送るくらいがちょうどいいです

通知結果

↓のように、APIトークンを発行したアカウントとしてメッセージが送信されます

Pythonから送ったメッセージがChatworkに表示された結果

公式ドキュメント

公式ドキュメントはいくつかありますが、↓のページは簡易テストもできてわかりやすいです

メッセージを投稿する|Chatwork API Documentation

あとがき

仕事で処理結果やエラーを共有するなら、Chatworkは利用シーンが多いので作っておくと便利です

Pythonの自動化つながりだと、Selenium WebDriverWaitの使い方でスクレイピングを安定させて、その結果をこのChatwork通知に流す、といった組み合わせも便利です

作ったスクリプトを配りたいときは、PyInstallerでexe化する話もあわせてどうぞ

📚 Python自動化の独学に効く本PR
退屈なことはPythonにやらせよう 第3版

退屈なことはPythonにやらせよう 第3版

Al Sweigart

Pythonクローリング&スクレイピング 増補改訂版

Pythonクローリング&スクレイピング 増補改訂版

加藤耕太

シゴトがはかどる Python自動処理の教科書

シゴトがはかどる Python自動処理の教科書

クジラ飛行机

私のおすすめからランダムで3冊を表示しています


最後に・・・

クラウドワークスココナラでお仕事受け付けています!

PythonとExcelを中心に仕事に役立つ業務ツールや自動化、スクレイピングツールの作成を受注していて、クラウドワークスでは気が付けば100件以上のお仕事を受注してきました!

会社員をやりながらの副業なので時間の捻出は相応ですが、クライアントの方々と近い立場でこちらからも提案しながら活動していますのでお悩みあれば是非ご相談ください

ココナラのプロフィールページへ

"ココナラ"に新規登録する際は1,000Pもらえる紹介コード使ってください

78E62K

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAとPythonを中心にユーザー側でできるITを自己学習しているので備忘録半分、学習履歴を残して同じ道を辿る人の参考になればとブログを始めました

副業でスクレイピングツール作成を中心にできることを色々やっていますのでご相談いただけるとありがたいです!


クラウドワークスのページへ


ココナラのページへ

コメント

コメントする

目次