3
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?

More than 5 years have passed since last update.

第2回 Zendesk APIとRailsでチケット管理してみよう − 連載 Zendeskで顧客サポート

Last updated at Posted at 2017-05-18

別サイトで2014/4/23に投稿した記事です。別サイト閉鎖につき、移転しました。情報が古い可能性があるので、ご注意ください。

やること

第1回でご紹介した通り、Zendeskはブラウザから使えますが、Zendesk APIを利用すると、Webサイトと連携することができます。
今回は、Ruby on Railsを使って、Zendesk APIにアクセスし、Zendeskのチケットを表示してみます。

今回使うgem

Rails(Ruby)からZendesk APIにアクセスするために、Zendeskから"zendesk_api"gemが提供されています。

READMEに設定方法が書かれているので、ざっくりご覧ください。

Ruby on Railsで実装してみよう

準備

rails new zendesk_api_with_rails
cd zendesk_api_with_rails

Zendesk APIのgemを追加

Gemfile に↓を追加して、

gem 'zendesk_api'

インストールします。

bundle install

Zendesk APIにアクセスに必要な情報を集める

APIアクセスには、ユーザ名/パスワードかユーザ名/APIトークンのいずれかを使います。
今回は、ユーザ名/APIトークンでアクセスしてみます。

  • Zendeskにログインして、

  • 「管理」ー「チャネル」ー「API」をクリックし、

  • 「トークンアクセス」を有効にして、APIトークンします。

  • すぐ下にcurlコマンドが表示されているので、「YOUR_TOKEN」の部分を自分用のAPIトークンに入れ替えて、ターミナルで実行してみてください。

    curl -u xxx@example.com/token:YOUR_TOKEN https://xxx.zendesk.com/api/v2/users/me.json

Zendesk APIクライアント用ファイルを追加

Zendesk APIクライアントを取得するため、config/initializersに、zendesk_api_init.rbを作成します。

いろいろ書いてありますが、設定するのはENV['...']がある3箇所だけです。

class ZendeskApiInit
  def self.client
    @client ||= ZendeskAPI::Client.new do |config|
      # Mandatory:

      config.url = ENV['ZENDESK_URL'] # e.g. https://mydesk.zendesk.com/api/v2

      # Basic / Token Authentication
      config.username = ENV['ZENDESK_USERNAME']

      # Choose one of the following depending on your authentication choice
      config.token = ENV['ZENDESK_TOKEN']
      # config.password = "your zendesk password"

      # OAuth Authentication
      # config.access_token = "your OAuth access token"

      # Optional:

      # Retry uses middleware to notify the user
      # when hitting the rate limit, sleep automatically,
      # then retry the request.
      config.retry = true

      # Logger prints to STDERR by default, to e.g. print to stdout:
      require 'logger'
      config.logger = Logger.new(STDOUT)

      # Changes Faraday adapter
      # config.adapter = :patron

      # Merged with the default client options hash
      # config.client_options = { :ssl => false }

      # When getting the error 'hostname does not match the server certificate'
      # use the API at https://yoursubdomain.zendesk.com/api/v2
    end
  end
end

環境変数を設定

zendesk_api_init.rbで使用する環境変数を設定します。環境変数はENV['xxx']を使って、アクセスできます。

# Zendesk
export ZENDESK_USERNAME=xxx
export ZENDESK_TOKEN=xxx
export ZENDESK_URL=https://xxx.zendesk.com/api/v2

.bash_profile 辺りに上記の環境変数を設定しておくと便利です。

設定後、

source ~/.bash_profile

コマンドを実行して、追加した環境変数を有効にするのをお忘れなく。

Zendesk APIクライアントの動作確認

rails console
> client = ZendeskApiInit.client # クライアントを作成
> client.tickets.first # 最初に作成したチケットを取得する

ブラウザからチケットを表示

ブラウザからチケットを表示するために、コントローラとビューを追加します。

コントローラとビューを追加

コントローラzendesk_tickets_controller.rbを作成し、indexメソッドを追加します。

class ZendeskTicketsController < ApplicationController
  def index
    @tickets = ZendeskApiInit.client.tickets.page(1).per_page(10) # 10チケットを取得して、最初の1ページ目を表示。pageメソッドが表示されるページで、per_pageメソッドがページに表示するデータ数。
  end
end

apps/viewsにzendesk_ticketsディレクトリを作成し、index.html.erbを作成します。

<h1>ZendeskTickets#index</h1>

<table>
  <thead>
    <tr>
      <th>Id</th>
      <th>Subject</th>
      <th>Description</th>
      <th>Created at</th>
    </tr>
  </thead>

  <tbody>
    <% @tickets.each do |ticket| %>
      <tr>
        <td><%= ticket.id %></td>
        <td><%= ticket.subject %></td>
        <td><%= ticket.description %></td>
        <td><%= ticket.created_at %></td>
      </tr>
    <% end %>
  </tbody>
</table>

ルーティングの設定

config/routes.rb に ルーティング設定をします。

get "zendesk_tickets/index"

チケット一覧を確認

http://localhost:3000/zendesk_tickets/indexにアクセスしてみましょう!

*scaffold.css.scssをコピーしてくると、見た目がややマシになります(笑

個別チケット確認のために、コントローラとビューを更新・追加

コントローラzendesk_tickets_controller.rbを作成し、showメソッドを追加します。

def show
  @ticket = ZendeskApiInit.client.tickets.find(id: params[:id])
end

個別チケットページに遷移しやすいように、indexページのSubjectにリンクを設置します。

<% @tickets.each do |ticket| %>
  <tr>
    <td><%= ticket.id %></td>
    <td><%= link_to ticket.subject, "/zendesk_tickets/#{ticket.id}" %></td>
    <td><%= ticket.description %></td>
    <td><%= ticket.created_at %></td>
  </tr>
<% end %>

ルーティングの設定

config/routes.rb に showメソッドへのルーティングを設定します。

get "zendesk_tickets/:id" => "zendesk_tickets#show"

チケット作成の確認

http://localhost:3000/zendesk_tickets/indexにアクセスして、Subjectをクリックしてみましょう!

*チケットが存在していなければ、もちろん、表示されません。
その場合は、チケットを作成してから試してみてください。

まとめ

うまく動いたでしょうか?

本当は、チケットの作成までやるつもりでしたが、結構長くなってきたので、一旦終わりにします。
あとは、zendesk_api gemのREADMEを参考にやってみてください。

Zendesk APIによって、Zendeskで蓄積した電話やメールなどの顧客対応履歴を、Webサイトの動きに反映できます。 また逆方向に、Webサイトでの顧客の行動(サポート依頼、苦情、資料請求など)を、Zendeskのチケットとして蓄積することもできます。

クラウド以前は、こういうことをするのはなかなか大変なことでしたが、今ではZendesk APIを叩けば、チケットデータを出し入れできます。本当にすごい時代になったものです。

どのように活用して、お客さんに価値を提供できるか、考えてみてはいかがでしょうか。

サンプルコードのダウンロード

上記のサンプルコードは、Githubよりダウンロードできます。

https://github.com/fuji3zpg/zendesk_api_show_tickets

参考情報

  • Railsの実装周りは、"zendesk_api"gemのREADME・Wiki・テストコードが参考になります。
  • Zendesk APIの公式記事は、Zendesk APIに関する概説があります。
    ググってみたら、"zendesk_api_client_rb"gemに関する情報は↓のZendesk公式API以外にはほぼない感じでした。なので、英語ですが、まずはこのページをじっくり読むのがいいと思います。

http://developer.zendesk.com/documentation/rest_api/introduction.html

3
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
3
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?