この記事は公開されてから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チケットの内容と起票者、起票時間が記載されます。
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への投稿をやってみます。
それではー。