🐧
Zendesk CSAT(カスタマー満足度)の情報をZenpyで取得する
はじめに
こんにちは、クラスメソッド AWS事業本部の筧です。
クラスメソッドのメンバーズサービスでは、問い合わせ管理ツールとして Zendesk を利用しています。そして内部的に Zendesk の CSAT (以降、カスタマー満足度)をサービス改善の指標として活用しています。
Zendesk のデータ分析機能の Zendesk Explore を用いることでカスタマー満足度を集計して見える化が可能なのですが、全社メンバーに共有するにはライセンスが大量に必要などの課題がありました。
そこで、Zenpy を利用してカスタマー満足度を週次集計して Slack に通知することで、本課題を解消しました。今回はカスタマー満足度を Zenpy で取得する箇所をご紹介します。
やってみた
Zendesk からカスター満足度を取得するインスタンスメソッドがfetch_satisfaction_ratings()
です。引数は以下のように設定します。
- score
- 選択可能な値:
offered, unoffered, received, received_with_comment, received_without_comment,good, good_with_comment, good_without_comment, bad, bad_with_comment, bad_without_comment
- 満足評価のgoodは、満足評価(コメント有)のgood_with_commentと満足評価(コメント無し)のgood_without_commentを内包しているようでした。不満足評価についても同様。
- 選択可能な値:
- start_unixtime
- 集計期間の開始UNIX時間
- end_unixtime
- 集計期間の終了UNIX時間
src/services/zendesk.py
import logging
from typing import List, Dict, Optional
from datetime import datetime, timedelta
from zenpy import Zenpy
logger = logging.getLogger()
logger.setLevel(logging.INFO)
class ZendeskService:
def __init__(self, zenpy_client) -> None:
self.zenpy_client = zenpy_client
def fetch_satisfaction_ratings(
self,
score: str,
start_unixtime: Optional[float],
end_unixtime: Optional[float],
) -> List:
"""
refs:https://developer.zendesk.com/api-reference/ticketing/ticket-management/satisfaction_ratings/#filters
start_unixtimeがブランクの場合は1日前のunixtimeを設定します
"""
try:
if start_unixtime is None:
start_unixtime = (
datetime.now() - timedelta(days=+1)
).timestamp()
resp = self.zenpy_client.satisfaction_ratings(
sort_order="desc",
score=score,
start_time=start_unixtime,
end_time=end_unixtime,
)
satisfaction_ratings = []
for i in resp:
satisfaction_rating = {
"ticket_id": i.ticket_id,
"ticket_comment": i.comment,
"requester_id": i.requester_id,
}
satisfaction_ratings.append(satisfaction_rating)
return satisfaction_ratings
except Exception as ex:
logger.error(ex)
return []
あとは、Zenpyクライアントからfetch_satisfaction_ratings()
を呼び出していただければと思います。
from src.services.zendesk import ZendeskService
from zenpy import Zenpy
def exec():
"""
- Zenpyクライアントの作成
- Zenpyクライアントのクレデンシャル情報はベタ書きするのではなく、AWS Secrets Managerなどから取得してください。
"""
creds = {
"token": str({Zendesk APIのトークン}),
"email": str({Zendesk APIのメールアドレス}),
"subdomain": str({Zendeskのサブドメイン}),
}
zenpy_client = Zenpy(**creds)
zendesk_service = ZendeskService(zenpy_client)
"""
- 満足評価を取得
- unix_utc_start_time と unix_utc_end_time を算出する処理は省略
"""
score = "good"
resp = zendesk_service.fetch_satisfaction_ratings(
score,
unix_utc_start_time,
unix_utc_end_time,
)
return resp
unix_utc_start_time と unix_utc_end_time については以下のブログで紹介しています。
あとがき
Zendesk API 制限に気をつけながらご利用ください!
システムの全体像は DevelopersIO の私のブログに後日公開予定です。
それではまた!
Discussion