Integrazioni

Webhooks (Strings)

Contenuti tradotti automaticamente dall'inglese con Phrase Language AI.

Disponibile per

  • Team, Professionale, Business, Enterprise e piani UI/UX Software

Mettiti in contatto con il reparto vendite per dubbi relativi alle licenze.

I Webhook notificano servizi esterni come client di chat o altre API esterne di eventi. Un webhook può impostare un URL quando si verifica un evento specifico.

Importante

Il caricamento di file attiva solo gli eventi webhook uploads:create e uploads:processing.

chiavi:creare, chiavi:aggiornare, traduzioni:creare e traduzioni:aggiornare eventi webhook non sono attivati da caricamenti di file o importazioni automatiche tramite:

C'è un periodo di conservazione di 30 giorni per la cronologia dei webhook.

Risposta Webhook

Un endpoint webhook deve restituire un codice di stato HTTP nell'intervallo 200–299 entro 5 secondi dalla ricezione di un callback. Altri codici di stato e timeout delle richieste sono considerati fallimenti di consegna. Un webhook sarà disattivato se la consegna fallisce per più di 10 eventi consecutivi. I callback non vengono ripetuti.

Se si riceve un callback, rispondere entro il periodo di timeout della richiesta di 5 secondi. Per garantire che le applicazioni non attivino accidentalmente un timeout, rimandare l'elaborazione fino a dopo che la risposta HTTP è stata inviata.

Integrità della richiesta Webhook

Ogni richiesta webhook include un'intestazione X-PhraseApp-Signature che viene generata utilizzando il token di verifica del webhook come segreto insieme ai dati inviati nella richiesta. Verificare l'origine della richiesta calcolando il digest HMAC del corpo della richiesta e confrontandolo con il valore nell'intestazione X-PhraseApp-Signature.

Esempi:

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

Eventi Webhook

La struttura di ciascun payload webhook è definita in un file di schema disponibile su https://app.phrase.com/webhook_schemas/<event_underscored_name>.json dove <event_underscored_name> corrisponde al nome dell'evento webhook con underscore.

branches:creare può essere accessibile tramite https://app.phrase.com/webhook_schemas/branches_create.json

Nome dell'evento

Descrizione

branches:create

Un ramo è stato creato.

branches:merge

Un ramo è stato fuso.

comments:create

Un commento su una chiave di traduzione è stato aggiunto.

custom_metadata_values:batch_update

Un valore del campo metadati personalizzati è stato aggiornato in più chiavi.

custom_metadata_values:update

Un valore del campo metadati personalizzati è stato aggiornato a livello di chiave.

jobs:complete

Un lavoro è stato contrassegnato come completato.

jobs:create

Un lavoro è creato.

jobs:locale:complete

Una impostazione locale di un lavoro è stata contrassegnata come completata.

jobs:locale:reopened

Una impostazione locale di un lavoro è stata riaperta.

jobs:locale:review:complete

Una impostazione locale di un lavoro è stata revisionata e contrassegnata come completata.

jobs:locale:review:reopen

Una impostazione locale di un lavoro è stata revisionata e riaperta.

jobs:reopened

Un lavoro è stato riaperto.

jobs:start

Un lavoro è stato avviato.

jobs:update

Un lavoro è aggiornato.

keys:batch_delete

Più chiavi sono state eliminate.

keys:create

Una chiave è stata creata.

keys:delete

Una chiave è stata eliminata.

keys:tags:batch_create

I tag sono stati aggiunti a più chiavi.

chiavi:tag:Crea

I tag sono stati aggiunti a una chiave.

keys:update

Una chiave è stata rinominata o modificata.

locales:create

Una nuova versione linguistica è stata creata in un progetto.

locales:delete

Una versione linguistica è stata eliminata.

locales:update

Una versione linguistica è stata modificata, rinominata o riconfigurata.

project:update

Un progetto è stato modificato o riconfigurato.

releases:create

È stata creata una versione OTA.

releases:delete

È stata eliminata una versione OTA.

screenshots:create

Uno screenshot è stato creato.

screenshots:delete

Uno screenshot è stato eliminato.

screenshots:update

Uno screenshot è stato modificato o rinominato.

translations:batch_delete

Un elenco di traduzioni è stato eliminato.

translations:batch_include

Un elenco di traduzioni è stato incluso.

translations:batch_review

Un elenco di traduzioni è stato revisionato.

translations:batch_unreview

Un elenco di traduzioni non è stato revisionato.

translations:batch_unverify

Un elenco di traduzioni non è stato verificato.

translations:batch_verify

Un elenco di traduzioni è stato verificato.

translations:create

È stata aggiunta una traduzione di una chiave in una certa versione linguistica.

translations:deliver

Una traduzione di una chiave in una certa versione della lingua è stata consegnata da un fornitore di servizi linguistici.

translations:exclude

Una traduzione di una chiave in una certa versione della lingua è stata esclusa.

traduzioni:includi

Una traduzione di una chiave in una certa versione della lingua è stata inclusa.

translations:review

Una traduzione di una chiave in una certa versione della lingua è stata revisionata.

translations:unreview

Una traduzione di una chiave in una certa versione della lingua non è stata revisionata.

translations:unverify

Una traduzione di una chiave in una certa versione della lingua non è stata verificata.

translations:update

Una traduzione di una chiave in una certa versione della lingua è stata modificata.

translations:verify

Una traduzione di una chiave in una certa versione della lingua è stata verificata.

uploads:create

Un file locale è stato elaborato con successo.

uploads:processing

Un file locale è in fase di elaborazione.

Aggiungi un Webhook

Per aggiungere un webhook, segui questi passaggi:

  1. Dalla pagina Integrazioni, scorri verso il basso fino a Webhook e fai clic su Configura.

    La pagina Webhook si apre.

  2. Fai clic su Aggiungi webhook.

    La finestra Aggiungi webhook si apre.

  3. Fornisci i dettagli del webhook.

  4. Facoltativamente Includi rami.

  5. Fai clic su Salva. Il webhook specificato è stato aggiunto all'elenco nella pagina Webhook.

Un webhook può essere disattivato dal menu Altro di un webhook specifico.

Testa un Webhook

Per testare un webhook:

  • Dalla pagina Webhook, seleziona un webhook e seleziona Invia Notifica di Test dal menu Altro.

    Viene presentato un avviso che indica che il test è stato eseguito con successo.

Usa un servizio come RequestBin per catturare i contenuti di un webhook. RequestBin fornisce un URL che raccoglie i dati della richiesta per l'ispezione.

Utilizzo dei Dati del Webhook

Una richiesta POST viene inviata all'URL di callback specificato ogni volta che si verifica un evento del tipo specificato. Il payload POST della richiesta è un documento JSON codificato con i dati pertinenti per l'evento. Gli attributi evento, messaggio e inviato_a saranno sempre inclusi, insieme ad attributi aggiuntivi pertinenti all'evento come il utente, progetto e branch da cui è stato attivato il webhook.

Intestazioni di risposta

Le richieste HTTP inviate all'URL di callback conterranno diverse intestazioni speciali.

  • X-PhraseApp-Event: Il tipo di evento che ha attivato il webhook.

  • X-PhraseApp-Signature: Il digest esadecimale HMAC del payload, utilizzando il segreto del hook come chiave.

Esempio:

Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123

{
  "event": "translations:create",
  "message": "Peter ha tradotto 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"
  }
}
Questo articolo ti è stato utile?

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.