-
Equipo, Profesional, Negocio, Empresa y Planes de UI/UX de Software
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 APIs 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 son activados por cargas de archivos o importaciones automatizadas a través de:
Hay un período de retención de 30 días para el historial de webhooks.
Respuesta del webhook
Un endpoint de webhook debe devolver un código de estado HTTP en el rango de 200–299 dentro de los 5 segundos de recibir una llamada de retorno. 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 llamadas de retorno no se repiten.
Si recibe una llamada de retorno, responda dentro del período de tiempo de espera de 5 segundos. Para asegurar que las aplicaciones no activen accidentalmente un tiempo de espera, difiera el procesamiento hasta después de que se haya enviado la respuesta HTTP.
Integridad de la solicitud del webhook
Cada solicitud de webhook incluye un encabezado X-PhraseApp-Signature que se genera utilizando el token de verificación del 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.
ramas: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 agregó un comentario a una clave de traducción. |
|
|
Se ha actualizado el valor de un campo de metadatos personalizado en múltiples claves. |
|
|
Se ha actualizado el valor de un campo de metadatos personalizado a nivel de clave. |
|
|
Un trabajo fue marcado como completo. |
|
|
Se crea un trabajo. |
|
|
Una localización de un trabajo fue marcada como completada. |
|
|
Una localización de un trabajo fue reabierta. |
|
|
Una localización de un trabajo fue revisada y marcada como completa. |
|
|
Una localización de un trabajo fue revisada y reabierta. |
|
|
Un trabajo fue reabierto. |
|
|
Un trabajo fue iniciado. |
|
|
Un trabajo se actualiza. |
|
|
Se eliminaron múltiples claves. |
|
|
Se creó una clave. |
|
|
Se eliminó una clave. |
|
|
Se añadieron etiquetas a múltiples 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 no ha sido verificada. |
|
|
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 servicios 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 no fue verificada. |
|
|
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 fue procesado con éxito. |
|
|
Un archivo de localización está siendo procesado. |
Para agregar un webhook, sigue estos pasos:
-
Desde la página , desplázate hacia abajo hasta y haz clic en Configurar.
Se abre la página .
-
Haz clic en Agregar webhook.
Se abre la ventana .
-
Proporciona los detalles del webhook.
-
Opcionalmente .
-
Haz clic en Guardar. El webhook especificado se agrega a la lista en la página .
Un webhook se puede desactivar desde el menú de un webhook específico.
Para probar un webhook:
-
Desde la página , selecciona un webhook y selecciona Enviar Notificación de Prueba desde el menú .
Se presenta un aviso indicando que la prueba fue exitosa.
Usa un servicio como RequestBin para capturar el contenido de un webhook. RequestBin proporciona una URL que recopila datos de solicitud para inspección.
Se envía una solicitud POST a la URL de callback 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 evento, mensaje y enviado_en siempre se incluirán, junto con atributos adicionales relevantes para el evento como el usuario, proyecto y rama 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 digest hex HMAC de la carga útil, 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 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",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "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",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "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}"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}