ウェブフックは、チャットクライアントや他の外部APIなどの外部サービスにイベントを通知します。特定のイベントが発生したときに、ウェブフックはURLを設定できます。
注意
ファイルのアップロードは、uploads:createおよびuploads:processingウェブフックイベントのみをトリガーします。
keys:create、keys:update、translations:createおよびtranslations:updateのウェブフックイベントは、ファイルのアップロードや自動インポートによってトリガーされません。
ウェブフックの履歴には30日間の保持期間があります。
ウェブフック応答
ウェブフックエンドポイントは、コールバックを受信してから5秒以内に200〜299のHTTPステータスコードを返す必要があります。他のステータスコードやリクエストのタイムアウトは、配信失敗と見なされます。配信が10回連続して失敗した場合、ウェブフックは無効になります。コールバックは繰り返されません。
コールバックを受信した場合は、5秒のリクエストタイムアウト期間内に応答してください。アプリケーションが誤ってタイムアウトをトリガーしないように、HTTP応答が送信された後に処理を遅延させてください。
ウェブフックリクエストの整合性
各ウェブフックリクエストには、リクエストで送信されたデータとともにウェブフック検証トークンを秘密として使用して生成されたX-PhraseApp-Signatureヘッダーが含まれています。リクエストボディのHMACダイジェストを計算し、それをX-PhraseApp-Signatureヘッダーの値と比較することでリクエストの発信元を検証します。
例:
Ruby
def verify_webhook(signatureheader)
digest = OpenSSL::Digest::Digest.new('sha256')
hmac = OpenSSL::HMAC.digest(digest, VERIFICATION_TOKEN, request.body)
hmac = Base64.encode64(hmac).strip
hmac == signatureheader
end
PHP
function verify_webhook($signatureheader){
$hmac = hash_hmac('sha256', $requestBody, $verificationToken, true);
$hmac = trim(base64_encode($hash));
return $hmac == $signatureheader;
}
各ウェブフックペイロードの構造は、https://app.phrase.com/webhook_schemas/<event_underscored_name>.jsonにあるスキーマファイルで定義されています。ここで、<event_underscored_name>はアンダースコアを含むウェブフックイベントの名前に対応します。
branches:createはhttps://app.phrase.com/webhook_schemas/branches_create.jsonを介してアクセスできます。
|
イベント名 |
項目 |
|---|---|
|
|
ブランチが作成されました。 |
|
|
ブランチがマージされました。 |
|
|
翻訳キーにコメントが追加されました。 |
|
|
カスタムメタデータフィールドの値が複数のキーで更新されました。 |
|
|
カスタムメタデータフィールドの値がキーのレベルで更新されました。 |
|
|
ジョブが完了としてマークされました。 |
|
|
ジョブが作成されました。 |
|
|
ジョブのロケールが完了としてマークされました。 |
|
|
ジョブのロケールが再オープンされました。 |
|
|
ジョブのロケールがレビューされ、完了としてマークされました。 |
|
|
ジョブのロケールがレビューされ、再オープンされました。 |
|
|
ジョブが再オープンされました。 |
|
|
ジョブが開始されました。 |
|
|
ジョブが更新されました。 |
|
|
複数のキーが削除されました。 |
|
|
キーが作成されました。 |
|
|
キーが削除されました。 |
|
|
複数のキーにタグが追加されました。 |
|
|
キーにタグが追加されました。 |
|
|
キーが名前変更または変更されました。 |
|
|
プロジェクトに新しい言語バージョンが作成されました。 |
|
|
言語バージョンが削除されました。 |
|
|
言語バージョンが変更、名前変更、または再構成されました。 |
|
|
プロジェクトが変更または再構成されました。 |
|
|
OTAリリースが作成されました。 |
|
|
OTAリリースが削除されました。 |
|
|
スクリーンショットが作成されました。 |
|
|
スクリーンショットが削除されました。 |
|
|
スクリーンショットが変更または名前が変更されました。 |
|
|
翻訳の一覧が削除されました。 |
|
|
翻訳の一覧が含まれました。 |
|
|
翻訳の一覧がレビュー済みです。 |
|
|
翻訳の一覧が未レビューです。 |
|
|
翻訳の一覧が未検証です。 |
|
|
翻訳の一覧が検証済みです。 |
|
|
特定の言語バージョンのキーの翻訳が追加されました。 |
|
|
特定の言語バージョンのキーの翻訳が言語サービスプロバイダによって提供されました。 |
|
|
特定の言語バージョンのキーの翻訳が除外されました。 |
|
|
特定の言語バージョンのキーの翻訳が含まれました。 |
|
|
特定の言語バージョンのキーの翻訳がレビュー済みです。 |
|
|
特定の言語バージョンのキーの翻訳が未レビューです。 |
|
|
特定の言語バージョンのキーの翻訳が未検証です。 |
|
|
特定の言語バージョンのキーの翻訳が編集されました。 |
|
|
特定の言語バージョンのキーの翻訳が検証されました。 |
|
|
ロケールファイルが正常に処理されました。 |
|
|
ロケールファイルが処理中です。 |
ウェブフックを追加するには、次の手順に従ってください:
-
ページから、までスクロールし、設定をクリックします。
ページが開きます。
-
ウェブフックを追加をクリックします。
ウィンドウが開きます。
-
ウェブフックの詳細を提供してください。
-
オプションで。
-
保存をクリックします。指定されたウェブフックがページのリストに追加されます。
ウェブフックは、特定のウェブフックのメニューから無効にできます。
ウェブフックをテストするには:
RequestBinのようなサービスを使用して、ウェブフックの内容をキャプチャします。RequestBinは、リクエストデータを検査するために収集するURLを提供します。
指定されたタイプのイベントが発生するたびに、指定されたコールバックURLにPOSTリクエストが送信されます。リクエストのPOSTペイロードは、イベントに関連するデータを含むJSONエンコードされたドキュメントです。属性event、message、およびsent_atは常に含まれ、ウェブフックがトリガーされたユーザー、プロジェクト、およびブランチなどのイベントに関連する追加の属性が含まれます。
レスポンスヘッダー
コールバックURLに対して行われるHTTPリクエストには、いくつかの特別なヘッダーが含まれます。
-
X-PhraseApp-Event: ウェブフックをトリガーしたイベントのタイプ。 -
X-PhraseApp-Signature: ペイロードのHMAC16進数ダイジェストで、フックの秘密をキーとして使用します。
例:
Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123
{
"event": "translations:create",
"message": "Peter translated page.help.title in fr.",
"sent_at": "2015-01-29T09:52:53Z"
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"email": "joe@phrase.com",
"position": "Lead Developer",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"project_image_url": "http://assets.phrase.com/project.png",
"account": "account",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"branch": {
"name": "branch_name"
},
"translation": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "My translation",
"unverified": false,
"excluded": false,
"plural_suffix": "",
"key": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "home.index.headline",
"plural": false
},
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE"
},
"placeholders": [
"%{count}"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}