Skip to content

Python で Cisco Webex Teams のスペースに所属するメンバー一覧を取得する

Python で webexteamssdk を使い、Webex Teams のスペース (≒ チャット) に参加しているメンバー一覧を取得するスクリプト例をメモしておきます。 Ubuntu 22.04LTS + Python 3.10.4 環境で動作確認しました。 メンバー取得出来るのは後の手順で作成する bot が所属しているスペースが対象です。

venv 環境の作成

作業用の venv 環境を作成します。

1
2
3
4
5
6
mkdir webex-example
cd webex-example
python3 -m venv .venv
echo 'source .venv/bin/activate' > .envrc
direnv allow
python3 -m pip install --upgrade pandas pip webexteamssdk

サンプルスクリプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/env python3

import argparse
import configparser
import os

import pandas
from webexteamssdk import WebexTeamsAPI

parser = argparse.ArgumentParser(description="Retrieve chat room members.")
parser.add_argument("-c", "--csv", help="Output in CSV format")
args = parser.parse_args()

config = configparser.ConfigParser()
config.read(os.path.expanduser("~") + "/.webexrc")
BOT_ACCESS_TOKEN = config["settings"]["BOT_ACCESS_TOKEN"]

data = []
api = WebexTeamsAPI(access_token=BOT_ACCESS_TOKEN)
rooms = api.rooms.list()
for room in rooms:
    members = api.memberships.list(room.id)
    for member in members:
        data.append([room.title, member.personDisplayName, member.personEmail])

df = pandas.DataFrame(data, columns=["Room", "Name", "Email"]).sort_values(
    by=["Room", "Name"]
)
print(df.to_string(index=False))

if args.csv != None:
    df.to_csv(args.csv, index=False)

アクセストークンの用意

Python スクリプトからスペースのメンバーを取得するには冒頭に記載した通り、スペースへ bot を参加させておく必要があります。 Python から Cisco Webex へメッセージを送信する に記載した内容に従い、webex for Developvers にログインし、bot を登録してアクセストークンを取得しておきます。 また、メンバー取得の対象にしたいスペースには bot をユーザとして追加しておきます。

アクセストークンは Python スクリプトを実行するユーザの ~/.webexrc に、以下の内容で保存しておきます。 ACCESS-TOKEN は実際の値に読み替えますが、ダブルクォートやシングルクォートで括らないようにします。 クォートしてしまうと Python の configparser で処理する際、クォートが含まれてしまい、意図しないエラーになってしまいます。

1
2
[settings]
BOT_ACCESS_TOKEN = ACCESS-TOKEN

実行例

実行例は以下の通りです。

1
2
3
4
# ./export-webex-members.py
     Room          Name               Email
TestRoom1       Foo Bar  foobar@example.com
TestRoom1   foo-bar-bot    foobar@webex.bot

結果を CSV ファイルに保存したい場合は以下のように実行します。

1
./export-webex-members.py --csv result.csv