APIGatewayでZendeskのチケット内容をBacklogに投稿する

API Gateway

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ベルリンの半瀬です。

はじめに

前回に引き続いて、Zendesk、APIGateway、Lambdaの記事です。今回は Zendeskのチケット内容をBacklogに投稿してみます。

やったこと

  • Lambdaファンクションを準備
  • APIGatewayを準備
  • Zendesk拡張機能を準備
  • Zendeskトリガーを設定

Lambdaファンクションを準備

pythonで用意します。

from __future__ import print_function

import requests
import datetime
from pytz import timezone

def lambda_handler(event, context):
    duedate = datetime.datetime.now(timezone('Asia/Tokyo')) + datetime.timedelta(days=1)
    url = event['Uri']
    headers = {
        "Content-Type": event['HeaderContentType']
    }
    params = {
        "apiKey": event['apiKey'],
        "projectId": event['projectId'],
        "issueTypeId": event['issueTypeId'],
        "assigneeId": event['assigneeId'],
        "priorityId": event['priorityId'],
        "dueDate": duedate.strftime('%Y-%m-%d'),
        "summary": event['summary'],
        "description": event['description'],
    }
    
    req = requests.post(url, headers=headers, params=params)
    res = req.content
    print(res)
    return res

dueDate(Backlogの期限日)」をファンクション側で指定している以外は、基本的に(Zendesk)トリガーから渡されるjsonに依存します。

※投稿画面サンプル(Backlog)↓
Baclogチケット「詳細」に、Zendeskチケットの内容が入ります。また、件名も合わせています。
期限日は登録日の翌日です。
20160609-01

APIGatewayを準備

APIGatewayからLambda関数を起動します。
以下を参考に設定します。

詳細は割愛します。

Zendesk拡張機能を準備

外部ターゲットへの通知 - Zendesk
を参考に、拡張機能「HTTPターゲット」を使って、APIGatewayにjsonをpostするような設定を行います。

※設定画面
20160609-02
「URL」箇所にAPIGatewayのパスを記載。

Zendeskトリガーを準備

トリガー設定で以下のjsonを渡すように設定します。

{
  "HeaderContentType": "application/x-www-form-urlencoded",
  "Uri": "https://XXXXX.backlog.jp/api/v2/issues",
  "apiKey": "<任意のbacklogユーザーで発行されたBacklog APIキー>",
  "projectId": "<投稿したいbacklogプロジェクトID>",
  "issueTypeId": "<任意のbacklogチケットタイプID>",
  "assigneeId": "<アサインされる担当者ID>",
  "priorityId": "<優先度>",
  "summary": "{{ticket.title}}",
  "description": "{{ticket.description}}"
}

IDは適宜調べておきましょう。
今回はチケットタイプIDや、初期アサインする担当者を固定する必要があったので、項目を作っています。必要に応じてLambda関数と、トリガーで渡すjsonを調整すると良いかと思います。
※参考Backlog API とは - nulab Developers
※Zendesk設定画面
20160609-03

あとはお好みでトリガーの実行条件を整えて完成です。

さいごに

プログラミングには余り慣れていないのでpythonで少しつまったのですが、パパッと書いて乗っけるだけで簡単に動いてくれるAPIGatewayとLambdaに感動していました。

それではー。

AWS Cloud Roadshow 2017 福岡