LoginSignup
2
4

More than 5 years have passed since last update.

Node.jsでZendesk APIを叩いてみた

Last updated at Posted at 2018-10-13

はじめに

Zendeskはデンマーク発のカスタマーソフトウェアです。
主に問い合わせ等の管理で使うらしいです。(あまりわかっていませんw)

ただ、日本ではちょいちょい 技術サイト として利用しているところを見かけます。

そんなZendeskですが、REST APIが搭載されているので、
いろいろとデータを抜き出したりできます。
https://developer.zendesk.com/rest_api

やりたいこと

Node.js (のツール/モジュール) を使って、Zendeskの ユーザー数 (アカウント数) を取得したいと思います

ツール

Zendeskの こちらのサイト に、いろいろな言語に対応したツールがありました。
Node.jsも2種類あります。

ただ、このツールは外部の方?が作っており、リファレンスが多いとはなかなか言えません。。
(GitHubのREAD MEぐらい)
なのでいざ使おうとなるとコード読んだりしてなかなか大変です
※ 今回は node-zendesk というツールを使います。

インストール

ここから先は node-zendesk を使った説明になります!!

npmで用意されているので、普通に

$ npm install node-zendesk

で良いです。基本プロジェクトごとのインストールになると思うので -g はなくて良いと思います。

コード

コードは大きく

  • 認証部分
  • 実行部分

に分けられます

認証部分

API Token による認証と OAuth による認証が用意されています。
※ 今回は API Token を利用します。

const client = zendesk.createClient({
  username:  'username', // Your Email Address
  token:     'token', // Your API Token
  remoteUri: 'https://<XXXX>.zendesk.com/api/v2' // Your Zendesk URI
});

まぁ、READ MEにあるそのままですね。

で、ここからREAD MEに書いてないことも出てくるのですが、
もし Proxy を通したい場合は、

const client = zendesk.createClient({
  username:  'username', // Your Email Address
  token:     'token', // Your API Token
  remoteUri: 'https://<XXXX>.zendesk.com/api/v2', // Your Zendesk URI
  proxy: 'http://xxxx.proxy' // Your Proxy Server URL
});

と、記述すると出来ました。
他にもオプションがあるので、もしかするとこの方法で使えるかもしれません(Proxy以外試していませんm(_ _)m )
https://github.com/blakmatrix/node-zendesk#command-line-options-for-scripts

実行部分

認証部分で定義したclientを利用します。

// ユーザー数を取得する場合
client.users.list((err, req, result) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(result)
});

// View数を取得する場合
client.view.list((err, req, result) => {
  if (err) {
    console.log(err);
    return;
  }
  console.log(result)
});

client.メソッド.アクション という組み合わせになります!
(ここに気づくまでに時間がかかった。。)

それぞれのメソッドでどんなアクションができるかは、GitHubのREAD MEに書いてあります!

発展

Zendeskからユーザー数を取得してkintoneへ登録するプログラムを作ってみました。

// zendeskからユーザー数を取得する関数
const getZenUsers = () => {
  // 同期処理のためにPromise化
  return new Promise((resolve, reject) => {
    const zendesk = require('node-zendesk');

    const client = zendesk.createClient({
      username:  'username', // Your Email Address
      token:     'token', // Your API Token
      remoteUri: 'https://<XXXX>.zendesk.com/api/v2', // Your Zendesk URI
      proxy: 'http://xxxx.proxy' // Your Proxy Server URL
    });

    client.user.list((err, req, result) => {
      if (err) {
        console.log(err);
        reject(null);
      }
      resolve(result.length);
    });
  });
};

// kintoneへ登録
const posKintone = data => {
  if (!data) {
    return;
  }
  const kintone = require('kintone-nodejs-sdk');
  const common = {
    Domain: '<Your subdomain>.cybozu.com',
    AppID: '<Your App ID>',
    APIToken: '<Your API Token>',
    Record: {
      '<Field Code>': {
        value: data
      }
    }
  };
  const kintoneAuth = new kintone.Auth();
  kintoneAuth.setApiToken(common.APIToken);
  const kintoneConnection = new kintone.Connection(common.Domain, kintoneAuth);
  const kintoneRecord = new kintone.Record(kintoneConnection);
  kintoneRecord.addRecord(common.AppID, common.Record)
    .then(resp => {
      console.log('kintoneのアプリにデータを登録しました');
      return resp;
    });
};

// 実行:成功時のみ
getZenUsers()
  .then(resp => {
    posKintone(resp);
  });

このモジュールを使った理由

通常、Zendeskのユーザー取得APIは 100 件までしか一括で取得できないのですが、
このnode-zendeskは裏側で再帰処理がされているらしく、

何も意識しなくてもごそっと全件取得できました!!
↑ この楽さ、ものすごい重要!

おわりに

モジュールがあるともろもろの記述が省略できて便利ですが、
リファレンスが整っているとは限らないので、トライ&エラーが大切です!!

それでは!≧(+・` ཀ・´)≦

2
4
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
2
4