Edited at

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

More than 1 year has passed since last update.


はじめに

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は裏側で再帰処理がされているらしく、

何も意識しなくてもごそっと全件取得できました!!

↑ この楽さ、ものすごい重要!


おわりに

モジュールがあるともろもろの記述が省略できて便利ですが、

リファレンスが整っているとは限らないので、トライ&エラーが大切です!!

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