> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ko/blocks/blocks/data-storage/webhook-sink.md).

# 웹훅 싱크

이 **웹훅 싱크** 이 블록은 워크플로 결과를 포함한 HTTP 요청을 보내 워크플로에서 외부 API로 데이터를 전송할 수 있게 해줍니다.

## 이 블록의 작동 방식

여러 HTTP 메서드(GET, POST, PUT)를 지원하며 다음을 전송하도록 구성할 수 있습니다:

* JSON 페이로드
* 쿼리 파라미터
* 멀티파트 인코딩 파일

이 블록은 데이터 교환, 알림 또는 기타 통합을 위해 워크플로를 원격 시스템과 연동할 수 있도록 유연성을 제공하도록 설계되었습니다.

### 쿼리 파라미터 설정

요청에 대한 쿼리 파라미터를 쉽게 설정할 수 있습니다:

```
query_parameters = {
    "api_key": "$inputs.api_key",
}
```

다음 URL로 요청을 보냅니다: `https://your-host/some/resource?api_key=<API_KEY_VALUE>`

### 헤더 설정

헤더 설정은 쿼리 파라미터 설정만큼 쉽습니다:

```
headers = {
    "api_key": "$inputs.api_key",
}
```

### JSON 페이로드 전송

직접 구성한 JSON 문서를 메시지 본문으로 설정할 수 있으며, 다음을 지정합니다 `json_payload` 및 `json_payload_operations` 속성. `json_payload` 다음과 유사하게 작동합니다 `query_parameters` 및 `headers`하지만 JSON 본문 요소 위에 UQL 연산을 선택적으로 적용할 수 있습니다.

객체 탐지 모델이 예측한 바운딩 박스 수를 다음 이름의 본문 필드로 보내고 싶다고 가정해 보겠습니다: `detections_number`그러면 다음과 유사한 구성을 지정해야 합니다:

```
json_payload = {
    "detections_number": "$steps.model.predictions",
}
json_payload_operations = {
    "detections_number": [{"type": "SequenceLength"}]
}
```

### POST 요청에서의 멀티파트 인코딩 파일

엔드포인트가 multipart 요청도 받을 수 있습니다. JSON 페이로드와 비슷한 방식으로 구성할 수 있으며, 다음을 설정합니다 `multi_part_encoded_files` 및 `multi_part_encoded_files_operations`.

요청에 이미지를 보내고 싶다고 가정해 보겠습니다. 그러면 구성은 다음과 같을 수 있습니다:

```
multi_part_encoded_files = {
    "image": "$inputs.image",
}
multi_part_encoded_files_operations = {
    "image": [{"type": "ConvertImageToJPEG"}]
}
```

### 쿨다운

이 블록은 다음을 허용합니다 `cooldown_seconds` (이는 **기본값은 `5` 초**) 원치 않는 알림 폭주를 방지합니다. 필요에 따라 조정하고, `0` 쿨다운 없음으로 설정하세요.

쿨다운 기간 동안, 해당 단계가 연속으로 실행되면 `throttling_status` 출력이 설정됩니다 `True` 그리고 알림은 전송되지 않습니다.

{% hint style="warning" %}
**쿨다운 제한 사항**

현재 쿨다운 구현은 비디오 처리에만 제한됩니다. HTTP 서비스 뒤에서 실행되는 워크플로(Roboflow Hosted API, Dedicated Deployment 또는 자체 호스팅 `inference` 서버)에서 이 블록을 사용해도 HTTP 요청 처리에는 영향을 주지 않습니다.
{% endhint %}

### 비동기 실행

다음을 `fire_and_forget` 속성. 요청을 백그라운드에서 보내 워크플로가 데이터 전송을 기다리지 않고 계속 진행하도록 하려면 True로 설정합니다. 이 경우 다음에 의존할 수 없습니다 `error_status` 출력이며, 항상 다음으로 설정됩니다 `False`, 따라서 우리는 **다음 설정을 권장합니다 `fire_and_forget=False` 디버깅 목적으로**.

### 런타임 매개변수를 기반으로 알림 비활성화

