Zenpyの使い方

記事タイトルとURLをコピーする

はじめに

こんにちは。PE部の谷です。
Pythonを使ってZendeskのAPIを叩くのにZenpyを使ってみたので、紹介します。

Zenpyとは

docs.facetoe.com.au

Zenpyとは、ZendeskをPythonで触る際にコードが書きやすくなるライブラリです。 Python2とPython3の両方をサポートしており、requestsを使うよりシンプルにコードを書くことができます。

使い方

前準備

まずはインストール。

pip install zenpy

importで指定します。

from zenpy import Zenpy 

次に、クレデンシャルを設定します。

creds = {
    'email' : 'youremail',
    'token' : 'yourtoken',
    'subdomain': 'yoursubdomain'
}

トークンの作成はこちら↓をご覧ください。

support.zendesk.com

他にもOAuthやパスワードを使うやり方もあるのでZenpyのドキュメントを参考にしてみてください。

zenpy_clientオブジェクトを作成して準備完了です。

zenpy_client = Zenpy(**creds)

書いてみよう

今回は、Zendesk組織の組織名、タグ、組織フィールドの項目を更新するコードを書きました。
赤枠内がターゲットです。 f:id:swx-tani:20211015184249p:plain

対象のZendesk組織を取得する
zenpy_client.search(name='hoge', type='organization')

nameに指定した文字列がつく組織の情報を取得することができます。

更新に使う置き換え情報を作成

対象の組織情報をもとに置き換え情報を作成していきます。

updated_info_list = []
for organization in target_org:
  new_org_name = organization.name.replace(古い組織名, 新しい組織名)
  updated_info_list.append(
      Organization(
            id=organization.id,
            name=new_org_name,
            tags=新しいタグ,
            organization_fields={'customer_type':f'顧客種別:{新しいタグ}'}
         )
      )

Organizationは、Default Cachesという機能を使っています。 以下のようにインポートして使うことができます。

from zenpy.lib.api_objects import Organization
一括更新

置き換え情報をもとに一括更新を行います。

job_status_list = []
size = 100
for start in range(0, len(updated_info_list), size):
    job_status = zenpy_client.organizations.update(
         updated_info_list[start: start + size]
    )
    job_status_list.append(job_status)

ZenpyはBulk Operations(一括操作)をサポートしています。

docs.facetoe.com.au

しかし、一度に処理できるオブジェクトの数に制限があるので注意が必要です。(一般的に100)
上記のコードは、組織数が100を超えることを想定し、100件ごとの処理にするために、range(初期値,最終値,差分)とスライス操作を使ってリストの要素を指定しています。

まとめ

Zenpyぜひ使ってみてください!