0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rocket.Chat APIを使ってPythonから投稿してみた

Last updated at Posted at 2024-12-26

背景

毎日の業務の中で自動化したい投稿はありますか?
今回は運用しているサービスの日々の顧客数を営業チームやマーケティングチームに自動で通知するBotを作成するためにRocket.ChatのAPIを活用してPythonから自動で通知する仕組みを構築しました!

SlackのBotに関する情報は多いですが、Rocket.Chatの情報は意外と少ないので、ぜひ参考にしてください!


1. 準備:Rocket.ChatでBotを準備する

Rocket.ChatでBotを利用するには、まず以下の設定が必要です。

1.1 Botのアカウント作成

デフォルトで用意されているかわいい猫のアイコンのBot「Rocket.Cat」を使います。
image.png

メールアドレスとパスワードを設定しましょう。

  • メールアドレスtest@sample.co.jp
  • パスワードpassword

1.2 Botを通知用チャンネルに招待

通知を送るチャンネル(例:BOT_TEST)に、このBotを招待します。


2. 必要な情報を環境変数で管理

Botを動かすための設定情報は、環境変数にまとめて管理しましょう。
.env ファイルの例:

.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を使ったメッセージ投稿の流れは以下の通りです:

  1. ログインlogin APIでBotの認証情報(メールアドレス&パスワード)を送信して、user-idauth-token を取得します。
  2. チャネル情報の取得:チャンネル名からchannel_id(ランダムな文字列)を取得します。
  3. メッセージ投稿auth-tokenuser-id をヘッダーにセットし、channel_id とメッセージ本文をPOSTします。

4. POSTMANでAPIを確認する

Pythonのコードを書く前にPOSTMANでリクエストが正しく動作することを確認しましょう。

4.1 ログイン

  • エンドポイント/api/v1/login
  • Body:メールアドレス&パスワード
    image-1.png

image-2.png


4.2 チャンネルID取得

  • エンドポイント/api/v1/rooms.info
  • Params:チャンネル名
    image-4.png
    image-3.png

4.3 メッセージ投稿

  • エンドポイント/api/v1/chat.postMessage
  • Headersauth-tokenuser-id
  • Bodychannel_idtext
    image-5.png
    image-6.png

5. PythonでRocket.Chatに通知する

PythonからRocket.chat APIを呼びましょう

daily_report.py
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スクリプトを実行する役割を果たします。

daily_batch.sh
#!/bin/bash

# daily_report.pyを実行
/usr/local/bin/python /daily_report.py

7.cron.confの設定

次に、cron.confファイルを設定します。このファイルには、cronが実行するジョブのスケジュールが記述されています。
今回は平日毎日18時に通知したいので以下のように設定します:

cron.conf
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の公式ドキュメント:


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?