때로는 다음을 수동으로 비활성화하는 것이 편리할 수 있습니다 **웹훅 싱크** 블록. 다음을 설정하면 가능합니다 `disable_sink` 플래그를 Workflow 입력에 대한 참조로 두는 것입니다. 이렇게 설정하면 호출자가 필요할 때 합의된 입력 매개변수를 보내 싱크를 비활성화할 수 있습니다.

## 일반적인 사용 사례

* 이 블록을 사용하여 \[블록 유형에 따른 목적]

## 다른 블록에 연결하기

이 블록의 출력은 워크플로의 다른 블록에 연결할 수 있습니다.

### 유형 식별자

단계에서 다음 식별자를 사용하세요 `"type"` 필드: `roboflow_core/webhook_sink@v1` 워크플로우에 이 블록을 단계로 추가하려면.

### 속성

| **이름**                                | **유형**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | **설명**                                                                            | 참조 |
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | -- |
| `name`                                | `str`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 이 단계에 대한 고유 식별자를 입력하세요..                                                          | ❌  |
| `url`                                 | `str`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 요청을 보낼 리소스의 URL입니다.                                                               | ✅  |
| `method`                              | `str`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 사용할 HTTP 메서드입니다.                                                                  | ❌  |
| `query_parameters`                    | `Dict[str, Union[List[Union[bool, float, int, str]], bool, float, int, str]]`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 요청 쿼리 파라미터입니다.                                                                    | ✅  |
| `headers`                             | `Dict[str, Union[bool, float, int, str]]`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 요청 헤더입니다.                                                                         | ✅  |
| `json_payload`                        | `Dict[str, Union[Dict[Any, Any], List[Any], bool, float, int, str]]`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | JSON 페이로드에 넣을 필드입니다.                                                              | ✅  |
| `json_payload_operations`             | `Dict[str, List[Union[ClassificationPropertyExtract, ConvertDictionaryToJSON, ConvertImageToBase64, ConvertImageToJPEG, DetectionsFilter, DetectionsOffset, DetectionsPropertyExtract, DetectionsRename, DetectionsSelection, DetectionsShift, DetectionsToDictionary, Divide, ExtractDetectionProperty, ExtractFrameMetadata, ExtractImageProperty, LookupTable, Multiply, NumberRound, NumericSequenceAggregate, PickDetectionsByParentClass, RandomNumber, SequenceAggregate, SequenceApply, SequenceElementsCount, SequenceLength, SequenceMap, SortDetections, StringMatches, StringSubSequence, StringToLowerCase, StringToUpperCase, TimestampToISOFormat, ToBoolean, ToNumber, ToString]]]` | 정의된 데이터에 대해 각 값별로 수행할 작업의 UQL 정의입니다 `json_payload` 파라미터.                          | ❌  |
| `multi_part_encoded_files`            | `Dict[str, Union[Dict[Any, Any], List[Any], bool, float, int, str]]`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 멀티파트 인코딩 파일로 POST할 데이터입니다.                                                        | ✅  |
| `multi_part_encoded_files_operations` | `Dict[str, List[Union[ClassificationPropertyExtract, ConvertDictionaryToJSON, ConvertImageToBase64, ConvertImageToJPEG, DetectionsFilter, DetectionsOffset, DetectionsPropertyExtract, DetectionsRename, DetectionsSelection, DetectionsShift, DetectionsToDictionary, Divide, ExtractDetectionProperty, ExtractFrameMetadata, ExtractImageProperty, LookupTable, Multiply, NumberRound, NumericSequenceAggregate, PickDetectionsByParentClass, RandomNumber, SequenceAggregate, SequenceApply, SequenceElementsCount, SequenceLength, SequenceMap, SortDetections, StringMatches, StringSubSequence, StringToLowerCase, StringToUpperCase, TimestampToISOFormat, ToBoolean, ToNumber, ToString]]]` | 정의된 데이터에 대해 각 값별로 수행할 작업의 UQL 정의입니다 `multi_part_encoded_files` 파라미터.              | ❌  |
| `form_data`                           | `Dict[str, Union[Dict[Any, Any], List[Any], bool, float, int, str]]`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 폼 데이터에 넣을 필드입니다.                                                                  | ✅  |
| `form_data_operations`                | `Dict[str, List[Union[ClassificationPropertyExtract, ConvertDictionaryToJSON, ConvertImageToBase64, ConvertImageToJPEG, DetectionsFilter, DetectionsOffset, DetectionsPropertyExtract, DetectionsRename, DetectionsSelection, DetectionsShift, DetectionsToDictionary, Divide, ExtractDetectionProperty, ExtractFrameMetadata, ExtractImageProperty, LookupTable, Multiply, NumberRound, NumericSequenceAggregate, PickDetectionsByParentClass, RandomNumber, SequenceAggregate, SequenceApply, SequenceElementsCount, SequenceLength, SequenceMap, SortDetections, StringMatches, StringSubSequence, StringToLowerCase, StringToUpperCase, TimestampToISOFormat, ToBoolean, ToNumber, ToString]]]` | 정의된 데이터에 대해 각 값별로 수행할 작업의 UQL 정의입니다 `form_data` 파라미터.                             | ❌  |
| `request_timeout`                     | `정수`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 원격 API 응답을 기다릴 시간(초)입니다.                                                          | ✅  |
| `fire_and_forget`                     | `bool`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 더 빠른 워크플로를 위해 블록을 비동기(True)로 실행할지, 디버깅 및 오류 처리를 위해 동기(False)로 실행할지 나타내는 불리언 플래그.. | ✅  |
| `disable_sink`                        | `bool`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 블록 실행을 비활성화하는 불리언 플래그..                                                           | ✅  |
| `cooldown_seconds`                    | `정수`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 후속 알림을 보낼 수 있을 때까지 기다릴 시간(초)입니다..                                                 | ✅  |

