Integraciones

webhook (Strings)

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

Eventos de webhook

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

branches:create

Se creó una rama.

branches:merge

Se fusionó una rama.

comments:create

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

custom_metadata_values:batch_update

Se ha actualizado un valor de campo de metadatos Personalizar en varias claves.

custom_metadata_values:update

Se ha actualizado un valor de campo de metadatos Personalizar en el nivel de clave.

jobs:complete

Un trabajo se marcó como Completar.

jobs:create

Se crea un trabajo.

jobs:locale:complete

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

jobs:locale:reopened

Se volvió a abrir una localización de un trabajo.

jobs:locale:review:complete

Una localización de un trabajo fue revisado y se marcó como Completar.

jobs:locale:review:reopen

Una localización de un trabajo fue revisado y se volvió a abrir.

jobs:reopened

Un trabajo se volvió a abrir.

jobs:start

Se inició un trabajo.

jobs:update

Se actualiza un trabajo.

keys:batch_delete

Se eliminaron varias claves.

keys:create

Se creó una clave.

keys:delete

Se eliminó una clave.

keys:tags:batch_create

Se añadieron etiquetas a varias claves.

keys:tags:create

Se añadieron etiquetas a una clave.

keys:update

Se renombró o cambió una clave.

locales:create

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

locales:delete

Se eliminó una versión de idioma.

locales:update

Se cambió, renombró o reconfiguró una versión de 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

Una lista de traducciones no ha sido revisada.

translations:batch_unverify

Una lista de traducciones está sin verificar.

translations:batch_verify

Una lista de traducciones ha sido verificada.

translations:create

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

translations:deliver

Una traducción de una clave en una versión de idioma determinada fue entregada por un proveedor de servicio de idioma.

translations:Excluir

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

translations:include

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

translations:review

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

translations:unreview

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

translations:unverify

Una traducción de una clave en una versión de idioma determinada está sin verificar.

translations:update

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

translations:verify

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

uploads:create

Un archivo de localización se procesó correctamente.

uploads:processing

Se está procesando un archivo de localización.

Agregar un webhook

Para agregar un webhook, siga estos pasos:

  1. Desde la página Integrations, desplácese hacia abajo hasta Webhooks y haga clic en Configure.

    Se abre la página Webhooks.

  2. Haz clic en agregar webhook.

    Se abre la ventana agregar webhook.

  3. Proporcione 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 puede desactivarse desde el menú Más de un webhook específico.

Probar un webhook

Para probar un webhook:

  • Desde la página webhooks, Seleccionar un webhook y Seleccionar Enviar notificación de prueba desde el menú Más.

    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.

usar datos de webhook

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"
  }
}
¿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.