Integrações

Webhooks (Strings)

O conteúdo de toda a Central de Ajuda é traduzido automaticamente de inglês pelo Phrase Language AI.

Disponível para

  • 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;
}

Eventos de webhook

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

branches:create

Uma branch foi criada.

branches:merge

Uma branch foi mesclada.

comments:create

Um comentário em uma chave de tradução foi adicionado.

custom_metadata_values:batch_update

Um valor de campo de metadados personalizado foi atualizado em várias chaves.

custom_metadata_values:update

Um valor de campo de metadados personalizado foi atualizado no nível da chave.

jobs:complete

Um trabalho foi marcado como concluído.

jobs:create

Um trabalho é criado.

jobs:locale:complete

Uma localidade de um trabalho foi marcada como concluída.

jobs:locale:reopened

Uma localidade de um trabalho foi reaberta.

jobs:locale:review:complete

Uma localidade de um trabalho foi revisada e marcada como concluída.

jobs:locale:review:reopen

Uma localidade de um trabalho foi revisada e reaberta.

jobs:reopened

Um trabalho foi reaberto.

jobs:start

Um trabalho foi iniciado.

jobs:update

Um trabalho é atualizado.

key_links:create

Uma chave filha foi vinculada a uma chave pai.

key_links:delete

Uma chave filha foi desvinculada de uma chave pai.

keys:batch_delete

Múltiplas chaves foram excluídas.

keys:create

Uma chave foi criada.

keys:delete

Uma chave foi excluída.

keys:tags:batch_create

Tags foram adicionadas a múltiplas chaves.

keys:tags:create

Tags foram adicionadas a uma chave.

keys:update

Uma chave foi renomeada ou alterada.

locales:create

Uma nova versão de idioma foi criada em um projeto.

locales:delete

Uma versão de idioma foi excluída.

locales:update

Uma versão de idioma foi alterada, renomeada ou reconfigurada.

project:update

Um projeto foi alterado ou reconfigurado.

releases:create

Uma versão OTA foi criada.

releases:delete

Uma versão OTA foi excluída.

screenshots:create

Uma captura de tela foi criada.

screenshots:delete

Uma captura de tela foi excluída.

screenshots:update

Uma captura de tela foi alterada ou renomeada.

translations:batch_delete

Uma lista de traduções foi excluída.

translations:batch_include

Uma lista de traduções foi incluída.

translations:batch_review

Uma lista de traduções foi revisada.

translations:batch_unreview

Uma lista de traduções foi marcada como não revisada.

translations:batch_unverify

Uma lista de traduções foi marcada como não verificada.

translations:batch_verify

Uma lista de traduções foi verificada.

translations:create

Uma tradução de uma chave em uma determinada versão de idioma foi adicionada.

translations:deliver

Uma tradução de uma chave em uma determinada versão de idioma foi entregue por um provedor de serviços linguísticos.

translations:exclude

Uma tradução de uma chave em uma determinada versão de idioma foi excluída.

translations:include

Uma tradução de uma chave em uma determinada versão de idioma foi incluída.

translations:review

Uma tradução de uma chave em uma determinada versão de idioma foi revisada.

translations:unreview

Uma tradução de uma chave em uma determinada versão de idioma foi marcada como não revisada.

translations:unverify

Uma tradução de uma chave em uma determinada versão de idioma foi marcada como não verificada.

translations:update

Uma tradução de uma chave em uma determinada versão de idioma foi editada.

translations:verify

Uma tradução de uma chave em uma determinada versão de idioma foi verificada.

uploads:create

Um arquivo de localidade foi processado com sucesso.

uploads:processing

Um arquivo de localidade está sendo processado.

Adicionar um Webhook

Para adicionar um webhook, siga estas etapas:

  1. Na página Integrações, role para baixo até Webhooks e clique em Configurar.

    A página Webhooks é aberta.

  2. Clique em Adicionar webhook.

    A janela Adicionar webhook é aberta.

  3. Forneça os detalhes do webhook.

  4. Opcionalmente, Inclua branches.

  5. Clique em Gravar. O webhook especificado é adicionado à lista na página Webhooks.

Um webhook pode ser desativado no menu Mais de um webhook específico.

Testar um Webhook

Para testar um webhook:

  • Na página Webhooks, selecione um webhook e selecione Enviar notificação de teste no menu Mais.

    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.

Usando dados de Webhook

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"
  }
}
Esse artigo foi útil?
★ ★ ★ ★ ★

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.