SMS、E メール、DingTalk、DingTalk チャットボット、Lark による通知に加えて、Data Management DMS (DMS) はカスタム Webhook をサポートしています。
設定
Webhook を設定するには、個人設定の [Webhook] セクションに移動し、エンドポイント URL を入力して、[Webhook] 通知チャネルを選択します。
また、署名メソッドと署名キーも設定する必要があります。[Test] ボタンをクリックすると、Webhook URL の接続性を検証できます。通知設定パネルでは、[DingTalk (exclusive)]、[DingTalk]、[DingTalk chatbot]、[E メール]、[Lark]、[SMS] などの他のチャネルも選択できます。
詳細については、「個人情報と通知方法の設定」をご参照ください。
イベント
DMS で通知がトリガーされると、システムは設定済みの Webhook URL に HTTP POST リクエストを送信します。リクエストはヘッダーとボディで構成されます。
リクエストヘッダー
DMS-Event: Message Hook
リクエストボディ
|
パラメーター |
タイプ |
説明 |
|
submitterUid |
String |
リクエストを送信したユーザーの UID です。 |
|
submitterName |
String |
リクエストを送信したユーザーの名前です。 |
|
category |
String |
チケット、タスクオーケストレーション、データウェアハウス開発などの機能モジュールです。 |
|
module |
String |
権限申請、データ変更、スキーマ設計、データエクスポートなどのビジネスタイプです。 |
|
event |
String |
特定のイベントを表します。例:承認待ち、成功、失敗。 |
|
taskId |
String |
チケットまたはタスクフローの ID です。 |
|
taskName |
String |
タスクの名前です。 |
|
eventTime |
String |
イベントが発生した時刻です。 |
|
message |
String |
システム組み込みのメッセージテキストです。 |
|
targetUsers |
オブジェクトの配列 |
通知対象の受信者です。複数の受信者を指定できます。 |
|
receivers |
オブジェクトの配列 |
実際の受信者を表すオブジェクトの配列です。通知方法が設定されていないユーザーは通知を受信しません。 |
|
uid |
String |
受信者の UID です。 |
|
name |
String |
受信者の名前です。 |
|
signatureMethod |
String |
署名メソッドです。次の署名メソッドを利用できます:
|
|
signatureText |
String |
Webhook URL、署名キー、およびメッセージイベントから計算された HmacSha1 値であるデジタル署名です。例: |
リクエストボディの例
{
"messageEvent":{
"submitterName":"xxx",
"submitterUid":"167382665015xxxx",
"category":"ticket",
"event":"Succeeded",
"eventTime":1625630049930,
"message":"[Data Management DMS] Webhook test, code: 144619 ",
"module":"data change",
"receivers":[{"name":"xxx1","uid":"167382665015xxxx"},{"name":"xxx2","uid":"167382665016xxxx"}],
"targetUsers":[{"name":"xxx1","uid":"167382665015xxxx"},{"name":"xxx2","uid":"167382665016xxxx"}],
"taskName":"Webhook test"
},
"signatureMethod":"HMAC-SHA1",
"signatureText":"4mOdwflN1Cg5NdM2XPuipuCYYWk="
}
応答の例
{"root":"","success":true} // 成功
{"root":"error message","success":false} // 失敗
署名検証
署名キーを設定した場合、次のコードを使用して署名を検証します。
// 受信メッセージの署名を検証します
public void callback(String message) {
JSONObject jsonObject = JSONObject.parseObject(message, Feature.OrderedField);
String webhookUrl = "設定した Webhook URL";
String signatureKey = "設定した署名キー";
String origin = webhookUrl + signatureKey + JSON.toJSONString(jsonObject.getJSONObject("messageEvent"));
// DMS メッセージからの署名
String signatureText = jsonObject.getString("signatureText");
// ユーザー側で計算された署名
String expectedSignatureText = signatureByHmacSha1(origin, signatureKey);
assert Objects.equals(signatureText, expectedSignatureText);
}
public String signatureByHmacSha1(String origin, String key) {
final String charset = "UTF-8";
String result = "N/A";
try {
SecretKey secretKey = new SecretKeySpec(key.getBytes(charset), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
result = Base64.getEncoder().encodeToString(mac.doFinal(origin.getBytes(charset)));
} catch (Exception ex){
}
return result;
}
Webhook レシーバーの例
簡単な echo スクリプトを作成して、Webhook エンドポイントをテストし、イベントペイロードを表示できます。
-
次のスクリプトを print_http_body.rb として保存します。
require 'webrick' server = WEBrick::HTTPServer.new(:Port => ARGV.first) server.mount_proc '/' do |req, res| puts req.body end trap 'INT' do server.shutdown end server.start -
8000 などの未使用のポートを選択し、スクリプト
ruby print_http_body.rb 8000を実行します。 -
DMS コンソールで、Webhook URL (例:
http://my.host:8000/) を設定します。詳細については、「個人情報と通知方法の設定」をご参照ください。サーバーで HTTP 基本認証が必要な場合は、URL にユーザー名とパスワードを含めることができます。例:
http://userName:password@my.host:8080/project/test-job -
通知方法の変更 ダイアログボックスで、Webhook URL の横にある [Test] をクリックします。サーバーは DMS からテスト通知を受信します。
サーバーは、次のような通知を受信します:
{ "messageEvent":{ "submitterName":"xxx", "submitterUid":"167382665015xxxx", "category":"ticket", "event":"Succeeded", "eventTime":1625630049930, "message":"[Data Management DMS] Webhook test, code: 144619 ", "module":"data change", "receivers":[{"name":"xxx1","uid":"167382665015xxxx"}], "targetUsers":[{"name":"xxx1","uid":"167382665015xxxx"}], "taskName":"Webhook test" }, "signatureMethod":"HMAC-SHA1", "signatureText":"4mOdwflN1Cg5NdM2XPuipuCYYWk=" }