-
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 webhook.
Resposta de webhook
Um endpoint de webhook deve retornar um código de estado HTTP na faixa de 200–299 dentro de 5 segundos após receber um callback. Outros códigos de estado 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. Callbacks não são repetidos.
Ao receber um callback, responda dentro do período de tempo limite de solicitação de 5 segundos. Para garantir que as aplicações 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 de webhook como um segredo junto com os dados enviados na solicitação. Verificar 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:criar 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 comentar em uma chave de Phrase 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 Concluir. |
|
|
Um trabalho é criar. |
|
|
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 Concluir. |
|
|
Um local de um trabalho foi revisado e reaberto. |
|
|
Um trabalho foi reaberto. |
|
|
Um trabalho foi iniciado. |
|
|
Um trabalho é atualizado. |
|
|
Múltiplas chaves foram excluídas. |
|
|
Uma chave foi Criar. |
|
|
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 Criar 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. |
|
|
Um lançamento OTA foi criado. |
|
|
Um lançamento OTA foi excluído. |
|
|
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 revisado. |
|
|
Uma lista de traduções não foi revisada. |
|
|
Uma lista de traduções não foi verificada. |
|
|
Uma lista de traduções foi verificado. |
|
|
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 responsável de serviço de idioma. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma foi Excluir. |
|
|
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 revisado. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma não foi revisada. |
|
|
Uma tradução de uma chave em uma determinada versão de idioma não foi 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 verificado. |
|
|
Um arquivo de local foi processado com sucesso. |
|
|
Um arquivo de local está sendo processado. |
Para adicionar um webhook, siga estas etapas:
-
Na página , role para baixo até e clique em Configure.
A página abre.
-
Clique em adicionar webhook.
A janela abre.
-
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 , Selecionar um webhook e Selecionar Enviar notificação de teste no menu .
Um aviso é apresentado indicando que o teste foi bem-sucedido.
Usar um serviço como 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 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 event, message e sent_at sempre serão incluídos, juntamente com atributos adicionais relevantes para o evento, como o usuário, projeto e ramo a partir do qual 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 a chave.
Exemplo:
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"
}
}