-
Piani Team, Professional, Business, Enterprise e Software UI/UX
Mettiti in contatto con il reparto vendite per dubbi relativi alle licenze.
I webhook notificano eventi a servizi esterni come client di chat o altre API esterne. 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:creare, keys:aggiornare, translations:creare e translations:aggiornare non vengono attivati da caricamenti di file o importazioni automatizzate tramite:
È 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 della richiesta 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 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 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 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 ogni 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 trattini bassi.
branches:create può essere accessibile tramite https://app.phrase.com/webhook_schemas/branches_create.json
|
Nome evento |
Descrizione |
|---|---|
|
|
Un branch è stato creare. |
|
|
Un branch è stato unito. |
|
|
È stato aggiunto un commentare su una chiave di traduzione. |
|
|
Un valore di campo di metadati Personalizzato è stato aggiornato in più chiavi. |
|
|
Un valore di campo di metadati Personalizzato è stato aggiornato a livello di chiave. |
|
|
Un lavoro è stato contrassegnato come Completa. |
|
|
Un lavoro viene creato. |
|
|
Un impostazioni locali di un lavoro è stato contrassegnato come completato. |
|
|
Un impostazioni locali di un lavoro è stato riaperto. |
|
|
Un impostazioni locali di un lavoro è stato revisionato e contrassegnato come Completa. |
|
|
Un impostazioni locali di un lavoro è stato revisionato e riaperto. |
|
|
Un lavoro è stato riaperto. |
|
|
Un lavoro è stato avviato. |
|
|
Un lavoro viene aggiornato. |
|
|
Più chiavi sono state eliminate. |
|
|
Una chiave è stata creare. |
|
|
Una chiave è stata eliminata. |
|
|
Sono stati aggiunti tag a più chiavi. |
|
|
Sono stati aggiunti tag a una chiave. |
|
|
Una chiave è stata rinominata o modificata. |
|
|
Una nuova lingua è stata creata in un progetto. |
|
|
Una lingua è stata eliminata. |
|
|
Una lingua è stata modificata, rinominata o riconfigurata. |
|
|
Un progetto è stato modificato o riconfigurato. |
|
|
È stata creata una release OTA. |
|
|
È stata eliminata una release OTA. |
|
|
È stato creato uno screenshot. |
|
|
È stato eliminato uno screenshot. |
|
|
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 è stato non verificato. |
|
|
Un elenco di traduzioni è stato verificato. |
|
|
È stata aggiunta una traduzione di una chiave in una determinata lingua. |
|
|
Una traduzione di una chiave in una certa lingua è stata fornita da un fornitore di servizi linguistici. |
|
|
Una traduzione di una chiave in una certa lingua è stata Escludi. |
|
|
Una traduzione di una chiave in una certa lingua è stata inclusa. |
|
|
Una traduzione di una chiave in una certa lingua è stata revisionato. |
|
|
Una traduzione di una chiave in una certa lingua non è stata revisionato. |
|
|
Una traduzione di una chiave in una certa lingua è stata non verificato. |
|
|
Una traduzione di una chiave in una certa lingua è stata modificata. |
|
|
Una traduzione di una chiave in una certa lingua è stata verificato. |
|
|
Un file di impostazioni locali è stato elaborato correttamente. |
|
|
Un file di impostazioni locali è in fase di elaborazione. |
Per aggiungere un webhook, seguire questi passaggi:
-
Dalla pagina , scorrere verso il basso fino a e fare clic su Configure.
Si apre la pagina .
-
Fare clic su Aggiungere webhook.
Si apre la finestra .
-
Fornire i dettagli del webhook.
-
Facoltativamente .
-
Fai clic su Salvare. Il webhook specificato viene aggiunto all'elenco nella pagina .
Un webhook può essere disattivato dal menu di uno specifico webhook.
Per testare un webhook:
-
Dalla pagina , Seleziona un webhook e Seleziona Send Test-notifica dal menu .
Viene presentato un avviso che indica che il test è riuscito.
Usare un servizio come RequestBin per acquisire 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 codificato in JSON con i dati pertinenti per l'evento. Gli attributi event, message e sent_at saranno sempre inclusi, insieme ad attributi aggiuntivi pertinenti all'evento come 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"
}
}