-
Planes Team, Professional, Business, Enterprise y Software UI/UX
Ponte en contacto con el equipo de ventas para preguntar por nuestros planes.
Los webhooks 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 webhooks.
Respuesta de webhook
Un punto de conexión de webhook debe devolver un código de estado HTTP en el rango de 200 a 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 errores 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 un encabezado X-PhraseApp-Signature que se genera utilizando el token de verificación de webhook como secreto junto con los datos enviados en la solicitud. Verifique el origen de la solicitud calculando el resumen HMAC del cuerpo de la solicitud y comparándolo con el valor en el encabezado 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:create 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 comentario en una clave de traducción. |
|
|
Se ha actualizado un valor de campo de metadatos personalizado en varias claves. |
|
|
Se ha actualizado un valor de campo de metadatos personalizado a nivel de clave. |
|
|
Se marcó un trabajo como completado. |
|
|
Se crea un trabajo. |
|
|
Se marcó una configuración regional de un trabajo como completada. |
|
|
Se volvió a abrir una configuración regional de un trabajo. |
|
|
Se revisó y marcó como completada una configuración regional de un trabajo. |
|
|
Se revisó y volvió a abrir una configuración regional de un trabajo. |
|
|
Se volvió a abrir un trabajo. |
|
|
Se inició un trabajo. |
|
|
Se actualiza un trabajo. |
|
|
Se vincula una clave secundaria a una clave principal. |
|
|
Se desvincula una clave secundaria de una clave principal. |
|
|
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 cambió o renombró 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. |
|
|
Se ha marcado como no revisada una lista de traducciones. |
|
|
Se ha marcado como no verificada una lista de traducciones. |
|
|
Se ha verificado una lista de traducciones. |
|
|
Se ha añadido una traducción de una clave en una determinada versión de idioma. |
|
|
Un proveedor de servicios lingüísticos ha entregado una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha excluido una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha incluido una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha revisado una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha marcado como no revisada una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha marcado como no verificada una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha editado una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha verificado una traducción de una clave en una determinada versión de idioma. |
|
|
Se ha procesado correctamente un archivo de configuración regional. |
|
|
Se está procesando un archivo de configuración regional. |
Para añadir un webhook, sigue estos pasos:
-
Desde la página , desplázate hacia abajo hasta y haz clic en Configure.
Se abre la página .
-
Haz clic en Add webhook.
Se abre la ventana .
-
Proporciona los detalles del webhook.
-
Opcionalmente .
-
Haz clic en Guardar. El webhook especificado se añade a la lista en la página .
Un webhook puede desactivarse desde el menú de un webhook específico.
Para probar un webhook:
-
Desde la página , selecciona un webhook y elige Send Test-Notification en el menú .
Se presenta un aviso que indica que la prueba fue exitosa.
Utilice 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 callback especificada cada vez que ocurre un evento del tipo especificado. El payload 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 user, project y branch desde el cual se activó el webhook.
Encabezados de respuesta
Las solicitudes HTTP realizadas a la URL de callback contendrán varios encabezados especiales.
-
X-PhraseApp-Event El tipo de evento que activó el webhook.
-
X-PhraseApp-Signature El resumen hexadecimal HMAC de la carga útil, utilizando el secreto del webhook como clave.
Ejemplo:
Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123
{
"event": "translations:create",
"message": "Peter tradujo page.help.title en fr.",
"sent_at": "2015-01-29T09:52:53Z"
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"email": "joe@phrase.com",
Posición "Desarrollador principal",
Creado el "2015-01-28T09:52:53Z",
Actualizado en "2015-01-28T09:52:53Z"
},
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "Mi proyecto de Android",
"main_format": "xml",
"project_image_url": "http://assets.phrase.com/project.png",
"account": "account",
Creado el "2015-01-28T09:52:53Z",
Actualizado en "2015-01-28T09:52:53Z"
},
"branch": {
"name": "branch_name"
},
"translation": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "Mi traducción",
"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}"
Creado el "2015-01-28T09:52:53Z",
Actualizado en "2015-01-28T09:52:53Z"
}
}