【業務効率化】PythonとChatwork APIを使ってメッセージを一斉送信する方法

「毎回のデータ収集に時間がかかる」「AIでコードを作っても動かない」
そんなお悩み、SCRAPROが解決します。
サービスについて詳しく見る

目次

【はじめに】Chatworkと本記事の目的

Chatworkとは?

Chatworkは、ビジネス向けのチャットツールとして広く利用されており、グループチャット・タスク管理・ファイル共有など、社内外の情報共有を効率的に行える点が大きな特徴です。
日本国内の中小企業を中心に導入が進んでおり、メールに代わるコミュニケーション手段として定着しつつあります。
しかし、意外なことにChatworkには「一斉送信」機能が標準では搭載されていません
同じメッセージを複数のチャットルーム(グループや個別チャット)に送信したい場合、手動でそれぞれにコピペする必要があります。
日々の定型連絡や案内文を複数ルームに送る業務がある場合、この作業が思いのほか手間となり、ミスや送信漏れの原因にもなります。

本記事の目的

そこで本記事では、PythonとChatwork APIを活用し、複数のチャットルームに同じメッセージを一斉送信する仕組みを構築する方法をご紹介します。
「APIって難しそう…」と感じる方にも取り組んでもらえるように、プログラミング初心者でも理解しやすいコード例付きで、ステップごとに丁寧に解説します。
Chatworkの運用を少しでも効率化したい方や、毎回の手動送信から解放されたい方、
そして業務連絡のミスや手間を減らしたいという方にとって、本記事がその第一歩となれば幸いです。

Chatwork APIの準備

STEP
Chatworkにログイン

まずは下記URLから「Chatwork」にアクセスし、ログインページからログインします。

👉 https://go.chatwork.com/ja/

STEP
APIトークンを取得

ログイン後、画面右上の「利用者名」をクリックして表示されるメニューの「サービス連携」クリックします。

「APIトークン」をクリックし、表示されているAPIトークンをメモする。
この情報は悪用される可能性があるため、他人に絶対に共有しないようにしてください。

PythonでChatworkにメッセージを送信してみる

Chatwork APIの準備ができたら、次はPythonを使ってメッセージを送信する処理を実装していきます。
ここでは、まず1つのチャットルームに対してメッセージを送信する基本コードをご紹介します。
Python初心者の方でも理解しやすいよう、できるだけシンプルな構成で解説します。

必要なPythonライブラリのインストール

以下のコードを実行して、Chatwork APIにリクエストを送るためのrequestsライブラリをインストールします。

pip install requests

送信先のルームIDを確認する

APIを使用してメッセージを送信するためには送信先のルームIDが必要となります。
送信先のチャットルームを開いた状態で、ブラウザのアドレスバーにてURLを確認してください。
以下の場合、ルームIDは「372744315」となります。

サンプルコード

import requests

API_TOKEN = 'YOUR_API_TOKEN'  # メモしたAPIトークンに置き換える。
ROOM_ID = '372744315'         # メッセージを送りたいチャットルームID
MESSAGE = 'こんにちは、Chatwork APIからのテスト送信です。'

url = f'https://api.chatwork.com/v2/rooms/{ROOM_ID}/messages'
headers = {'X-ChatWorkToken': API_TOKEN}
params = {'body': MESSAGE}

response = requests.post(url, headers=headers, params=params)

if response.status_code == 200:
    print('✅ メッセージ送信成功')
else:
    print(f'❌ エラーが発生しました: {response.status_code} - {response.text}')

今回はマイチャットをルームIDに設定し、実行するとメッセージが正しく送信されました。

複数のチャットルームに一斉送信する仕組みを作る

前章では、1つのチャットルームにメッセージを送信する基本的なコードを紹介しました。
この章では、それを応用して、複数のチャットルームに同じメッセージを自動で順番に送信する処理を作成していきます。

厳密には「一斉送信」ではなく、「順次送信」

実際には、Pythonのスクリプト側で前章を応用し、複数のルームに対して1件ずつ順番に送信する処理を行うことで、見た目上の一斉送信を実現しています。
つまり、裏側では複数のAPIリクエストをループで順次実行しているだけであり、「完全に同時」ではないという点にご注意ください。

サンプルコード

前章で紹介したサンプルコードを応用して、複数のチャットルームに順番に同じメッセージを送信する処理を実装してみます。
以下のPythonコードを実行すると、ROOM_IDSに指定した複数のルームIDに対して、同じ内容のメッセージを順番に送信できます。
メッセージを送信する部分は関数化しています。

