Интеграции

Вебхуки (Strings)

Контент автоматически переведен с английского языка с помощью Phrase Language AI.

Доступно для

  • Планы Team, Professional, Business, Enterprise и Software UI/UX

Свяжитесь с отделом продаж по вопросам лицензирования.

Вебхуки уведомляют внешние службы, такие как чат-клиенты или другие внешние API, о событиях. Для вебхука можно указать URL-адрес, который будет вызван при наступлении определенного события.

Важно

Загрузка файлов запускает только события вебхука uploads:create и uploads:processing.

События вебхука keys:create, keys:update, translations:create и translations:update не запускаются при загрузке файлов или автоматизированном импорте через:

Для истории вебхуков установлен 30-дневный период хранения.

Ответ вебхука

Конечная точка вебхука должна возвращать HTTP-код состояния в диапазоне 200–299 в течение 5 секунд после получения обратного вызова. Другие коды состояния и тайм-ауты запросов считаются сбоями доставки. Вебхук будет деактивирован, если доставка не удалась более чем для 10 последовательных событий. Обратные вызовы не повторяются.

При получении обратного вызова отвечайте в течение 5-секундного периода ожидания запроса. Чтобы гарантировать, что приложения случайно не вызовут тайм-аут, отложите обработку до момента отправки HTTP-ответа.

Целостность запроса вебхука

Каждый запрос вебхука включает заголовок X-PhraseApp-Signature, который генерируется с использованием токена проверки вебхука в качестве секрета вместе с данными, отправленными в запросе. Проверяйте источник запроса путем вычисления HMAC-дайджеста тела запроса и сравнения его со значением в заголовке X-PhraseApp-Signature.

Примеры:

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

События вебхуков

Структура полезной нагрузки каждого вебхука определяется в файле схемы, доступном по адресу https://app.phrase.com/webhook_schemas/<event_underscored_name>.json, где <event_underscored_name> соответствует имени события вебхука с подчеркиваниями.

branches:create доступен по адресу https://app.phrase.com/webhook_schemas/branches_create.json

Имя события

Описание

branches:create

Ветка была создана.

branches:merge

Ветка была объединена.

comments:create

Добавлен комментарий к ключу перевода.

custom_metadata_values:batch_update

Значение пользовательского поля метаданных было обновлено в нескольких ключах.

custom_metadata_values:update

Значение пользовательского поля метаданных было обновлено на уровне ключа.

jobs:complete

Задание помечено как выполненное.

jobs:create

Задание создано.

jobs:locale:complete

Локаль задания помечена как выполненная.

jobs:locale:reopened

Локаль задания повторно открыта.

jobs:locale:review:complete

Локаль задания проверена и помечена как выполненная.

jobs:locale:review:reopen

Локаль задания проверена и повторно открыта.

jobs:reopened

Задание повторно открыто.

jobs:start

Задание запущено.

jobs:update

Задание обновлено.

key_links:create

Дочерний ключ связан с родительским ключом.

key_links:delete

Дочерний ключ отвязан от родительского ключа.

keys:batch_delete

Несколько ключей были удалены.

keys:create

Был создан ключ.

keys:delete

Ключ был удален.

keys:tags:batch_create

Теги были добавлены к нескольким ключам.

keys:tags:create

Теги были добавлены к ключу.

keys:update

Ключ был переименован или изменен.

locales:create

В проекте была создана новая языковая версия.

locales:delete

Языковая версия была удалена.

locales:update

Языковая версия была изменена, переименована или перенастроена.

project:update

Проект был изменен или перенастроен.

releases:create

Был создан OTA-релиз.

releases:delete

OTA-релиз был удален.

screenshots:create

Был создан скриншот.

screenshots:delete

Скриншот был удален.

screenshots:update

Скриншот был изменен или переименован.

translations:batch_delete

Список переводов был удален.

translations:batch_include

Список переводов был включен.

translations:batch_review

Список переводов был проверен.

translations:batch_unreview

Список переводов был помечен как непроверенный.

translations:batch_unverify

Список переводов был помечен как неподтвержденный.

translations:batch_verify

Список переводов был подтвержден.

translations:create

Был добавлен перевод ключа в определенной языковой версии.

translations:deliver

Перевод ключа в определенной языковой версии был предоставлен поставщиком языковых услуг.

translations:exclude

Перевод ключа в определенной языковой версии был исключен.

translations:include

Перевод ключа в определенной языковой версии был включен.

translations:review

Перевод ключа в определенной языковой версии был проверен.

translations:unreview

Перевод ключа в определенной языковой версии был помечен как непроверенный.

translations:unverify

Перевод ключа в определенной языковой версии был помечен как неподтвержденный.

translations:update

Перевод ключа в определенной языковой версии был отредактирован.

translations:verify

Перевод ключа в определенной языковой версии был подтвержден.

uploads:create

Файл локали был успешно обработан.

uploads:processing

Файл локали обрабатывается.

Добавить вебхук

Чтобы добавить вебхук, выполните следующие действия:

  1. На странице Integrations прокрутите вниз до Webhooks и нажмите Configure.

    Откроется страница Webhooks.

  2. Нажмите «Add webhook».

    Откроется окно «Add webhook».

  3. Укажите сведения о вебхуке.

  4. При необходимости «Include branches».

  5. Нажмите «Сохранить». Указанный вебхук добавляется в список на странице Webhooks.

Вебхук можно деактивировать в меню «More» конкретного вебхука.

Проверить вебхук

Чтобы проверить вебхук:

  • На странице Webhooks выберите вебхук и выберите «Send Test-Notification» в меню «More».

    Отображается уведомление о том, что проверка прошла успешно.

Используйте сервис, такой как RequestBin, для захвата содержимого вебхука. RequestBin предоставляет URL-адрес, который собирает данные запроса для проверки.

Использование данных вебхука

POST-запрос отправляется на указанный URL-адрес обратного вызова каждый раз, когда происходит событие указанного типа. POST-полезная нагрузка запроса представляет собой JSON-кодированный документ с соответствующими данными о событии. Атрибуты event, message и sent_at будут включены всегда, наряду с дополнительными атрибутами, относящимися к событию, такими как user, project и branch, из которых был вызван вебхук.

Заголовки ответа

HTTP-запросы, отправленные на URL-адрес обратного вызова, будут содержать несколько специальных заголовков.

  • X-PhraseApp-Event Тип события, которое вызвало вебхук.

  • X-PhraseApp-Signature Шестнадцатеричный дайджест HMAC полезной нагрузки, использующий секретный ключ хука в качестве ключа.

Например:

Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123

{
  "event": "translations:create",
  "message": "Peter перевел page.help.title на fr.",
  "sent_at": "2015-01-29T09:52:53Z"   
  "user": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "username": "joe.doe",
    "name": "Джо Доу",
    "email": "joe@phrase.com",
    Позиция «Ведущий разработчик»,
    Создана в "2015-01-28T09:52:53Z",
    "updated_at": "2015-01-28T09:52:53Z"
  },
  "project": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "name": "Мой Android проект",
    "main_format": "xml",
    "project_image_url": "http://assets.phrase.com/project.png",
    "account": "account",
    Создана в "2015-01-28T09:52:53Z",
    "updated_at": "2015-01-28T09:52:53Z"
  },
  "branch": {
  "name": "branch_name"
  },
  "translation": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "content": "Мой перевод",
    "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}"
    
    Создана в "2015-01-28T09:52:53Z",
    "updated_at": "2015-01-28T09:52:53Z"
  }
}
Была ли эта статья полезной?
★ ★ ★ ★ ★

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.