이 **참조** 열은 워크플로우 런타임에서 사용 가능한 동적 값으로 속성을 매개변수화할 수 있는 가능성을 나타냅니다 `워크플로우` 런타임입니다. 자세한 내용은 *바인딩* 을 참조하세요.

### 런타임 호환성

`인터넷 필요` - 에어갭 / 오프라인 배포 : 이 블록은 완전히 오프라인 / 에어갭된 배포에서는 접근할 수 없는 서비스에 의존합니다.

`소프트` - 런타임 `호스팅 서버리스`, `전용 배포`; 실행 `원격` : 쿨다운/속도 제한 타이머는 프로세스 메모리에 저장됩니다. 상태 비저장 또는 다중 복제본 HTTP 런타임에서 원격 단계 실행을 사용하면 각 요청이 새 작업자를 받으므로 쿨다운이 속도를 제한하지 않습니다. 쿨다운은 지속적인 WebRTC 세션에서 로컬 단계 실행을 사용할 때만 문서화된 대로 작동합니다.

### 입력 및 출력 바인딩

사용 가능한 연결은 바인딩 유형에 따라 달라집니다. 어떤 바인딩 유형인지 확인하세요 `웹훅 싱크` 버전 `v1` 을 가지고 있는지.

<details>

<summary>입력 및 출력 바인딩</summary>

