Integrações

webhook (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 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;
}

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.

Nome do evento

Descrição

branches:create

Um ramo foi criado.

branches:merge

Um ramo foi mesclado.

comments:create

Um comentar em uma chave de Phrase 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 Concluir.

jobs:create

Um trabalho é criar.

jobs:locale:complete

Um local de um trabalho foi marcado como concluído.

jobs:locale:reopened

Um local de um trabalho foi reaberto.

jobs:locale:review:complete

Um local de um trabalho foi revisado e marcado como Concluir.

jobs:locale:review:reopen

Um local de um trabalho foi revisado e reaberto.

jobs:reopened

Um trabalho foi reaberto.

jobs:start

Um trabalho foi iniciado.

jobs:update

Um trabalho é atualizado.

keys:batch_delete

Múltiplas chaves foram excluídas.

keys:create

Uma chave foi Criar.

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 Criar 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

Um lançamento OTA foi criado.

releases:delete

Um lançamento OTA foi excluído.

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 revisado.

translations:batch_unreview

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

translations:batch_unverify

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

translations:batch_verify

Uma lista de traduções foi verificado.

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 responsável de serviço de idioma.

translations:exclude

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

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 revisado.

translations:unreview

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

translations:unverify

Uma tradução de uma chave em uma determinada versão de idioma não foi 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 verificado.

uploads:create

Um arquivo de local foi processado com sucesso.

uploads:processing

Um arquivo de local está sendo processado.

adicionar um webhook

Para adicionar um webhook, siga estas etapas:

  1. Na página Integrations, role para baixo até Webhooks e clique em Configure.

    A página Webhooks abre.

  2. Clique em adicionar webhook.

    A janela adicionar webhook abre.

  3. Forneça os detalhes do webhook.

  4. Opcionalmente Incluir ramos.

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

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

Testar um webhook

Para testar um webhook:

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

    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.

Usando dados de webhook

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"
  }
}
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.