Integrazioni

Webhook (Strings)

Contenuti tradotti automaticamente dall'inglese con Phrase Language AI.

Disponibile per

  • Piani Team, Professional, Business ed Enterprise

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

I webhook avvisano servizi esterni come client di chat o altre API esterne in caso 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.

keys:creare, keys:aggiornare, translations:creare e translations:aggiornare Gli eventi webhook non vengono attivati da file uploads o importazioni automatizzate tramite:

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

Risposta webhook

Un endpoint webhook deve restituire un codice di stato HTTP nell'intervallo 200–299 entro 5 secondi dalla ricezione di una richiamata. Altri codici di stato e timeout di richiesta sono considerati come errori di consegna. Un webhook verrà disattivato se la consegna non riesce per più di 10 eventi consecutivi. Le chiamate non vengono ripetute.

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

Integrità richiesta webhook

Ogni richiesta webhook include un'intestazione X-PhraseApp-Signature che viene generata utilizzando il token di verifica webhook come chiave privata 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:

Rubino

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

Nome evento

Descrizione

branches:create

È stato creato un branch.

branches:merge

Un branch è stato unito.

comments:create

È stato aggiunto un commento su una chiave di traduzione.

custom_metadata_values:batch_update

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

custom_metadata_values:update

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

jobs:complete

Un lavoro è stato contrassegnato come Completa.

jobs:create

Viene creato un lavoro.

jobs:locale:complete

Le impostazioni locali di un lavoro sono state contrassegnate come completate.

jobs:locale:reopened

Le impostazioni locali di un lavoro sono state riaperte.

jobs:locale:review:complete

Le impostazioni locali di un lavoro sono state revisionate e contrassegnate come Completa.

jobs:locale:review:reopen

Le impostazioni locali di un lavoro sono state revisionate e riaperte.

jobs:reopened

Un lavoro è stato riaperto.

jobs:start

E' iniziato un lavoro.

jobs:update

Un lavoro viene aggiornato.

keys:batch_delete

Le chiavi multiple sono state eliminate.

keys:create

È stata creata una chiave.

keys:delete

Una chiave è stata eliminata.

keys:update

Una chiave è stata rinominata o modificata.

locales:create

È stata creata una nuova versione di lingua in un progetto.

locales:delete

Una versione in lingua è stata eliminata.

locales:update

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

project:update

Un progetto è stato modificato o riconfigurato.

releases:create

È stata creata una versione OTA.

releases:delete

Una versione 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

È stato eliminato un elenco di traduzioni.

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 verificate.

translations:batch_verify

È stato verificato un elenco di traduzioni.

translations:create

È stata aggiunta la traduzione di una chiave in una determinata versione lingua.

translations:deliver

La traduzione di una chiave in una determinata versione lingua è stata consegnata da un fornitore di servizio lingua.

translations:review

È stata revisionato una traduzione di una chiave in una determinata versione lingua.

translations:unreview

Una traduzione di una chiave in una determinata versione lingua non veniva revisionata.

translations:unverify

La traduzione di una chiave in una determinata versione lingua non verificato.

translations:update

È stata modificata la traduzione di una chiave in una determinata versione lingua.

translations:verify

È stata verificato la traduzione di una chiave in una determinata versione lingua.

uploads:create

Un file impostazioni locali è stato elaborato correttamente.

uploads:processing

Un file impostazioni locali è in elaborazione.

Aggiungi un webhook

Per aggiungere un webhook, segui i passaggi riportati di seguito:

  1. Dalla pagina Integrazioni, scorri verso il basso fino ai 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 dettagli webhook.

  4. Facoltativamente, includi branch.

  5. Fai clic su Salva. Al webhook specificato viene aggiunto l'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 dei Webhook, seleziona un webhook e seleziona Invia notifica di prova dal menu Altro.

    Viene visualizzato un avviso indicante che il test è andato a buon fine.

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

Utilizzo dei dati webhook

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

Intestazioni risposta

Le richieste HTTP effettuate all'URL di richiamata conterranno diverse intestazioni speciali.

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

  • Firma X-PhraseApp: il digest esadecimale HMAC del payload, usando la chiave privata dell'hook.

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