* 입력
  * `url` ([*`string`*](/workflows/ko/developer-guide/developer-guide/kinds/string.md)): 요청을 보낼 리소스의 URL입니다.
  * `query_parameters` (*Union\[*[*`roboflow_model_id`*](/workflows/ko/developer-guide/developer-guide/kinds/roboflow-model-id.md)*,* [*`list_of_values`*](/workflows/ko/developer-guide/developer-guide/kinds/list-of-values.md)*,* [*`정수`*](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)*,* [*`string`*](/workflows/ko/developer-guide/developer-guide/kinds/string.md)*,* [*`float`*](/workflows/ko/developer-guide/developer-guide/kinds/float.md)*,* [*`boolean`*](/workflows/ko/developer-guide/developer-guide/kinds/boolean.md)*,* [*`roboflow_api_key`*](/workflows/ko/developer-guide/developer-guide/kinds/roboflow-api-key.md)*,* [*`top_class`*](/workflows/ko/developer-guide/developer-guide/kinds/top-class.md)*,* [*`roboflow_project`*](/workflows/ko/developer-guide/developer-guide/kinds/roboflow-project.md)*,* [*`0에서 1 사이의 실수`*](/workflows/ko/developer-guide/developer-guide/kinds/float-zero-to-one.md)*]*): 요청 쿼리 파라미터입니다.
  * `headers` (*Union\[*[*`roboflow_model_id`*](/workflows/ko/developer-guide/developer-guide/kinds/roboflow-model-id.md)*,* [*`정수`*](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)*,* [*`0에서 1 사이의 실수`*](/workflows/ko/developer-guide/developer-guide/kinds/float-zero-to-one.md)*,* [*`string`*](/workflows/ko/developer-guide/developer-guide/kinds/string.md)*,* [*`float`*](/workflows/ko/developer-guide/developer-guide/kinds/float.md)*,* [*`roboflow_api_key`*](/workflows/ko/developer-guide/developer-guide/kinds/roboflow-api-key.md)*,* [*`top_class`*](/workflows/ko/developer-guide/developer-guide/kinds/top-class.md)*,* [*`roboflow_project`*](/workflows/ko/developer-guide/developer-guide/kinds/roboflow-project.md)*,* [*`boolean`*](/workflows/ko/developer-guide/developer-guide/kinds/boolean.md)*]*): 요청 헤더입니다.
  * `json_payload` ([*`*`*](/workflows/ko/developer-guide/developer-guide/kinds/wildcard.md)): JSON 페이로드에 넣을 필드입니다.
  * `multi_part_encoded_files` ([*`*`*](/workflows/ko/developer-guide/developer-guide/kinds/wildcard.md)): 멀티파트 인코딩 파일로 POST할 데이터입니다.
  * `form_data` ([*`*`*](/workflows/ko/developer-guide/developer-guide/kinds/wildcard.md)): 폼 데이터에 넣을 필드입니다.
  * `request_timeout` ([*`정수`*](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)): 원격 API 응답을 기다릴 시간(초)입니다.
  * `fire_and_forget` ([*`boolean`*](/workflows/ko/developer-guide/developer-guide/kinds/boolean.md)): 더 빠른 워크플로를 위해 블록을 비동기(True)로 실행할지, 디버깅 및 오류 처리를 위해 동기(False)로 실행할지 나타내는 불리언 플래그..
  * `disable_sink` ([*`boolean`*](/workflows/ko/developer-guide/developer-guide/kinds/boolean.md)): 블록 실행을 비활성화하는 불리언 플래그..
  * `cooldown_seconds` ([*`정수`*](/workflows/ko/developer-guide/developer-guide/kinds/integer.md)): 후속 알림을 보낼 수 있을 때까지 기다릴 시간(초)입니다..
* 출력
  * `error_status` ([`boolean`](/workflows/ko/developer-guide/developer-guide/kinds/boolean.md)): 불리언 플래그.
  * `throttling_status` ([`boolean`](/workflows/ko/developer-guide/developer-guide/kinds/boolean.md)): 불리언 플래그.
  * `message` ([`string`](/workflows/ko/developer-guide/developer-guide/kinds/string.md)): 문자열 값.

</details>

<details>

<summary>예시 JSON 정의</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/webhook_sink@v1",
	    "url": "<block_does_not_provide_example>",
	    "method": "<block_does_not_provide_example>",
	    "query_parameters": {
	        "api_key": "$inputs.api_key"
	    },
	    "headers": {
	        "api_key": "$inputs.api_key"
	    },
	    "json_payload": {
	        "field": "$steps.model.predictions"
	    },
	    "json_payload_operations": {
	        "predictions": [
	            {
	                "property_name": "class_name",
	                "type": "DetectionsPropertyExtract"
	            }
	        ]
	    },
	    "multi_part_encoded_files": {
	        "image": "$steps.visualization.image"
	    },
	    "multi_part_encoded_files_operations": {
	        "predictions": [
	            {
	                "property_name": "class_name",
	                "type": "DetectionsPropertyExtract"
	            }
	        ]
	    },
	    "form_data": {
	        "field": "$inputs.field_value"
	    },
	    "form_data_operations": {
	        "predictions": [
	            {
	                "property_name": "class_name",
	                "type": "DetectionsPropertyExtract"
	            }
	        ]
	    },
	    "request_timeout": "$inputs.request_timeout",
	    "fire_and_forget": "$inputs.fire_and_forget",
	    "disable_sink": false,
	    "cooldown_seconds": "$inputs.cooldown_seconds"
	}
```

</details>
