-
Planes Team, Professional, Business, Enterprise y Software UI/UX
Ponte en contacto con el equipo de ventas para preguntar por nuestros planes.
Los webhook notifican a servicios externos, como clientes de chat u otras API externas, sobre eventos. Un webhook puede establecer una URL cuando ocurre un evento específico.
Importante
Las cargas de archivos solo activan los eventos de webhook uploads:create y uploads:processing.
Los eventos de webhook keys:create, keys:update, translations:create y translations:update no se activan mediante cargas de archivos o importaciones automatizadas a través de:
Existe un período de retención de 30 días para el historial de webhook.
Respuesta de webhook
Un endpoint de webhook debe devolver un código de estado HTTP en el rango 200–299 en un plazo de 5 segundos tras recibir una devolución de llamada. Otros códigos de estado y tiempos de espera de solicitud se consideran fallos de entrega. Un webhook se desactivará si la entrega falla durante más de 10 eventos consecutivos. Las devoluciones de llamada no se repiten.
Si recibe una devolución de llamada, responda dentro del período de tiempo de espera de solicitud de 5 segundos. Para asegurarse de que las aplicaciones no activen accidentalmente un tiempo de espera, aplace el procesamiento hasta después de que se haya enviado la respuesta HTTP.
Integridad de la solicitud de webhook
Cada solicitud de webhook incluye una cabecera X-PhraseApp-Signature que se genera utilizando el identificador único (token) de verificación de webhook como secreto junto con los datos enviados en la solicitud. Verificar el origen de la solicitud calculando el resumen HMAC del cuerpo de la solicitud y comparándolo con el valor en la cabecera X-PhraseApp-Signature.
Ejemplos:
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;
}
La estructura de cada carga útil de webhook se define en un archivo de esquema disponible en https://app.phrase.com/webhook_schemas/<event_underscored_name>.json donde <event_underscored_name> corresponde al nombre del evento de webhook con guiones bajos.
branches:crear se puede acceder a través de https://app.phrase.com/webhook_schemas/branches_create.json
|
Nombre del evento |
Descripción |
|---|---|
|
|
Se creó una rama. |
|
|
Se fusionó una rama. |
|
|
Se añadió un comentar en una clave de traducción. |
|
|
Se ha actualizado un valor de campo de metadatos Personalizar en varias claves. |
|
|
Se ha actualizado un valor de campo de metadatos Personalizar en el nivel de clave. |
|
|
Un trabajo se marcó como Completar. |
|
|
Se crea un trabajo. |
|
|
Una localización de un trabajo se marcó como completada. |
|
|
Se volvió a abrir una localización de un trabajo. |
|
|
Una localización de un trabajo fue revisado y se marcó como Completar. |
|
|
Una localización de un trabajo fue revisado y se volvió a abrir. |
|
|
Un trabajo se volvió a abrir. |
|
|
Se inició un trabajo. |
|
|
Se actualiza un trabajo. |
|
|
Se eliminaron varias claves. |
|
|
Se creó una clave. |
|
|
Se eliminó una clave. |
|
|
Se añadieron etiquetas a varias claves. |
|
|
Se añadieron etiquetas a una clave. |
|
|
Se renombró o cambió una clave. |
|
|
Se creó una nueva versión de idioma en un proyecto. |
|
|
Se eliminó una versión de idioma. |
|
|
Se cambió, renombró o reconfiguró una versión de idioma. |
|
|
Se cambió o reconfiguró un proyecto. |
|
|
Se ha creado una versión OTA. |
|
|
Se ha eliminado una versión OTA. |
|
|
Se creó una captura de pantalla. |
|
|
Se eliminó una captura de pantalla. |
|
|
Se cambió o renombró una captura de pantalla. |
|
|
Se ha eliminado una lista de traducciones. |
|
|
Se ha incluido una lista de traducciones. |
|
|
Se ha revisado una lista de traducciones. |
|
|
Una lista de traducciones no ha sido revisada. |
|
|
Una lista de traducciones está sin verificar. |
|
|
Una lista de traducciones ha sido verificada. |
|
|
Se agregó una traducción de una clave en una versión de idioma determinada. |
|
|
Una traducción de una clave en una versión de idioma determinada fue entregada por un proveedor de servicio de idioma. |
|
|
Se excluyó una traducción de una clave en una versión de idioma determinada. |
|
|
Se incluyó una traducción de una clave en una versión de idioma determinada. |
|
|
Se revisó una traducción de una clave en una versión de idioma determinada. |
|
|
Una traducción de una clave en una versión de idioma determinada no fue revisada. |
|
|
Una traducción de una clave en una versión de idioma determinada está sin verificar. |
|
|
Se editó una traducción de una clave en una versión de idioma determinada. |
|
|
Se verificó una traducción de una clave en una versión de idioma determinada. |
|
|
Un archivo de localización se procesó correctamente. |
|
|
Se está procesando un archivo de localización. |
Para agregar un webhook, siga estos pasos:
-
Desde la página , desplácese hacia abajo hasta y haga clic en Configure.
Se abre la página .
-
Haz clic en agregar webhook.
Se abre la ventana .
-
Proporcione los detalles del webhook.
-
Opcionalmente .
-
Haz clic en guardar. El webhook especificado se agrega a la lista en la página s.
Un webhook puede desactivarse desde el menú de un webhook específico.
Para probar un webhook:
-
Desde la página s, Seleccionar un webhook y Seleccionar Enviar notificación de prueba desde el menú .
Se presenta un aviso indicando que la prueba fue exitosa.
usar un servicio como RequestBin para capturar el contenido de un webhook. RequestBin proporciona una URL que recopila datos de solicitud para su inspección.
Se envía una solicitud POST a la URL de devolución de llamada especificada cada vez que ocurre un evento del tipo especificado. La carga útil POST de la solicitud es un documento codificado en JSON con datos relevantes para el evento. Los atributos event, message y sent_at siempre se incluirán, junto con atributos adicionales relevantes para el evento, como el usuario, proyecto y rama desde donde se activó el webhook.
Encabezados de respuesta
Las solicitudes HTTP realizadas a la URL de devolución de llamada contendrán varios encabezados especiales.
-
X-PhraseApp-Event: El tipo de evento que activó el webhook. -
X-PhraseApp-Signature: El resumen hexadecimal HMAC del payload, utilizando el secreto del hook como clave.
Ejemplo:
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"
}
}