import requests

API_TOKEN = 'YOUR_API_TOKEN'  # メモしたAPIトークンに置き換える。
ROOM_IDS = ['111111111', '222222222', '372744315']  # メッセージを送りたいチャットルームIDのリスト
MESSAGE = 'こんにちは、Chatwork APIからのテスト送信です。'

def send_message(room_id, message):
    url = f'https://api.chatwork.com/v2/rooms/{room_id}/messages'
    headers = {'X-ChatWorkToken': API_TOKEN}
    params = {'body': message}

    response = requests.post(url, headers=headers, params=params)

    if response.status_code == 200:
        print('✅ メッセージ送信成功')
    else:
        print(f'❌ エラーが発生しました: {response.status_code} - {response.text}')

for room_id in ROOM_IDS:
    send_message(room_id, MESSAGE)

APIの利用回数制限を考慮する

Chatwork APIにはリクエストが5分間に300回までという制限が設けられており、短時間に大量のメッセージを送信すると 429 Too Many Requests というエラーが返る可能性があります。
詳しくはChatwork APIのドキュメントをご確認ください。
このエラーが発生した場合は、レスポンスヘッダーに含まれる X-RateLimit-Reset の値をもとに、次にリクエスト可能となる時間まで待機してから再送信することで、安全に処理を続行できます。
以下は、その仕組みを組み込んだ改良版のsend_message関数のコードです。実務で複数ルームに送信する場合はこちらの実装が推奨です。

import time
import requests

def send_message(room_id, message):
    url = f'https://api.chatwork.com/v2/rooms/{room_id}/messages'
    headers = {'X-ChatWorkToken': API_TOKEN}
    params = {'body': message}

    max_retries = 3
    for _ in range(max_retries):
        response = requests.post(url, headers=headers, params=params)

        if response.status_code == 200:
            print('✅ メッセージ送信成功')
            return
        elif response.status_code == 429:
            reset_unix = response.headers.get('x-ratelimit-reset')
            wait_seconds = max(int(reset_unix) - int(time.time()) + 10, 1)  # 待機秒数を算出し、10秒の余裕を持たせるかつ負の値を避ける
            time.sleep(wait_seconds)
        else:
            print(f'❌ エラーが発生しました: {response.status_code} - {response.text}')
            return
    else:
        print(f'❌ エラーが発生しました: {response.status_code} - {response.text}')

すべてのルームIDを自動で取得する

複数のチャットルームにメッセージを送信するには、それぞれのルームIDを事前に知っておく必要があります。
Chatworkの画面から1つずつ確認するのは非常に手間がかかりますが、APIを使えば、自分のすべてのチャットルームIDをまとめて取得することが可能です。
以下のコードを実行することで、ルームIDとルーム名を一覧表示できます。

import requests

API_TOKEN = 'YOUR_API_TOKEN'  # メモしたAPIトークンに置き換える。'

url = 'https://api.chatwork.com/v2/rooms'
headers = {'X-ChatWorkToken': API_TOKEN}

response = requests.get(url, headers=headers)

if response.status_code == 200:
    rooms = response.json()
    for room in rooms:
        print(f"{room['room_id']} : {room['name']}")
else:
    print(f'❌ エラーが発生しました: {response.status_code} - {response.text}')

PythonとGUIでここまでできる!Chatwork一斉送信ツールの実例

ここまでご紹介したのは、Pythonコードを直接実行して複数のチャットルームにメッセージを送信する方法でした。
これらを応用し、PythonのGUIライブラリを活用すれば、「chatbond」のようなChatwork連携ツールをPython × GUIライブラリ「flet」を使って自作することができます。

  • 自分が参加しているチャットルームがすべて一覧表示される
  • 任意のルームを複数選択できる
  • 入力欄にメッセージを記入し、「送信」ボタンを押すだけで一斉送信が実行される

システムの構築を依頼したい方へ

ここまでご覧いただいたように、Python × Chatwork API を活用すれば、日々の定型業務や通知作業を自動化し、大幅に業務効率を向上させることが可能です。
「こんな一斉送信システムを自社でも導入したい」
「でも、自分で構築するのは難しそう…」
そんな方へ向けて、私が運営するスクレイピング代行サービス「SCRAPRO」では、
Chatwork APIやその他の業務ツールを組み合わせた、最適な自動化システムの設計・開発を承っております。
「まずは相談だけしたい」という段階でも大歓迎です。ぜひお気軽にご相談ください。

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

コメント

コメントする

目次