背景
毎日の業務の中で自動化したい投稿はありますか?
今回は運用しているサービスの日々の顧客数を営業チームやマーケティングチームに自動で通知するBotを作成するためにRocket.ChatのAPIを活用してPythonから自動で通知する仕組みを構築しました!
SlackのBotに関する情報は多いですが、Rocket.Chatの情報は意外と少ないので、ぜひ参考にしてください!
1. 準備:Rocket.ChatでBotを準備する
Rocket.ChatでBotを利用するには、まず以下の設定が必要です。
1.1 Botのアカウント作成
デフォルトで用意されているかわいい猫のアイコンのBot「Rocket.Cat」を使います。
メールアドレスとパスワードを設定しましょう。
-
メールアドレス:
test@sample.co.jp
-
パスワード:
password
1.2 Botを通知用チャンネルに招待
通知を送るチャンネル(例:BOT_TEST
)に、このBotを招待します。
2. 必要な情報を環境変数で管理
Botを動かすための設定情報は、環境変数にまとめて管理しましょう。
.env
ファイルの例:
# Rocket.Chat API設定情報
ROCKET_CHAT_BASE_URL=https://chat.sample.work/
ROCKET_CHAT_EMAIL=test@sample.co.jp
ROCKET_CHAT_PASSWORD=password
ROCKET_CHAT_ROOM_NAME=BOT_TEST
3. Rocket.Chat APIの流れ
Rocket.Chat APIを使ったメッセージ投稿の流れは以下の通りです:
-
ログイン:
login
APIでBotの認証情報(メールアドレス&パスワード)を送信して、user-id
とauth-token
を取得します。 -
チャネル情報の取得:チャンネル名から
channel_id
(ランダムな文字列)を取得します。 -
メッセージ投稿:
auth-token
とuser-id
をヘッダーにセットし、channel_id
とメッセージ本文をPOSTします。
4. POSTMANでAPIを確認する
Pythonのコードを書く前にPOSTMANでリクエストが正しく動作することを確認しましょう。
4.1 ログイン
4.2 チャンネルID取得
4.3 メッセージ投稿
5. PythonでRocket.Chatに通知する
PythonからRocket.chat APIを呼びましょう
import os
import requests
from dotenv import load_dotenv
# 環境変数を取得
ROCKET_CHAT_BASE_URL = os.getenv("ROCKET_CHAT_BASE_URL")
ROCKET_CHAT_EMAIL = os.getenv("ROCKET_CHAT_EMAIL")
ROCKET_CHAT_PASSWORD = os.getenv("ROCKET_CHAT_PASSWORD")
ROCKET_CHAT_ROOM_NAME = os.getenv("ROCKET_CHAT_ROOM_NAME")
# メッセージフォーマット
def format_message(user_count):
return f"現在の顧客数は{user_count}です。"
# Rocket.Chatにメッセージを投稿
def post_message_to_rocket_chat(email, password, room_name, message):
try:
# 1. ログイン
login_url = f"{ROCKET_CHAT_BASE_URL}api/v1/login"
response = requests.post(login_url, json={"user": email, "password": password})
response.raise_for_status()
user_id = response.json()['data']['userId']
auth_token = response.json()['data']['authToken']
# 2. チャネルID取得
room_info_url = f"{ROCKET_CHAT_BASE_URL}api/v1/rooms.info?roomName={room_name}"
headers = {'X-Auth-Token': auth_token, 'X-User-Id': user_id}
response = requests.get(room_info_url, headers=headers)
response.raise_for_status()
channel_id = response.json()['room']['_id']
# 3. メッセージ投稿
post_message_url = f"{ROCKET_CHAT_BASE_URL}api/v1/chat.postMessage"
payload = {'channel': channel_id, 'text': message}
response = requests.post(post_message_url, headers=headers, json=payload)
response.raise_for_status()
print("Rocket.Chatへのメッセージ投稿に成功しました!")
except Exception as e:
print(f"エラーが発生しました: {e}")
# メイン処理
if __name__ == "__main__":
user_count = 100 # 仮の顧客数(ここをDBから取得する処理に置き換え)
message = format_message(user_count)
post_message_to_rocket_chat(ROCKET_CHAT_EMAIL, ROCKET_CHAT_PASSWORD, ROCKET_CHAT_ROOM_NAME, message)
6. Shellscriptの作成
daily_report.pyを実行するためのシェルスクリプトを作成します。このスクリプトは、指定されたPythonスクリプトを実行する役割を果たします。
#!/bin/bash
# daily_report.pyを実行
/usr/local/bin/python /daily_report.py
7.cron.confの設定
次に、cron.confファイルを設定します。このファイルには、cronが実行するジョブのスケジュールが記述されています。
今回は平日毎日18時に通知したいので以下のように設定します:
0 18 * * 1-5 /bin/bash /path/to/daily_batch.sh >> /log/cron.log 2>&1
8. cronの設定から実行
8-1. cron.confの反映
cron.confの内容をcrontabに反映させるため、以下のコマンドを実行します。
crontab cron.conf
8-2. cronサービスの再起動
sudo systemctl restart cron
または
sudo service cron restart
8-3. cronジョブの確認
crontab -l
9. まとめ
今回はRocket.Chat APIを使ってBotを作成する流れを解説しました!
初めての記事投稿となりますが、今後も継続してアウトプットしていければなと思います!
Rocket.Chatの公式ドキュメント: