統合機能

ウェブフック(文字列)

本コンテンツはPhrase Language AIの機械翻訳により、英語から翻訳されています。

利用可能対象

  • チーム、プロフェッショナル、ビジネス、エンタープライズ、ソフトウェアUI/UXプラン

ライセンスに関する質問は、営業担当までお問い合わせください。

ウェブフックは、チャットクライアントや他の外部APIなどの外部サービスにイベントを通知します。特定のイベントが発生したときに、ウェブフックはURLを設定できます。

注意

ファイルのアップロードは、uploads:createおよびuploads:processingウェブフックイベントのみをトリガーします。

keys:createkeys:updatetranslations: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:createhttps://app.phrase.com/webhook_schemas/branches_create.jsonを介してアクセスできます。

イベント名

項目

branches:create

ブランチが作成されました。

branches:merge

ブランチがマージされました。

comments:create

翻訳キーにコメントが追加されました。

custom_metadata_values:batch_update

カスタムメタデータフィールドの値が複数のキーで更新されました。

custom_metadata_values:update

カスタムメタデータフィールドの値がキーのレベルで更新されました。

jobs:complete

ジョブが完了としてマークされました。

jobs:create

ジョブが作成されました。

jobs:locale:complete

ジョブのロケールが完了としてマークされました。

jobs:locale:reopened

ジョブのロケールが再オープンされました。

jobs:locale:review:complete

ジョブのロケールがレビューされ、完了としてマークされました。

jobs:locale:review:reopen

ジョブのロケールがレビューされ、再オープンされました。

jobs:reopened

ジョブが再オープンされました。

jobs:start

ジョブが開始されました。

jobs:update

ジョブが更新されました。

keys:batch_delete

複数のキーが削除されました。

keys:create

キーが作成されました。

keys:delete

キーが削除されました。

keys:tags:batch_create

複数のキーにタグが追加されました。

keys:tags:create

キーにタグが追加されました。

keys:update

キーが名前変更または変更されました。

locales:create

プロジェクトに新しい言語バージョンが作成されました。

locales:delete

言語バージョンが削除されました。

locales:update

言語バージョンが変更、名前変更、または再構成されました。

project:update

プロジェクトが変更または再構成されました。

releases:create

OTAリリースが作成されました。

releases:delete

OTAリリースが削除されました。

screenshots:create

スクリーンショットが作成されました。

screenshots:delete

スクリーンショットが削除されました。

screenshots:update

スクリーンショットが変更または名前が変更されました。

translations:batch_delete

翻訳の一覧が削除されました。

translations:batch_include

翻訳の一覧が含まれました。

translations:batch_review

翻訳の一覧がレビュー済みです。

translations:batch_unreview

翻訳の一覧が未レビューです。

translations:batch_unverify

翻訳の一覧が未検証です。

translations:batch_verify

翻訳の一覧が検証済みです。

translations:create

特定の言語バージョンのキーの翻訳が追加されました。

translations:deliver

特定の言語バージョンのキーの翻訳が言語サービスプロバイダによって提供されました。

translations:exclude

特定の言語バージョンのキーの翻訳が除外されました。

translations:include

特定の言語バージョンのキーの翻訳が含まれました。

translations:review

特定の言語バージョンのキーの翻訳がレビュー済みです。

translations:unreview

特定の言語バージョンのキーの翻訳が未レビューです。

translations:unverify

特定の言語バージョンのキーの翻訳が未検証です。

translations:update

特定の言語バージョンのキーの翻訳が編集されました。

translations:verify

特定の言語バージョンのキーの翻訳が検証されました。

uploads:create

ロケールファイルが正常に処理されました。

uploads:processing

ロケールファイルが処理中です。

ウェブフックを追加する

ウェブフックを追加するには、次の手順に従ってください:

  1. 統合ページから、ウェブフックまでスクロールし、設定をクリックします。

    ウェブフックページが開きます。

  2. ウェブフックを追加をクリックします。

    ウェブフックを追加ウィンドウが開きます。

  3. ウェブフックの詳細を提供してください。

  4. オプションでブランチを含める

  5. 保存をクリックします。指定されたウェブフックがウェブフックページのリストに追加されます。

ウェブフックは、特定のウェブフックのその他メニューから無効にできます。

ウェブフックをテストする

ウェブフックをテストするには:

  • ウェブフックページから、ウェブフックを選択し、テスト通知を送信その他メニューから選択します。

    テストが成功したことを示す通知が表示されます。

RequestBinのようなサービスを使用して、ウェブフックの内容をキャプチャします。RequestBinは、リクエストデータを検査するために収集するURLを提供します。

ウェブフックデータの使用

指定されたタイプのイベントが発生するたびに、指定されたコールバックURLにPOSTリクエストが送信されます。リクエストのPOSTペイロードは、イベントに関連するデータを含むJSONエンコードされたドキュメントです。属性eventmessage、および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"
  }
}
この記事は役に立ちましたか?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.