集成

网络钩子 (Strings)

文本由 Phrase Language AI 从英语机器翻译而得。

包含在

  • Team、Professional、Business 和 Enterprise 套餐中

关于许可问题,请联系销售团队

网络钩子将事件通知外部服务,如聊天客户端或其他外部 API。webhook 可以设置特定事件发生时的 URL。

重要

File uploads only=""触发uploads:创建=""和uploads:处理webhook事件""。"

keys:创建,=%keys:更新,=%翻译:创建=%和=""翻译:更新"";"webhook 事件不会通过文件 uploads 或自动导入触发,方法是:

webhook 历史记录有 30 天的保留期。

webhook 响应

webhook 端点必须在收到回调后的 5 秒内返回一个介于 200 到 299 之间的 HTTP 状态代码。其他状态码和请求超时被视为交付失败。如果连续 10 多个事件交付失败,webhook 将被停用。回调不会重复。

如果收到回调,在 5 秒请求超时期限内响应。为确保应用程序不会意外触发超时,将处理推迟到 HTTP 响应发送之后。

webhook 请求完整性

每个 webhook 请求包括一个 X-PhraseApp-Signature 标头,该标头使用 webhook 验证令牌作为秘密与请求中发送的数据一起生成。通过计算请求正文的 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;
}

webhook 事件

事件名称

说明

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: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_review

翻译列表已审校。

translations:batch_unreview

未审校的翻译列表。

translations:batch_unverify

翻译列表尚未验证。

translations:batch_verify

翻译列表已验证。

translations:create

添加了特定语言版本的键翻译。

translations:deliver

语言服务商交付了特定语言版本的键的翻译。

translations:review

已审校某个语言版本的键的翻译。

translations:unreview

未审校特定语言版本的键翻译。

translations:unverify

未验证某个语言版本的键的翻译。

translations:update

编辑了某个语言版本的键的翻译。

translations:verify

已验证某个语言版本的键的翻译。

uploads:create

已成功处理区域文件。

uploads:processing

正在处理区域文件。

添加 webhook

要添加 webhook,请按照以下步骤操作:

  1. 集成页面,向下滚动到网络钩子,然后单击配置

    网络钩子页面打开。

  2. 单击添加 webhook

    添加 webhook 窗口打开。

  3. 提供 webhook 详细信息。

  4. 可选包括分支

  5. 点击保存。指定的 webhook 被添加到 Webhook 页面上的列表。

webhook 可以从特定 webhook 的更多菜单中停用。

测试 webhook

测试 webhook:

  • Webhook 页面,选择一个 webhook,并从更多菜单中选择发送测试通知

    系统会显示通知,表明测试成功。

使用 RequestBin 等服务捕获 webhook 的内容。RequestBin 提供收集请求数据以供检查的 URL。

使用 webhook 数据

每次发生指定类型的事件时,都会向指定的回调 URL 发送 POST 请求。请求的 POST 有效负载是 JSON 编码的文档,其中包含事件的相关数据。始终包括属性事件消息,以及与事件相关的其他属性,例如触发 webhook 的用户项目分支

响应标题

向回调 URL 发出的 HTTP 请求将包含几个特殊的标头。

  • X-PhraseApp-Event:触发 webhook 的事件类型。

  • X-PhraseApp-Signature:以钩子的秘密为键的有效载荷的 HMAC 十六进制摘要。

例如:

Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123

{
  "event": "translations:create",
  "message": "Peter translated page.help.title in fr.",
  "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.