はじめに
Zendeskはデンマーク発のカスタマーソフトウェアです。
主に問い合わせ等の管理で使うらしいです。(あまりわかっていませんw)
ただ、日本ではちょいちょい 技術サイト として利用しているところを見かけます。
- cybozu developer network
- DataSpider Technical Network
- SORACOM Developers
- コラボフローサポート
そんな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は裏側で再帰処理がされているらしく、
何も意識しなくてもごそっと全件取得できました!!
↑ この楽さ、ものすごい重要!
おわりに
モジュールがあるともろもろの記述が省略できて便利ですが、
リファレンスが整っているとは限らないので、トライ&エラーが大切です!!
それでは!≧(+・` ཀ・´)≦