-
Planos Team, Professional, Business, Enterprise e Software UI/UX
Entre em contato com o departamento de Vendas para perguntas sobre o licenciamento.
Webhooks notificam serviços externos, como clientes de chat ou outras APIs externas, sobre eventos. Um webhook pode definir uma URL quando um evento específico ocorre.
Importante
Uploads de arquivos apenas acionam os eventos de webhook uploads:create e uploads:processing.
Os eventos de webhook keys:create, keys:update, translations:create e translations:update não são acionados por uploads de arquivos ou importações automatizadas via:
Existe um período de retenção de 30 dias para o histórico de webhooks.
Resposta do webhook
Um endpoint de webhook deve retornar um código de status HTTP na faixa de 200–299 dentro de 5 segundos após receber um retorno de chamada. Outros códigos de status e tempos limite de solicitação são considerados falhas de entrega. Um webhook será desativado se a entrega falhar por mais de 10 eventos consecutivos. Os retornos de chamada não são repetidos.
Ao receber um retorno de chamada, responda dentro do período de tempo limite de solicitação de 5 segundos. Para garantir que os aplicativos não acionem um tempo limite acidentalmente, adie o processamento até que a resposta HTTP tenha sido enviada.
Integridade da solicitação de webhook
Cada solicitação de webhook inclui um cabeçalho X-PhraseApp-Signature que é gerado usando o token de verificação do webhook como um segredo, juntamente com os dados enviados na solicitação. Verifique a origem da solicitação calculando o resumo HMAC do corpo da solicitação e comparando-o com o valor no cabeçalho X-PhraseApp-Signature.
Exemplos:
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;
}
A estrutura de cada payload de webhook é definida em um arquivo de esquema disponível em https://app.phrase.com/webhook_schemas/<event_underscored_name>.json onde <event_underscored_name> corresponde ao nome do evento de webhook com sublinhados.
branches:create pode ser acessado via https://app.phrase.com/webhook_schemas/branches_create.json
|
Nome do evento |
Descrição |
|---|---|
|
|
Uma branch foi criada. |
|
|
Uma branch foi mesclada. |
|
|
Um comentário em uma chave de tradução foi adicionado. |
|
|
Um valor de campo de metadados personalizado foi atualizado em várias chaves. |
|
|
Um valor de campo de metadados personalizado foi atualizado no nível da chave. |
|
|
Um trabalho foi marcado como concluído. |
|
|
Um trabalho é criado. |
|
|
Uma localidade de um trabalho foi marcada como concluída. |
|
|
Uma localidade de um trabalho foi reaberta. |
|
|
Uma localidade de um trabalho foi revisada e marcada como concluída. |
|
|
Uma localidade de um trabalho foi revisada e reaberta. |
|
|
Um trabalho foi reaberto. |
|
|
Um trabalho foi iniciado. |
|
|
Um trabalho é atualizado. |
|
|
Uma chave filha foi vinculada a uma chave pai. |
|
|
Uma chave filha foi desvinculada de uma chave pai. |
|
|
Múltiplas chaves foram excluídas. |
|
|
Uma chave foi criada. |
|
|
Uma chave foi excluída. |
|
|
Tags foram adicionadas a múltiplas chaves. |
|
|
Tags foram adicionadas a uma chave. |
|
|
Uma chave foi renomeada ou alterada. |
|
|
Uma nova versão de idioma foi criada em um projeto. |
|
|
Uma versão de idioma foi excluída. |
|
|
Uma versão de idioma foi alterada, renomeada ou reconfigurada. |
|
|
Um projeto foi alterado ou reconfigurado. |
|
|
Uma versão OTA foi criada. |
|
|
Uma versão OTA foi excluída. |
|
|
Uma captura de tela foi criada. |
|
|
Uma captura de tela foi excluída. |
|
|
Uma captura de tela foi alterada ou renomeada. |
|
|
Uma lista de traduções foi excluída. |
|
|
Uma lista de traduções foi incluída. |
|
|
Uma lista de traduções foi revisada. |
|
|
Uma lista de traduções foi marcada como não revisada. |
|
|
Uma lista de traduções foi marcada como não verificada. |
|
|
Uma lista de traduções foi verificada. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi adicionada. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi entregue por um provedor de serviços linguísticos. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi excluída. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi incluída. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi revisada. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi marcada como não revisada. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi marcada como não verificada. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi editada. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi verificada. |
|
|
Um arquivo de localidade foi processado com sucesso. |
|
|
Um arquivo de localidade está sendo processado. |
Para adicionar um webhook, siga estas etapas:
-
Na página , role para baixo até e clique em Configurar.
A página é aberta.
-
Clique em Adicionar webhook.
A janela é aberta.
-
Forneça os detalhes do webhook.
-
Opcionalmente, .
-
Clique em Gravar. O webhook especificado é adicionado à lista na página .
Um webhook pode ser desativado no menu de um webhook específico.
Para testar um webhook:
-
Na página , selecione um webhook e selecione Enviar notificação de teste no menu .
Uma notificação é apresentada indicando que o teste foi bem-sucedido.
Use um serviço como o RequestBin para capturar o conteúdo de um webhook. O RequestBin fornece uma URL que coleta dados de solicitação para inspeção.
Uma solicitação POST é enviada para a URL de retorno de chamada especificada sempre que um evento do tipo especificado ocorre. O payload POST da solicitação é um documento codificado em JSON com dados relevantes para o evento. Os atributos event, message e sent_at sempre serão incluídos, juntamente com atributos adicionais relevantes para o evento, como o user, project e branch a partir dos quais o webhook foi acionado.
Cabeçalhos de resposta
As solicitações HTTP feitas para a URL de retorno de chamada conterão vários cabeçalhos especiais.
-
X-PhraseApp-Event O tipo de evento que acionou o webhook.
-
X-PhraseApp-Signature O resumo hexadecimal HMAC do payload, usando o segredo do hook como chave.
Exemplo:
Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123
{
"event": "translations:create",
"message": "Peter traduziu page.help.title em fr.",
"sent_at": "2015-01-29T09:52:53Z"
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"email": "joe@phrase.com",
Posição "Desenvolvedor Líder",
Criado em "2015-01-28T09:52:53Z",
Atualizado às "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",
Criado em "2015-01-28T09:52:53Z",
Atualizado às "2015-01-28T09:52:53Z"
},
"branch": {
"name": "branch_name"
},
"translation": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "Minha tradução",
"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}"
Criado em "2015-01-28T09:52:53Z",
Atualizado às "2015-01-28T09:52:53Z"
}
}