-
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;
}
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 |
|---|---|
|
|
Un ramo è stato creato. |
|
|
Un ramo è stato fuso. |
|
|
Un commento su una chiave di traduzione è stato aggiunto. |
|
|
Un valore del campo metadati personalizzati è stato aggiornato in più chiavi. |
|
|
Un valore del campo 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 linguistica è stata creata in un progetto. |
|
|
Una versione linguistica è stata eliminata. |
|
|
Una versione linguistica è stata modificata, rinominata o riconfigurata. |
|
|
Un progetto è stato modificato o riconfigurato. |
|
|
È stata creata una versione OTA. |
|
|
È stata eliminata una versione OTA. |
|
|
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 linguistica. |
|
|
Una traduzione di una chiave in una certa versione della lingua è stata consegnata da un fornitore di servizi linguistici. |
|
|
Una traduzione di una chiave in una certa versione della lingua è 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 non è stata revisionata. |
|
|
Una traduzione di una chiave in una certa versione della lingua non è stata 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. |
|
|
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.
La pagina si apre.
-
Fai clic su Aggiungi webhook.
La finestra si apre.
-
Fornisci i dettagli del webhook.
-
Facoltativamente .
-
Fai clic 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 della richiesta 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 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"
}
}