网络钩子将事件通知外部服务,如聊天客户端或其他外部 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; }
事件名称 |
说明 |
---|---|
|
分支已创建。 |
|
分支已合并。 |
|
添加了翻译键备注。 |
|
自定义义元数据字段值在多个键中已更新。 |
|
键级别已更新自定义元数据字段值。 |
|
工作被标记为完成。 |
|
工作已创建。 |
|
工作的某个区域标记为已完成。 |
|
工作的区域已重新打开。 |
|
工作的区域已审校并标记为完成。 |
|
工作的区域已审校并重新打开。 |
|
重新打开工作。 |
|
工作已开始。 |
|
工作已更新。 |
|
已删除多个键。 |
|
键已创建。 |
|
键已删除。 |
|
键已重命名或更改。 |
|
在项目中创建了新语言版本。 |
|
语言版本已删除。 |
|
语言版本已更改、重命名或重新配置。 |
|
项目已更改或重新配置。 |
|
OTA 版本已创建。 |
|
OTA 版本已被删除。 |
|
截图已创建。 |
|
截图已删除。 |
|
截图已更改或重命名。 |
|
翻译列表已被删除。 |
|
翻译列表已审校。 |
|
未审校的翻译列表。 |
|
翻译列表尚未验证。 |
|
翻译列表已验证。 |
|
添加了特定语言版本的键翻译。 |
|
语言服务商交付了特定语言版本的键的翻译。 |
|
已审校某个语言版本的键的翻译。 |
|
未审校特定语言版本的键翻译。 |
|
未验证某个语言版本的键的翻译。 |
|
编辑了某个语言版本的键的翻译。 |
|
已验证某个语言版本的键的翻译。 |
|
已成功处理区域文件。 |
|
正在处理区域文件。 |
要添加 webhook,请按照以下步骤操作:
webhook 可以从特定 webhook 的
菜单中停用。测试 webhook:
使用 RequestBin 等服务捕获 webhook 的内容。RequestBin 提供收集请求数据以供检查的 URL。
每次发生指定类型的事件时,都会向指定的回调 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" } }