APIGatewayでZendeskのチケット内容をChatworkに投稿する
ベルリンの半瀬です。
はじめに
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チケットの内容と起票者、起票時間が記載されます。
APIGatewayを準備
APIGatewayからLambda関数を起動します。
以下を参考に設定。
- 初めてのAPI Gateway - Developers.IO
- (初心者向け)APIGatewayとLambdaの導入事例について話してきました - Developers.IO
- Amazon API Gateway – API作成から動作確認までやってみる - Developers.IO
詳細は割愛します。
Zendesk拡張機能を準備
外部ターゲットへの通知 - Zendesk
を参考に、拡張機能「HTTPターゲット」を使って、APIGatewayにjsonをpostするような設定を行います。
※設定画面
↑「URL」箇所にAPIGatewayのパスを記載。
Zendeskトリガーを準備
Zendeskで以下のjsonを渡すように設定します。
{ "apiKey": "<任意のユーザーで発行されたChatworkAPIキー>", "roomId": "<通知させたいChatwork部屋>", "title": "<おこのみで>", "description": "{{ticket.description}}" }
以下のZendeskプレースホルダをうまく使って、通知を見やすくすると良いかとおもいます。
- {{ticket.id}}
- {{ticket.title}}
- {{ticket.link}}
※設定画面
あとはお好みでトリガーの実行条件を整えて完成です。
さいごに
トリガーとうまく組み合わせて、更新があった場合に特定の人にChatwork通知させたり、いろいろなことができそうです。
次回はBacklogへの投稿をやってみます。
それではー。