통합

Webhooks (Strings)

컨텐츠는 영어 텍스트를 Phrase Language AI를 이용해 기계 번역한 것입니다.

사용 가능:

  • Team, Professional, Business, Enterprise 및 Software UI/UX 요금제

라이센스 질문은 영업팀에 문의하십시오.

웹훅은 채팅 클라이언트나 기타 외부 API와 같은 외부 서비스에 이벤트를 알립니다. 웹훅은 특정 이벤트가 발생할 때 URL을 설정할 수 있습니다.

중요 사항

파일 업로드는 uploads:create 및 uploads:processing 웹훅 이벤트만 트리거합니다.

keys:create, keys:update, translations:create 및 translations:update 웹훅 이벤트는 다음을 통한 파일 업로드나 자동화된 가져오기에 의해 트리거되지 않습니다:

웹훅 기록의 보존 기간은 30일입니다.

웹훅 응답

웹훅 엔드포인트는 콜백을 수신한 후 5초 이내에 200~299 범위의 HTTP 상태 코드를 반환해야 합니다. 기타 상태 코드 및 요청 시간 초과는 전송 실패로 간주됩니다. 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을 통해 액세스할 수 있습니다.

이벤트 이름

설명

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

작업이 업데이트되었습니다.

key_links:create

하위 키가 상위 키에 연결되었습니다.

key_links:delete

하위 키가 상위 키에서 연결 해제되었습니다.

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:unverify

특정 언어 버전의 키 번역이 미확인 상태로 변경되었습니다.

translations:update

특정 언어 버전의 키 번역이 편집되었습니다.

translations:verify

특정 언어 버전의 키 번역이 확인되었습니다.

uploads:create

로케일 파일이 성공적으로 처리되었습니다.

uploads:processing

로케일 파일이 처리 중입니다.

웹훅 추가

웹훅을 추가하려면 다음 단계를 따르십시오.

  1. Integrations 페이지에서 아래로 스크롤하여 Webhooks로 이동한 다음 Configure를 클릭하십시오.

    Webhooks 페이지가 열립니다.

  2. Add webhook을 클릭하십시오.

    Add webhook 창이 열립니다.

  3. 웹훅 세부 정보를 제공하십시오.

  4. 선택적으로 Include branches를 포함시킬 수 있습니다.

  5. 저장을 클릭합니다. 지정된 웹훅이 Webhooks 페이지의 목록에 추가됩니다.

특정 웹훅의 More 메뉴에서 웹훅을 비활성화할 수 있습니다.

웹훅 테스트

웹훅을 테스트하려면:

  • Webhooks 페이지에서 웹훅을 선택하고 More 메뉴에서 Send Test-Notification을 선택하십시오.

    테스트가 성공했음을 알리는 알림이 표시됩니다.

RequestBin과 같은 서비스를 사용하여 웹훅의 내용을 캡처하십시오. RequestBin은 검사를 위해 요청 데이터를 수집하는 URL을 제공합니다.

웹훅 데이터 사용

지정된 유형의 이벤트가 발생할 때마다 지정된 콜백 URL로 POST 요청이 전송됩니다. 요청의 POST 페이로드는 이벤트 관련 데이터가 포함된 JSON 인코딩 문서입니다. event, message, sent_at 속성은 항상 포함되며, 웹훅이 트리거된 user, project, branch와 같이 이벤트와 관련된 추가 속성도 함께 포함됩니다.

응답 헤더

콜백 URL로 전송되는 HTTP 요청에는 몇 가지 특수 헤더가 포함됩니다.

  • X-PhraseApp-Event 웹후크를 트리거한 이벤트 유형입니다.

  • X-PhraseApp-Signature 훅의 시크릿을 키로 사용하여 생성한 페이로드의 HMAC 16진수 다이제스트입니다.

예:

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

{
  "event": "translations:create",
  "message": "Peter가 page.help.title을 fr(프랑스어)로 번역했습니다.",
  "sent_at": "2015-01-29T09:52:53Z"   
  "user": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "username": "joe.doe",
    이름 "Joe Doe",
    "email": "joe@phrase.com",
    위치 "수석 개발자",
    생성된 위치 "2015-01-28T09:52:53Z",
    "updated_at": "2015-01-28T09:52:53Z"
  },
  "project": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    이름 "내 Android 프로젝트",
    "main_format": "xml",
    "project_image_url": "http://assets.phrase.com/project.png",
    "account": "account",
    생성된 위치 "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}"
    
    생성된 위치 "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.