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