Интеграции

Вебхуки (Строки)

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

Доступно для

  • Командные, Профессиональные, Бизнес, Корпоративные и Программные 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

Имя события

Описание

ветви:создать

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

ветви:объединить

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

комментарии:создать

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

custom_metadata_values:batch_update

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

custom_metadata_values:update

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

задания:завершить

Задание было отмечено как завершенное.

задания:создать

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

задания:языковой стандарт:завершить

Языковой стандарт задания был отмечен как завершенный.

задания:языковой стандарт:повторно открыто

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

задания:языковой стандарт:обзор:завершить

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

задания:языковой стандарт:обзор:повторное открытие

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

jobs:reopened

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

jobs:start

Задание было начато.

jobs:update

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

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:не проверено

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

translations:обновить

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

translations:подтвердить

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

uploads:Создать

Файл языкового стандарта был успешно обработан.

uploads:обработка

Файл языкового стандарта обрабатывается.

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

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

  1. На странице Интеграции прокрутите вниз до Вебхуки и нажмите Настроить.

    Открывается страница Вебхуки.

  2. Нажмите Добавить вебхук.

    Открывается окно Добавить вебхук.

  3. Укажите детали вебхука.

  4. При желании Включить ветки.

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

Вебхук можно деактивировать из меню Больше конкретного вебхука.

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

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

  • На странице Вебхуки выберите вебхук и выберите Отправить тестовое уведомление из меню Больше.

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

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

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

Каждый раз, когда происходит событие указанного типа, отправляется POST-запрос на указанный URL обратного вызова. Тело POST-запроса представляет собой документ в формате JSON с соответствующими данными для события. Атрибуты событие, сообщение и отправлено_в всегда будут включены, наряду с дополнительными атрибутами, относящимися к событию, такими как пользователь, проект и ветвь, из которой был вызван вебхук.

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

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

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

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

Пример:

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

{
  "event": "translations:create",
  "message": "Питер перевел page.help.title на fr.",
  "sent_at": "2015-01-29T09:52:53Z"   
  "user": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "username": "joe.doe",
    "name": "Джо Доу",
    "email": "joe@phrase.com",
    "position": "Ведущий разработчик",
    "created_at": "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": "учетная запись",
    "created_at": "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": ""
    "ключ": {
      "id": "abcd1234cdef1234abcd1234cdef1234",
      "name": "home.index.headline",
      "множественное число": false
    },
    "языковой стандарт": {
      "id": "abcd1234cdef1234abcd1234cdef1234",
      "имя": "de",
      "код": "de-DE"
    },
    "placeholders": [
      "%{count}"
    ],
    "created_at": "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.