Integraciones

Webhooks (Cadenas)

El contenido se traduce automáticamente del inglés por Phrase Language AI.

Disponible para

  • Planes Team, Professional, Business, Enterprise y Software UI/UX

Ponte en contacto con Ventas para preguntas sobre licencias.

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 recibes una llamada de retorno, responde dentro del período de tiempo de espera de 5 segundos. Para asegurar que las aplicaciones no activen accidentalmente un tiempo de espera, difiere 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 X-PhraseApp-Signature encabezado que se genera utilizando el token de verificación de webhook como secreto junto con los datos enviados en la solicitud. Verifica el origen de la solicitud calculando el digest HMAC del cuerpo de la solicitud y comparándolo con el valor en el X-PhraseApp-Signature encabezado.

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;
}

Eventos de Webhook

La estructura de cada carga útil de webhook está definida 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

branches:create

Se creó una rama.

branches:merge

Se unió una rama.

comments:create

Se añadió un comentario a una clave de traducción.

custom_metadata_values:batch_update

Se ha actualizado el valor de un campo de metadatos personalizado en múltiples claves.

custom_metadata_values:update

Se ha actualizado el valor de un campo de metadatos personalizado a nivel de clave.

jobs:complete

Se marcó un trabajo como completo.

jobs:create

Se crea un trabajo.

jobs:locale:complete

Se marcó la localización de un trabajo como completada.

jobs:locale:reopened

Se reabrió la localización de un trabajo.

jobs:locale:review:complete

Se revisó la localización de un trabajo y se marcó como completa.

jobs:locale:review:reopen

Se revisó y reabrió la localización de un trabajo.

jobs:reopened

Se reabrió un trabajo.

jobs:start

Se inició un trabajo.

jobs:update

Se actualiza un trabajo.

keys:batch_delete

Se eliminaron múltiples claves.

keys:create

Se creó una clave.

keys:delete

Se eliminó una clave.

keys:tags:batch_create

Se añadieron etiquetas a múltiples claves.

keys:tags:create

Se añadió una etiqueta a una clave.

keys:update

Se renombró o cambió una clave.

locales:create

Se creó una nueva versión del idioma en un proyecto.

locales:delete

Se eliminó una versión del idioma.

locales:update

Se cambió, renombró o reconfiguró una versión del idioma.

project:update

Se cambió o reconfiguró un proyecto.

releases:create

Se ha creado una versión OTA.

releases:delete

Se ha eliminado una versión OTA.

screenshots:create

Se creó una captura de pantalla.

screenshots:delete

Se eliminó una captura de pantalla.

screenshots:update

Se cambió o renombró una captura de pantalla.

translations:batch_delete

Se ha eliminado una lista de traducciones.

translations:batch_include

Se ha incluido una lista de traducciones.

translations:batch_review

Se ha revisado una lista de traducciones.

translations:batch_unreview

Se ha desaprobado una lista de traducciones.

translations:batch_unverify

Se ha sin verificar una lista de traducciones.

translations:batch_verify

Se ha verificado una lista de traducciones.

translations:create

Se ha añadido una traducción de una clave en una versión de idioma determinada.

translations:deliver

Se ha entregado una traducción de una clave en una versión de idioma determinada por un proveedor de servicios de idiomas.

translations:exclude

Se ha excluido una traducción de una clave en una versión de idioma determinada.

translations:include

Se ha incluido una traducción de una clave en una versión de idioma determinada.

translations:review

Se ha revisado una traducción de una clave en una versión de idioma determinada.

translations:unreview

Se ha desaprobado una traducción de una clave en una versión de idioma determinada.

translations:unverify

Se ha sin verificar una traducción de una clave en una versión de idioma determinada.

translations:update

Se editó la traducción de una clave en una versión de idioma determinada.

translations:verify

Se verificó la traducción de una clave en una versión de idioma determinada.

uploads:create

Un archivo de localización se procesó con éxito.

uploads:processing

Un archivo de localización está siendo procesado.

Agregar un Webhook

Para agregar un webhook, sigue estos pasos:

  1. Desde la página Integraciones, desplázate hacia abajo hasta Webhooks y haz clic en Configurar.

    Se abre la página Webhooks.

  2. Haz clic en Agregar webhook.

    Se abre la ventana Agregar webhook.

  3. Proporciona los detalles del webhook.

  4. Opcionalmente Incluir ramas.

  5. Haz clic en Guardar. El webhook especificado se agrega a la lista en la página Webhooks.

Un webhook se puede desactivar desde el menú Más de un webhook específico.

Probar un Webhook

Para probar un webhook:

  • Desde la página Webhooks, selecciona un webhook y selecciona Enviar notificación de prueba del menú Más.

    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.

Usando datos de webhook

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 event, message y sent_at siempre estarán incluidos, 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, usando 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",
    "position": "Desarrollador Principal",
    "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"
  }
}
¿Fue útil este artículo?

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.