Integrazioni

Webhook (Stringhe)

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 gli eventi webhook non vengono attivati da caricamenti di file o importazioni automatiche tramite:

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

Risposta del 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 verrà 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 è stata inviata la risposta HTTP.

Integrità della richiesta del 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:create 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 unito.

comments:create

È stato aggiunto un commento a una chiave di traduzione.

custom_metadata_values:batch_update

Il valore di un campo di metadati personalizzati è stato aggiornato in più chiavi.

custom_metadata_values:update

Il valore di un campo di 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 della lingua è stata creata in un progetto.

locales:delete

Una versione della lingua è stata eliminata.

locales:update

Una versione della lingua è stata modificata, rinominata o riconfigurata.

project:update

Un progetto è stato modificato o riconfigurato.

releases:create

Un rilascio OTA è stato creato.

releases:delete

Un rilascio OTA è stato eliminato.

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 della lingua.

translations:deliver

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

translations:exclude

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

traduzioni:includi

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

translations:review

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

translations:unreview

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

translations:unverify

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

translations:update

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

translations:verify

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

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.

    Si apre la pagina Webhook.

  2. Fai clic su Aggiungi webhook.

    Si apre la finestra Aggiungi webhook.

  3. Fornisci i dettagli del webhook.

  4. Facoltativamente Includi rami.

  5. Clicca 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 delle richieste per l'ispezione.

Utilizzando i 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 effettuate 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 webhook come chiave.

Esempio:

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