ZendeskのチケットデータをAmazon Elasticsearch Serviceへ自動的にアップロードする
はじめに
前回のブログでPythonを使用してZendeskのチケット内容を取得することができました。
今回は取得したデータをAmazon Elasticsearch Serviceへ自動的にアップロードする方法をご紹介します。
前提
- Amazon Elasticsearch ServiceはAmazon VPCプライベートサブネットに作成
- Amazon API Gateway経由でAWS Lambdaを実行させる
- Zendeskの自動化とwebhookでAmazon Elasticsearch Serviceへデータを入れるまでを自動化する
- Amazon Elasticsearch Serviceへ入れるデータスキーマ
{ "ticket_id": 12345, "url": "https://subdomain.zendesk.com/agent/tickets/12345", "subject": "subject", "create_date": "2017-10-16T00:55:22Z", "updated_date": "2017-10-21T18:02:34Z", "nested_comments": [ { "comment_id": 22222, "public": True, "body": コメント }, { "comment_id": 33333, "public": False, "body": コメント } ] }
- Amazon Elasticsearch Serviceで類似チケットを検索する
やってみた
ZendeskのチケットがクローズになったタイミングでAWS Lambdaを実行させる設定をします。
Amazon API Gateway
ZendeskのチケットIDをPOSTするだけですので、Amazon API GatewayはPOSTメソッドで作成しました。
AWS Lambda
AWS Lambdaのコードはgithubへアップしましたのでご参照ください。
Zendeskでwebhookを作成する
設定 → 拡張機能 → ターゲットを追加 → HTTPターゲット からwebhookを作成します。
※urlはAmazon API Gatewayのurlを指定します。
Zendeskで自動化を作成する
サイドバーにある管理アイコンから自動化を選択し作成します。 ここでは解決済みのチケットを数時間後にクローズへステータスを変更した時に、ターゲットに通知するように設定しています。
通知:ターゲットに通知を選び、先ほど作成したwebhookを選択します。 JSONボディは以下のようにticketのidだけ送るようにしました。
これで、自動でZendeskのチケットがクローズになったらAmazon Elasticsearch Serviceへデータを入れることができます。
過去データを手動で入れる
自動化の設定は完了しましたが、過去のデータは手動で入れる必要があります。 Amazon Elasticsearch Serviceはプライベートでサブネットに作成しているので同じVPC内からデータを入れるため パブリックサブネットにEC2インスタンス(Amazon Linux)を作成して以下のようなPythonプログラムを実行し過去のデータを入れました。
サンプルコード
コードはgithubへアップしましたのでご参照ください。
これでクローズ済みのチケットが全てAmazon Elasticsearch Serviceへデータを入れることができました。
検索してみる
以下の例ではcomment.body
にELB 5xxが含まれるチケットを検索しています。
curl -s -H "Content-Type: application/json" -XGET "[Endpoint]/[IndexName]/TypeName]/_search" -d' { "query": { "match": { "comment.body": "ELB 5xx" } }, "_source":[ "subject", "url" ] }' | python -c 'import sys,json;print(json.dumps(json.loads(sys.stdin.read()),indent=4,ensure_ascii=False))' { "took": 9, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1056, "max_score": 11.866644, "hits": [ { "_index": "IndexName", "_type": "TypeName", "_id": "id", "_score": 11.866644, "_source": { "subject": "5xxが....", "url": "https://subdomain.zendesk.com/agent/tickets/ticket_id" } }, { "_index": "IndexName", "_type": "TypeName", "_id": "11988", "_score": 11.810463, "_source": { "subject": "ELBアラート...", "url": "https://subdomain.zendesk.com/agent/tickets/ticket_id" } }, [...]
まとめ
Amazon Elasticsearch Serviceを使うことで検索をカスタマイズすることが可能になります。 今回はZendeskのデータをAmazon Elasticsearch Serviceへデータを自動でアップロードする方法をご紹介しました。
ではまた。