Интеграции

Webhooks (Strings)

Контент автоматически переведен с английского языка с помощью 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> соответствует имени события вебхука с подчеркиваниями.

ветви:создать можно получить по адресу 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

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

keys:batch_delete

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

keys:create

Ключ был создан.

keys:delete

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

ключи:теги:пакет_создать

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

ключи:теги:создать

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

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_review

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

translations:batch_unreview

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

translations:batch_unverify

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

translations:batch_verify

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

translations:create

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

translations:deliver

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

переводы:исключить

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

переводы:включить

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

translations:review

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

translations:unreview

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

translations:unverify

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

translations:update

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

translations:verify

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

uploads:create

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

uploads:processing

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

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

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

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

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

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

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

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

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

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

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

Проверка вебхука

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

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

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

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

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

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

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

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": "Питер перевел page.help.title на фр.",
  "sent_at": "2015-01-29T09:52:53Z"   
  "user": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "username": "joe.doe",
    "name": "Джо Доу",
    "email": "joe@phrase.com",
    "должность": "Ведущий разработчик",
    "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": "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": "",
    "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"
  }
}
Была ли эта статья полезной?

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.