-
Equipe, Profissional, Negócio, Empresa e Planos de UI/UX de Software
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:
Há 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 callback. Outros códigos de status e timeouts de requisição são considerados falhas de entrega. Um webhook será desativado se a entrega falhar por mais de 10 eventos consecutivos. Callbacks não são repetidos.
Se receber um callback, responda dentro do período de timeout de requisição de 5 segundos. Para garantir que as aplicações não acionem acidentalmente um timeout, adie o processamento até que a resposta HTTP tenha sido enviada.
Integridade da requisição do webhook
Cada requisição de webhook inclui um cabeçalho X-PhraseApp-Signature que é gerado usando o token de verificação do webhook como um segredo junto com os dados enviados na requisição. Verifique a origem da requisição computando o digest HMAC do corpo da requisição e comparando-o ao 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 |
|---|---|
|
|
Um ramo foi criado. |
|
|
Um ramo foi mesclado. |
|
|
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 completo. |
|
|
Um trabalho é criado. |
|
|
Um local de um trabalho foi marcado como concluído. |
|
|
Um local de um trabalho foi reaberto. |
|
|
Um local de um trabalho foi revisado e marcado como completo. |
|
|
Um local de um trabalho foi revisado e reaberto. |
|
|
Um trabalho foi reaberto. |
|
|
Um trabalho foi iniciado. |
|
|
Um trabalho é atualizado. |
|
|
Várias chaves foram excluídas. |
|
|
Uma chave foi criada. |
|
|
Uma chave foi deletada. |
|
|
Tags foram adicionadas a várias 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 deletada. |
|
|
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 deletada. |
|
|
Uma captura de tela foi criada. |
|
|
Uma captura de tela foi deletada. |
|
|
Uma captura de tela foi alterada ou renomeada. |
|
|
Uma lista de traduções foi deletada. |
|
|
Uma lista de traduções foi incluída. |
|
|
Uma lista de traduções foi revisada. |
|
|
Uma lista de traduções não foi revisada. |
|
|
Uma lista de traduções não foi verificada. |
|
|
Uma lista de traduções foi verificada. |
|
|
Uma tradução de uma chave em uma certa versão de idioma foi adicionada. |
|
|
Uma tradução de uma chave em uma certa versão de idioma foi entregue por um provedor de serviços de idioma. |
|
|
Uma tradução de uma chave em uma certa versão de idioma foi excluída. |
|
|
Uma tradução de uma chave em uma certa versão de idioma foi incluída. |
|
|
Uma tradução de uma chave em uma certa versão de idioma foi revisada. |
|
|
Uma tradução de uma chave em uma certa versão de idioma não foi revisada. |
|
|
Uma tradução de uma chave em uma certa versão de idioma não foi verificada. |
|
|
Uma tradução de uma chave em uma certa versão de idioma foi editada. |
|
|
Uma tradução de uma chave em uma certa 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 RequestBin para capturar o conteúdo de um webhook. RequestBin fornece uma URL que coleta dados de solicitação para inspeção.
Uma solicitação POST é enviada para a URL de callback especificada cada vez 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 evento, mensagem e enviado_em sempre serão incluídos, junto com atributos adicionais relevantes para o evento, como o usuário, projeto e ramo de onde o webhook foi acionado.
Cabeçalhos de resposta
As solicitações HTTP feitas para a URL de callback conterão vários cabeçalhos especiais.
-
X-PhraseApp-Event: O tipo de evento que acionou o webhook. -
X-PhraseApp-Signature: O digest hex HMAC da carga útil, usando o segredo do hook como a 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",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "Meu Projeto Android",
"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": "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}"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}