Integraciones

Webhooks (Strings)

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

Disponible para

  • Planes Team, Professional, Business y Enterprise

Ponte en contacto con el equipo de ventas para preguntar por nuestros planes.

Los webhooks notifican eventos a servicios externos como clientes de chat u otras API externas. Un webhook puede establecer una URL cuando ocurre un evento específico.

Importante

File uploads only trigger the uploads:crear and uploads:processing webhook events.

keys:crear, keys:actualizar, translations:crear y translations:actualizar eventos webhook no se activan por uploads de archivos o importaciones automatizadas a través de:

Hay un período de retención de 30 días para el historial webhook.

Respuesta webhook

Un extremo webhook debe devolver un código de estado HTTP en el rango 200–299 dentro de los 5 segundos de recibir una rellamada. 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 llamadas no se repiten.

Si recibe una rellamada, responda dentro del período de tiempo de espera de la solicitud de 5 segundos. Para garantizar que las aplicaciones no activan un tiempo de espera accidentalmente, aplace el procesamiento hasta después de que se haya enviado la respuesta HTTP.

Integridad de la solicitud webhook

Cada solicitud webhook incluye un encabezado de firma X-PhraseApp que se genera utilizando como secreto el identificador único (token) de verificación webhook junto con los datos enviados en la solicitud. Verificar el origen de la solicitud calculando el compendio de HMAC del organismo solicitante y comparándolo con el valor del encabezado de la firma X-PhraseApp.

Ejemplos:

Rubí

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 webhook

Nombre del evento

Descripción

branches:create

Se creó una rama.

branches:merge

Se fusionó una rama.

comments:create

Se agregó un comento sobre una clave de traducción.

custom_metadata_values:batch_update

Se actualizó un valor de campo de metadatos personalizado en varias claves.

custom_metadata_values:update

Se actualizó un valor de campo de metadatos personalizado a nivel de clave.

jobs:complete

Un trabajo se marcó como Completado.

jobs:create

Se crea un trabajo.

jobs:locale:complete

La localización de un trabajo se marcó como completada.

jobs:locale:reopened

Se reabrió la localización de un trabajo.

jobs:locale:review:complete

La localización del trabajo fue revisada y marcada como Completada.

jobs:locale:review:reopen

La localización del trabajo fue revisada y reabierta.

jobs:reopened

Se reabrió un trabajo.

jobs:start

Se inició un trabajo.

jobs:update

Un trabajo se actualiza.

keys:batch_delete

Se han eliminado varias claves.

keys:create

Se creó una clave.

keys:delete

Se eliminó una clave.

keys:update

Una clave fue renombrada o cambiada.

locales:create

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

locales:delete

Se eliminó una versión idioma.

locales:update

Se cambió, renombró o reconconfiguró una versión idioma.

project:update

Un proyecto fue cambiado o reconfigurado.

releases:create

Se creó 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_review

Una lista de traducciones ha sido revisada.

translations:batch_unreview

No se ha revisado la 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 añadió una traducción de una clave en una versión de un idioma determinado.

translations:deliver

Un proveedor de servicios de idiomas entregó una traducción de una clave en una determinada versión del idioma.

translations:review

Una traducción de una clave en una determinada versión del idioma fue revisada.

translations:unreview

No se revisó una traducción de una clave en una versión de un determinado idioma.

translations:unverify

Una traducción de una clave en una determinada versión del idioma estaba sin verificar.

translations:update

Se editó una traducción de una clave en una versión de un determinado idioma.

translations:verify

Una traducción de una clave en una versión de un determinado idioma fue verificada.

uploads:create

Se ha procesado correctamente un archivo de localización.

uploads:processing

Se está procesando un archivo de localización.

Agregar un webhook

Para agregar un webhook, sigue estos pasos:

  1. Desde la página Integraciones , ve 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 detalles webhook.

  4. Opcionalmente, Incluir ramas.

  5. Haz clic en Guardar. Al webhook especificado se le añade la lista de la página Webhooks.

Un webhook se puede desactivar desde el menú More de un webhook específico.

Probar un webhook

Para probar un webhook:

  • En la página Webhooks, selecciona un webhook y selecciona Enviar notificación de prueba en el menú More.

    Se presenta un aviso indicando que la prueba tuvo éxito.

Usa un servicio como RequestBin para capturar el contenido de un webhook. RequestBin proporciona una URL que recopila los datos de solicitud para su inspección.

Uso de webhooks Data

Se envía una solicitud POST a la URL de rellamada especificada cada vez que ocurre un evento del tipo especificado. La carga útil POST de la solicitud es un documento codificado con JSON con datos relevantes para el evento. Siempre se incluirán los atributos evento y mensaje, junto con atributos adicionales relevantes para el evento, como el usuario, proyecto y rama desde la que se activó el webhook.

Encabezados de respuesta

Las solicitudes HTTP realizadas a la URL de rellamada contendrán varios encabezados especiales.

  • X-PhraseApp-Event: El tipo de evento que activó el webhook.

  • Firma X-PhraseApp: el resumen hexagonal HMAC de la carga útil, usando el secreto del gancho 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.",
  "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"
  }
}
¿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.