本日は軽めの話題として、ZendeskのAPIをRubyから操作する方法について書いてみたいと思います。
ZendeskはAPIを提供しています。また、Ruby Gemも提供されています。これを軽く使ってみます。
問合せ一覧を出力してみる
まずgemをrequire
します。
require 'zendesk_api'
APIに接続します。
client = ZendeskAPI::Client.new do |config|
config.url = 'https://hoge.zendesk.com/api/v2'
config.username = 'hoge@fuga.com'
config.token = 'hogefugafoobar'
config.retry = true
end
検索します。検索クエリの詳細は公式ヘルプをご確認ください。
result = client.search(query: 'tags:ほげほげ ふがふが created>2016-12-16T00:00:00+09:00')
検索結果を出力します。とりあえずファイルにメールの問合せ本文を一覧で出力してみます。
open("desc.txt", "w") do |out|
result.all do |t|
out.puts(t.description)
out.puts("===========================")
end
end
これで対象の問合せの本文がdesc.txt
に出力されます。
同じ問合せが多数来た時に対象機種をリストアップしたり、上記のように一覧で出力したりするのに活用しています。
チケットにメモを追加してみる
Zendesk側で設定して、特定のタグを含むチケットが来た場合に特定のURLをたたく、といった事も可能です。
例えば、チケットに管理画面のURLを追加するようにしてみましょう。
次に、ターゲット先のサーバー側のプログラムを書いていきます。チケットに追加情報を書き込むには、同様にZendeskのクライアントが必要になりますので、クライアントで接続します。
client = ZendeskAPI::Client.new do |config|
config.url = 'https://hoge.zendesk.com/api/v2'
config.username = 'hoge@fuga.com'
config.token = 'hogefugafoobar'
config.retry = true
end
次に送られてくるリクエストを受けるためのパスを設定します。
post '/add_comment' do
return add_comment(client, params[:value])
end
呼び出されるメソッドで、内部向けのコメントをチケットに追加する処理を書きます。
def add_comment(client, ticket_id)
# チケットの詳細情報を取得
t = client.tickets.find(id: ticket_id)
# コメントを作成
admin_url = get_admin_user_url(t)
t.comment = ZendeskAPI::Ticket::Comment.new(client, value: admin_url, public: false)
t.save!
t.description
end
get_admin_user_url
はチケットから管理画面のURLの文字列を簡単なメソッドです。
def get_admin_user_url(t)
user_id = get_user_id(t)
return if user_id.blank?
"http://kanrigamen.url/users/#{user_id}"
end
def get_user_id(t)
# 本文が空なら無視
return nil if t.description.blank?
# 本文を行毎の配列にする
message = t.description.split("\n")
message.each do |m|
s = m.split(/[ \+]/)
if s[0] == "ユーザーID:"
return s[1].strip
end
end
return nil
end
すると、該当する問合せがあった場合に、チケット作成時に自動でコメントが追加されます。
カカリアスタジオでは、上記のようにAPIを活用して、問合せ業務の効率化を図っています。
おわりに
ソーシャルゲームでは、ユーザーの生の声がレビューや問合せなどでダイレクトに届きます。開発現場までほぼリアルタイムで届きます。それが醍醐味でもあります。
ただ、ユーザー数も増えてくると対応も大変になってきます。そこで、少しでもユーザーの声に耳を傾けるべく、できるだけ必要な情報に素早く簡単にアクセスできる環境を整えるよう心がけています。