-
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;
}
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 |
|---|---|
|
|
Un ramo è stato creato. |
|
|
Un ramo è stato unito. |
|
|
È stato aggiunto un commento a una chiave di traduzione. |
|
|
Il valore di un campo di metadati personalizzati è stato aggiornato in più chiavi. |
|
|
Il valore di un campo di metadati personalizzati è stato aggiornato a livello di chiave. |
|
|
Un lavoro è stato contrassegnato come completato. |
|
|
Un lavoro è creato. |
|
|
Una impostazione locale di un lavoro è stata contrassegnata come completata. |
|
|
Una impostazione locale di un lavoro è stata riaperta. |
|
|
Una impostazione locale di un lavoro è stata revisionata e contrassegnata come completata. |
|
|
Una impostazione locale di un lavoro è stata revisionata e riaperta. |
|
|
Un lavoro è stato riaperto. |
|
|
Un lavoro è stato avviato. |
|
|
Un lavoro è aggiornato. |
|
|
Più chiavi sono state eliminate. |
|
|
Una chiave è stata creata. |
|
|
Una chiave è stata eliminata. |
|
|
I tag sono stati aggiunti a più chiavi. |
|
|
I tag sono stati aggiunti a una chiave. |
|
|
Una chiave è stata rinominata o modificata. |
|
|
Una nuova versione della lingua è stata creata in un progetto. |
|
|
Una versione della lingua è stata eliminata. |
|
|
Una versione della lingua è stata modificata, rinominata o riconfigurata. |
|
|
Un progetto è stato modificato o riconfigurato. |
|
|
Un rilascio OTA è stato creato. |
|
|
Un rilascio OTA è stato eliminato. |
|
|
Uno screenshot è stato creato. |
|
|
Uno screenshot è stato eliminato. |
|
|
Uno screenshot è stato modificato o rinominato. |
|
|
Un elenco di traduzioni è stato eliminato. |
|
|
Un elenco di traduzioni è stato incluso. |
|
|
Un elenco di traduzioni è stato revisionato. |
|
|
Un elenco di traduzioni non è stato revisionato. |
|
|
Un elenco di traduzioni non è stato verificato. |
|
|
Un elenco di traduzioni è stato verificato. |
|
|
È stata aggiunta una traduzione di una chiave in una certa versione della lingua. |
|
|
Una traduzione di una chiave in una certa versione della lingua è stata fornita da un fornitore di servizi linguistici. |
|
|
È stata esclusa una traduzione di una chiave in una certa versione della lingua. |
|
|
È stata inclusa una traduzione di una chiave in una certa versione della lingua. |
|
|
È stata revisionata una traduzione di una chiave in una certa versione della lingua. |
|
|
È stata non revisionata una traduzione di una chiave in una certa versione della lingua. |
|
|
È stata non verificata una traduzione di una chiave in una certa versione della lingua. |
|
|
È stata modificata una traduzione di una chiave in una certa versione della lingua. |
|
|
È stata verificata una traduzione di una chiave in una certa versione della lingua. |
|
|
Un file locale è stato elaborato con successo. |
|
|
Un file locale è in fase di elaborazione. |
Per aggiungere un webhook, segui questi passaggi:
-
Dalla pagina , scorri verso il basso fino a e fai clic su Configura.
Si apre la pagina .
-
Fai clic su Aggiungi webhook.
Si apre la finestra .
-
Fornisci i dettagli del webhook.
-
Facoltativamente .
-
Clicca su Salva. Il webhook specificato è stato aggiunto all'elenco nella pagina .
Un webhook può essere disattivato dal menu di un webhook specifico.
Per testare un webhook:
-
Dalla pagina , seleziona un webhook e seleziona Invia Notifica di Test dal menu .
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.
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"
}
}