Webhook 도구
Webhook 도구 (Webhook Tool)
에이전트가 구성한 목적지로 알림을 보내는 방법을 설명해요. Slack, Discord, Telegram, IFTTT 등 다양한 서비스의 webhook 페이로드를 처리해 줘요.
출처: 문서
본문
webhook 도구셋은 사용자가 구성한 목적지로 알림을 전달해요. 에이전트는 메시지 텍스트만 제공해요: URL을 보지도 고르지도 않아요. webhook URL 자체가 자격 증명이기 때문이에요(Slack과 Mattermost는 비밀 경로를, Discord는 토큰을, IFTTT는 키를, Telegram은 봇 토큰을 임베드해요).
이것은 일반 HTTP 클라이언트가 아니에요 — 그건 api 도구셋이에요. webhook 도구셋은 전달을 소유해요:
- 최소 한 번 전달(at-least-once). 일시적 실패(429, 5xx, 네트워크 오류)는 지수 백오프로 재시도되고, 서버의 Retry-After를 존중해요. 4xx는 영구적이라 재시도를 낭비하지 않고 즉시 실패해요.
- 비차단. 알림이 큐에 들어가면 호출이 곧바로 반환되므로, 느리거나 재시도하는 엔드포인트가 에이전트의 턴을 막지 않아요. 전달이 결국 실패할 때만 에이전트에게 다시 메시지를 보내요.
- 폭풍 보호. 짧은 시간 안에 같은 목적지로 동일한 메시지가 나가는 것을 억제하고, 알림이 속도 제한되어서 루프 도는 에이전트가 채널을 범람시킬 수 없어요.
- 프로바이더 형태 페이로드. 각 서비스의 와이어 형식이 자동으로 적용돼요.
구성
목적지는 webhook_config에 있어요. 비밀스러운 것은 ${env.VAR}를 사용하세요 — 값은 호출 시점에 확장되고 구성 파일에 절대 저장되지 않아요.
toolsets:
- type: webhook
webhook_config:
provider: slack
url: ${env.SLACK_WEBHOOK_URL}
| 필드 | 필수 | 설명 |
|---|---|---|
url |
네 | webhook 엔드포인트. 보통 비밀을 임베드 — ${env.VAR} 선호 |
provider |
아니오 | 페이로드 형태(기본 generic) |
headers |
아니오 | 토큰으로 인증하는 엔드포인트용 추가 헤더 |
chat_id |
아니오 | 대상 채팅 — provider: telegram에 필수 |
도구셋의 timeout(초)은 요청별 HTTP 타임아웃을 덮어써요.
프로바이더
| 프로바이더 | 보내는 페이로드 | 비밀이 있는 곳 |
|---|---|---|
slack, mattermost, rocketchat, googlechat, teams, generic |
{"text": message} |
비밀 webhook URL |
discord |
{"content": message} |
webhook URL의 토큰 |
ifttt |
{"value1": message, "value2": …, "value3": …} |
webhook URL의 키 |
telegram |
{"chat_id": …, "text": message} |
URL의 봇 토큰 + chat_id |
별칭이 받아들여져요: msteams/microsoft_teams → teams, google_chat/gchat → googlechat, rocket.chat → rocketchat.
서비스별 예시
# Slack / Mattermost / Rocket.Chat — URL이 자격 증명
toolsets:
- type: webhook
webhook_config:
provider: slack
url: ${env.SLACK_WEBHOOK_URL}
# Discord — 토큰은 webhook URL의 일부
toolsets:
- type: webhook
webhook_config:
provider: discord
url: ${env.DISCORD_WEBHOOK_URL}
# Telegram — 봇 토큰은 URL에, chat_id가 대상 채팅 선택
toolsets:
- type: webhook
webhook_config:
provider: telegram
url: https://api.telegram.org/bot${env.TELEGRAM_BOT_TOKEN}/sendMessage
chat_id: "123456789"
# IFTTT — 키는 트리거 URL의 일부
toolsets:
- type: webhook
webhook_config:
provider: ifttt
url: https://maker.ifttt.com/trigger/build_failed/with/key/${env.IFTTT_KEY}
# Bearer 토큰으로 인증하는 일반 엔드포인트
toolsets:
- type: webhook
webhook_config:
provider: generic
url: https://alerts.example.com/notify
headers:
Authorization: Bearer ${env.ALERTS_TOKEN}
send_webhook
| 파라미터 | 필수 | 설명 |
|---|---|---|
message |
네 | 전달할 메시지 텍스트 |
value2, value3 |
아니오 | 추가 IFTTT 데이터 필드(provider: ifttt) |
큐에 들어가면 즉시 반환돼요. 성공 시 더 일어나는 일은 없고, 전달이 결국 실패하면 에이전트가 그렇게 알리는 메시지를 받아요.
예시
agents:
root:
model: openai/gpt-5-mini
instruction: If a check fails, notify the team with send_webhook.
toolsets:
- type: webhook
webhook_config:
provider: slack
url: ${env.SLACK_WEBHOOK_URL}
참고 비공개 주소로의 요청은 거부돼요(SSRF 안전 HTTP 클라이언트), 그리고 구성된 URL은 모델이나 오류 메시지에 절대 다시 보여주지 않아요.
더 알아보기 (Learn more)
- Docker Agent 도구 개요에서 다른 도구 살펴보기
- Fetch 도구로 URL 내용 읽기