Secret Ninja Blog

Support Engineering Manager してます

embulk-output-zendesk_usersでZendeskのユーザの情報を便利にする

Zendeskで顧客の契約内容に応じた詳細なルール付けをしたり、サービスの利用状況(例えば、Private Alphaの機能を利用しているか、など)を利用して、 Zendeskのヘルプセンターの表示/非表示をさせたりとか、SLAに応じたトリガーの設定にも活かしたい、というやりたいことがあった。 他にも、契約後半年以内アカウントを利用する顧客がサポートに問い合わせをしてきたら、自動でその内容をアカウントのセールスオーナーにも転送する、といったことをしたかった。 (これは現状、Zapierとかを使って無理くりやっている。。。)

しかし、そのために必要なSFDCやサービスのアカウント情報などを全てZendesk側で変数として利用可能な状態にはできていなかった。 また、SFDCはアカウントベースの管理、ZendeskはEmailベースのため、Emailの組み合わせが必ずしもうまく紐付けができないケースもあった。

そのため、データを一箇所に集めて前処理を行なって、綺麗なデータにしてからZendeskのユーザ情報を更新したいという目的があった。 そこで、ZendeskのUser IDを元に、ユーザのTagsとUser Fieldsを更新するembulk-output pluginを作った。

https://github.com/toru-takahashi/embulk-output-zendesk_users

これでどういうことができるかというと、というと

SFDC / Zendesk / TD accountのデータを全部まるっと集めて、まるっとJOINして、 必要な項目はJSONに集約して、custom fieldsにExportしている。

設定サンプルは下記。

TagsにはArray型。User_fieldsにはフラットなkey-valueのJSONが来ることを想定している。

in:
  type: config
  columns:
  - {name: id, type: long}
  - {name: tags, type: json}
  - {name: user_fields, type: json}
  values:
  - - [ 1194094257, ["tag1", "tag2"], { "account_id": "", "field01": "2013-02-27T20:35:55Z" } ]
    - [ 9811482788, ["tag3"], { "account_id": "1" } ]
out:
  type: zendesk_users
  login_url: https://obscura.zendesk.com
  auth_method: token
  username: test@test.com
  token: xxxxxxxxxx
  method: update
  id_column: id
  tags_column: tags
  user_fields_column: user_fields

f:id:toru-takahashi:20171219035108p:plain

現状、自分はZendeskのtagsとuser_filedsのアップデートできればいいので、 未知のユーザのcreateだったり、そのほかのフィールドのアップデートには対応していない。

もしもほしければ、Githubのissueに書いておいてもらえれば、気が向いた時に付け加えます。