-
Командные, Профессиональные, Бизнес, Корпоративные и Программные 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
|
Имя события |
Описание |
|---|---|
|
|
Ветвь была создана. |
|
|
Ветвь была объединена. |
|
|
Комментарий к ключу перевода был добавлен. |
|
|
Значение пользовательского поля метаданных было обновлено в нескольких ключах. |
|
|
Значение пользовательского поля метаданных было обновлено на уровне ключа. |
|
|
Задание было отмечено как завершенное. |
|
|
Задание создано. |
|
|
Языковой стандарт задания был отмечен как завершенный. |
|
|
Языковой стандарт задания был повторно открыт. |
|
|
Языковой стандарт задания был проверен и отмечен как завершенный. |
|
|
Языковой стандарт задания был проверен и повторно открыт. |
|
|
Задание было повторно открыто. |
|
|
Задание было начато. |
|
|
Задание обновлено. |
|
|
Несколько ключей были удалены. |
|
|
Ключ был создан. |
|
|
Ключ был удален. |
|
|
Теги были добавлены к нескольким ключам. |
|
|
Теги были добавлены к ключу. |
|
|
Ключ был переименован или изменен. |
|
|
Новая языковая версия была создана в проекте. |
|
|
Версия языка была удалена. |
|
|
Версия языка была изменена, переименована или настроена. |
|
|
Проект был изменен или настроен. |
|
|
Обновление по воздуху (OTA) было создано. |
|
|
Обновление по воздуху (OTA) было удалено. |
|
|
Скриншот был создан. |
|
|
Скриншот был удален. |
|
|
Скриншот был изменен или переименован. |
|
|
Список переводов был удален. |
|
|
Список переводов был включен. |
|
|
Список переводов был проверен. |
|
|
Список переводов был не проверен. |
|
|
Список переводов был не подтвержден. |
|
|
Список переводов был подтвержден. |
|
|
Перевод ключа в определенной языковой версии был добавлен. |
|
|
Перевод ключа в определенной языковой версии был сдан поставщиком языковых услуг. |
|
|
Перевод ключа в определенной языковой версии был исключен. |
|
|
Перевод ключа в определенной языковой версии был включен. |
|
|
Перевод ключа в определенной языковой версии был проверен. |
|
|
Перевод ключа в определенной языковой версии был не проверен. |
|
|
Перевод ключа в определенной языковой версии не был проверен. |
|
|
Перевод ключа в определенной языковой версии был отредактирован. |
|
|
Перевод ключа в определенной языковой версии был подтвержден. |
|
|
Файл языкового стандарта был успешно обработан. |
|
|
Файл языкового стандарта обрабатывается. |
Чтобы добавить вебхук, выполните следующие шаги:
-
На странице прокрутите вниз до и нажмите Настроить.
Открывается страница .
-
Нажмите Добавить вебхук.
Открывается окно .
-
Укажите детали вебхука.
-
При желании .
-
Нажмите Сохранить. Указанный вебхук добавляется в список на странице .
Вебхук можно деактивировать из меню конкретного вебхука.
Чтобы протестировать вебхук:
-
На странице выберите вебхук и выберите Отправить тестовое уведомление из меню .
Представляется уведомление, указывающее, что тест был успешным.
Используйте сервис, такой как 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"
}
}