Integrazioni

Webhook (Strings)

Contenuti tradotti automaticamente dall'inglese con Phrase Language AI.

Disponibile per

  • Piani Team, Professional, Business, Enterprise e Software UI/UX

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

Le notifiche webhook avvisano servizi esterni come client di chat o altre API esterne degli 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.

Gli eventi webhook keys:create, keys:update, translations:create e translations:update non vengono attivati da caricamenti di file o importazioni automatizzate mediante:

È previsto 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 errori di consegna. Un webhook verrà disattivato se la consegna fallisce per più di 10 eventi consecutivi. I callback non vengono ripetuti.

Se ricevi un callback, rispondi entro il periodo di timeout della richiesta di 5 secondi. Per assicurarti che le applicazioni non attivino accidentalmente un timeout, posticipa l'elaborazione a dopo l'invio della risposta HTTP.

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. Verifica 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 ogni payload del webhook è definita in un file di schema disponibile all'indirizzo https://app.phrase.com/webhook_schemas/<event_underscored_name>.json, dove <event_underscored_name> corrisponde al nome dell'evento webhook con underscore.

branches:create è accessibile tramite https://app.phrase.com/webhook_schemas/branches_create.json

Nome evento

Descrizione

branches:create

È stato creato un branch.

branches:merge

È stato unito un branch.

comments:create

È stato aggiunto un commento a una chiave di traduzione.

custom_metadata_values:batch_update

Un valore di campo di metadati personalizzato è stato aggiornato in più chiavi.

custom_metadata_values:update

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

jobs:complete

Un lavoro è stato contrassegnato come completato.

jobs:create

Un lavoro viene creato.

jobs:locale:complete

Una versione linguistica di un lavoro è stata contrassegnata come completata.

jobs:locale:reopened

Una versione linguistica di un lavoro è stata riaperta.

jobs:locale:review:complete

Una versione linguistica di un lavoro è stata revisionata e contrassegnata come completata.

jobs:locale:review:reopen

Una versione linguistica di un lavoro è stata revisionata e riaperta.

jobs:reopened

Un lavoro è stato riaperto.

jobs:start

Un lavoro è stato avviato.

jobs:update

Un lavoro viene aggiornato.

key_links:create

Una chiave subordinata è collegata a una chiave principale.

key_links:delete

Una chiave subordinata è stata scollegata da una chiave principale.

keys:batch_delete

Più chiavi sono state eliminate.

keys:create

È stata creata una chiave.

keys:delete

Una chiave è stata eliminata.

keys:tags:batch_create

Sono stati aggiunti tag a più chiavi.

keys:tags:create

Sono stati aggiunti tag a una chiave.

keys:update

Una chiave è stata rinominata o modificata.

locales:create

È stata creata una nuova versione linguistica 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 release OTA.

releases:delete

Una release OTA è stata eliminata.

screenshots:create

È stato creato uno screenshot.

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

È stato incluso un elenco di traduzioni.

translations:batch_review

È stato revisionato un elenco di traduzioni.

translations:batch_unreview

È stato non revisionato un elenco di traduzioni.

translations:batch_unverify

È stato non verificato un elenco di traduzioni.

translations:batch_verify

È stato verificato un elenco di traduzioni.

translations:create

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

translations:deliver

Una traduzione di una chiave in una determinata versione linguistica è stata consegnata da un fornitore di servizi linguistici.

translations:exclude

È stata esclusa una traduzione di una chiave in una determinata versione linguistica.

translations:include

È stata inclusa una traduzione di una chiave in una determinata versione linguistica.

translations:review

È stata revisionata una traduzione di una chiave in una determinata versione linguistica.

translations:unreview

Una traduzione di una chiave in una determinata versione linguistica non è stata revisionata.

translations:unverify

È stata non verificata una traduzione di una chiave in una determinata versione linguistica.

translations:update

È stata modificata una traduzione di una chiave in una determinata versione linguistica.

translations:verify

È stata verificata una traduzione di una chiave in una determinata versione linguistica.

uploads:create

Un file delle impostazioni locali è stato elaborato correttamente.

uploads:processing

Un file delle impostazioni locali è 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 Webhooks.

  2. Fai clic su Aggiungi webhook.

    Si apre la finestra Aggiungi webhook.

  3. Fornisci i dettagli del webhook.

  4. Facoltativamente Includi branch.

  5. Fai clic su Salva. Il webhook specificato viene aggiunto all'elenco nella pagina Webhooks.

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

Testa un webhook

Per testare un webhook:

  • Dalla pagina Webhooks, seleziona un webhook e seleziona Invia notifica di test dal menu Altro.

    Viene visualizzato un avviso che indica che il test è riuscito.

Utilizza un servizio come RequestBin per acquisire 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 codificato in JSON con i dati rilevanti per l'evento. Gli attributi event, message e sent_at saranno sempre inclusi, insieme ad attributi aggiuntivi rilevanti per l'evento come user, project e branch da cui è stato attivato il webhook.

Intestazioni di response

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, calcolato utilizzando il segreto dell'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.