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

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

ベルリンの半瀬です。

はじめに

Zendeskのチケット内容をchatworkに投稿したかったので、APIGateway経由でlambdaを叩いて投稿するアクションを作りました。

やったこと

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

Lambdaファンクションを準備

pythonで用意します。

from __future__ import print_function

import pycurl
from urllib import urlencode

def lambda_handler(event, context):
    apiKey = str(event['apiKey'])
    roomId = str(event['roomId'])
    title = event['title']
    description = event['description']

    token = 'X-ChatWorkToken:' + apiKey
    data = {
        "body": '[info][title]' + title + '[/title]' + description + '[/info]'
    }
    postfields = urlencode(data)
    url = 'https://api.chatwork.com/v1/rooms/' + roomId + '/messages'

    c = pycurl.Curl()
    c.setopt(pycurl.URL, url)
    c.setopt(pycurl.HTTPHEADER, [token])
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.POSTFIELDS, postfields)

    c.perform()
    c.close()
    
    print(url)
    print(data)

指定された 「roomId(チャットワークルームID)」 に対して、「apiKey(Chatwork APIキー)」で、APIによる投稿を行うというものです。通知形式は、サンプルではinfoの形式をとっていますが、「body」箇所を調整することで、どのような投稿でも可能です。

※投稿画面サンプル(Chatwork)↓
info形式で、タイトルにZendeskチケットのURL、本文にZendeskチケットの内容と起票者、起票時間が記載されます。
20160608-02

APIGatewayを準備

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

詳細は割愛します。

Zendesk拡張機能を準備

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

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

Zendeskトリガーを準備

Zendeskで以下のjsonを渡すように設定します。

{
 "apiKey": "<任意のユーザーで発行されたChatworkAPIキー>",
 "roomId": "<通知させたいChatwork部屋>",
 "title": "<おこのみで>",
 "description": "{{ticket.description}}"
}

以下のZendeskプレースホルダをうまく使って、通知を見やすくすると良いかとおもいます。

  • {{ticket.id}}
  • {{ticket.title}}
  • {{ticket.link}}

※設定画面
20160608-03

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

さいごに

トリガーとうまく組み合わせて、更新があった場合に特定の人にChatwork通知させたり、いろいろなことができそうです。
次回はBacklogへの投稿をやってみます。

それではー。