웹 후크는 채팅 클라이언트 또는 기타 외부 API와 같은 외부 서비스에 이벤트를 알립니다. 웹 후크는 특정 이벤트가 발생할 때 URL을 설정할 수 있습니다.
중요 사항
파일 업로드는 업로드:생성 및 업로드:처리 웹 후크 이벤트만 트리거합니다.
키:생성, 키:업데이트, 번역:생성 및 번역:업데이트 웹 후크 이벤트는 파일 업로드 또는 자동 가져오기에 의해 트리거되지 않습니다:
웹 후크 기록에 대한 보존 기간은 30일입니다.
웹 후크 응답
웹 후크 엔드포인트는 콜백을 수신한 후 5초 이내에 200–299 범위의 HTTP 상태 코드를 반환해야 합니다. 기타 상태 코드 및 요청 시간 초과는 배달 실패로 간주됩니다. 배달이 10개 연속 이벤트 이상 실패하면 웹 후크가 비활성화됩니다. 콜백은 반복되지 않습니다.
콜백을 수신하는 경우 5초 요청 시간 초과 기간 내에 응답하십시오. 응용 프로그램이 우연히 시간 초과를 트리거하지 않도록 HTTP 응답이 전송된 후에 처리를 연기하십시오.
웹 후크 요청 무결성
각 웹 후크 요청에는 요청에서 전송된 데이터와 비밀로 웹 후크 검증 토큰을 사용하여 생성된 X-PhraseApp-Signature 헤더가 포함됩니다. 요청 본문의 HMAC 다이제스트를 계산하고 이를 X-PhraseApp-Signature 헤더의 값과 비교하여 요청 출처를 확인하십시오.
예:
루비
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을 제공합니다.
지정된 유형의 이벤트가 발생할 때마다 지정된 콜백 URL로 POST 요청이 전송됩니다. 요청의 POST 페이로드는 이벤트에 대한 관련 데이터가 포함된 JSON 인코딩 문서입니다. 속성 event, message 및 sent_at는 항상 포함되며, 웹 후크가 트리거된 이벤트와 관련된 추가 속성인 사용자, 프로젝트 및 브랜치도 포함됩니다.
응답 헤더
콜백 URL로 전송된 HTTP 요청에는 여러 개의 특수 헤더가 포함됩니다.
-
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",
"position": "수석 개발자",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "내 안드로이드 프로젝트",
"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"
}
}