Claude Code bildirimlerini Telegram, Slack veya Discord'a göndermek için ilgili uygulamada bir bot ya da incoming webhook oluşturun, ardından curl ile ona kısa bir mesaj gönderen bir Claude Code hook'u ekleyin. Notification hook'u "Claude izninizi istiyor" ve "Claude bekliyor" durumlarını, Stop hook'u ise "Claude bitirdi" durumunu kapsar. Telegram için bir bot token'ı ve chat ID'niz gerekir; Slack ve Discord için yalnızca bir webhook URL'si yeterlidir. Aynı script Mac ve Linux'ta çalışır; Windows için de kısa bir PowerShell sürümü var.
01Başlamadan önce: mesaj ve gizli anahtar
Her hook standart girdiden JSON alır. İşe yarayan alanlar şunlardır: hook_event_name, cwd (proje klasörü), Notification olaylarında message ve Stop olaylarında last_assistant_message. Aşağıdaki örnekler bunları Claude needs you in my-app: Claude needs your permission to use Bash gibi tek bir satıra dönüştürür.
Bot token'ları ve webhook URL'leri birer paroladır: elinde olan herkes botunuz adına mesaj gönderebilir. Slack'in dokümantasyonu da webhook URL'lerinin paylaşılmaması ve sürüm kontrolüne commit edilmemesi gerektiğini açıkça belirtir. Bunları yalnızca sizin okuyabileceğiniz ayrı bir dosyada saklayın:
mkdir -p ~/.claude
touch ~/.claude/chat-notify.env
chmod 600 ~/.claude/chat-notify.env
02Telegram: size mesaj atan bir bot
- Telegram'da @BotFather ile bir sohbet açın,
/newbotgönderin ve yönergeleri izleyin. Size123456789:AA...gibi bir token ile yanıt verir. - Yeni botunuzla bir sohbet açıp ona herhangi bir mesaj gönderin; böylece size yanıt yazabilir hâle gelir.
- Chat ID'nizi bulun. Token'ınızla bu URL'yi açın ve yanıtta
"chat":{"id":ifadesini arayın:
curl "https://api.telegram.org/bot<TOKEN>/getUpdates"
- Her iki değeri
~/.claude/chat-notify.envdosyasına yazın:
SERVICE=telegram
TELEGRAM_TOKEN=123456789:AA...
TELEGRAM_CHAT_ID=987654321
Telegram'ın sendMessage metodu chat_id ve text (1 ile 4.096 karakter arası) alır. Ayrıca mesajı sessiz ileten disable_notification=true parametresini de kabul eder. Script bunu "bitti" mesajları için kullanır, izin isteklerinde ise sesi açık bırakır.
03Slack: incoming webhook
- api.slack.com/apps adresinde bir Slack uygulaması oluşturun (ya da mevcut bir uygulamayı açın).
- Incoming Webhooks altında Activate Incoming Webhooks seçeneğini açın.
- Add New Webhook to Workspace'e tıklayın, bir kanal seçin ve Authorize'ı seçin.
https://hooks.slack.com/services/ile başlayan URL'yi kopyalayın.
SERVICE=slack
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T000/B000/XXXX
Her webhook, oluştururken seçtiğiniz tek bir kanala mesaj gönderir ve ad ya da simgeyi mesaj bazında değiştiremezsiniz. En iyisi size ait küçük, özel bir kanal kullanmaktır; böylece yoğun bir kanalda uyarı kaybolmaz.
04Discord: kanal webhook'u
- Sunucunuzda Server Settings'i, ardından Integrations'ı ve sonra Webhooks'u açın.
- Bir webhook oluşturun, kanalı seçin ve URL'sini kopyalayın.
SERVICE=discord
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/1234/abcd
Discord'un execute-webhook endpoint'i, content (en fazla 2.000 karakter) ve webhook adını geçersiz kılmak için isteğe bağlı username içeren bir JSON gövdesi alır.
05Hook script'i (Mac ve Linux)
Bunu ~/.claude/chat-notify.sh olarak kaydedin ve chmod +x ~/.claude/chat-notify.sh komutunu çalıştırın. curl ve jq gerektirir (brew install jq veya apt install jq).
#!/bin/sh
. "$HOME/.claude/chat-notify.env"
input=$(cat)
event=$(printf '%s' "$input" | jq -r '.hook_event_name')
project=$(basename "$(printf '%s' "$input" | jq -r '.cwd')")
if [ "$event" = "Stop" ]; then
detail=$(printf '%s' "$input" | jq -r '(.last_assistant_message // "") | .[0:300]')
text="Claude finished in $project. $detail"
quiet=true
else
detail=$(printf '%s' "$input" | jq -r '.message // "Needs your attention"')
text="Claude needs you in $project: $detail"
quiet=false
fi
case "$SERVICE" in
telegram)
curl -s "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \
--data-urlencode "chat_id=$TELEGRAM_CHAT_ID" \
--data-urlencode "text=$text" \
--data-urlencode "disable_notification=$quiet" > /dev/null ;;
slack)
jq -n --arg t "$text" '{text: $t}' | curl -s -X POST \
-H 'Content-Type: application/json' --data @- "$SLACK_WEBHOOK_URL" > /dev/null ;;
discord)
jq -n --arg t "$text" '{content: $t, username: "Claude Code"}' | curl -s -X POST \
-H 'Content-Type: application/json' --data @- "$DISCORD_WEBHOOK_URL" > /dev/null ;;
esac
exit 0
JSON'u jq -n --arg ile oluşturmak önemlidir: Claude'un yanıtları tırnak, ters eğik çizgi ve satır sonları içerir; bunları elle bir JSON string'ine yapıştırmak isteği bozar.
Bağlamadan önce test edin:
echo '{"hook_event_name":"Notification","cwd":"/tmp/demo","message":"Test"}' | ~/.claude/chat-notify.sh
06Hook'ları ekleyin
~/.claude/settings.json dosyasında, varsa mevcut hooks nesnesinin içine:
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt|idle_prompt",
"hooks": [{ "type": "command", "command": "~/.claude/chat-notify.sh" }]
}
],
"Stop": [
{
"hooks": [{ "type": "command", "command": "~/.claude/chat-notify.sh", "async": true }]
}
]
}
}
Hook'ların yüklenmesi için yeni bir Claude Code oturumu başlatın. idle_prompt ile Stop örtüşür: Stop, Claude bitirdiği anda tetiklenir; idle_prompt ise siz bir şey yazmadıysanız yaklaşık bir dakika sonra. İkisini de tutabilir ya da birini kaldırabilirsiniz; ntfy rehberi artı ve eksilerini anlatıyor.
07Windows (PowerShell)
%USERPROFILE%\.claude\chat-notify.ps1 olarak kaydedin. Bu sürüm Discord'a gönderir; Slack için gövdeyi @{ text = $text } olarak ve URL'yi değiştirin.
$url = 'https://discord.com/api/webhooks/1234/abcd'
$in = [Console]::In.ReadToEnd() | ConvertFrom-Json
$project = Split-Path $in.cwd -Leaf
if ($in.hook_event_name -eq 'Stop') { $text = "Claude finished in $project." }
else { $text = "Claude needs you in ${project}: $($in.message)" }
$json = @{ content = $text; username = 'Claude Code' } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri $url -ContentType 'application/json; charset=utf-8' `
-Body ([Text.Encoding]::UTF8.GetBytes($json)) | Out-Null
Hook girdisi:
{
"type": "command",
"shell": "powershell",
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File \"$HOME\\.claude\\chat-notify.ps1\""
}
WSL içinde Mac ve Linux script'ini kullanın.
08Sohbet uygulamalarını bildirim aracı olarak kullanırken bilmeniz gerekenler
- Gönderdiğiniz şey bilgisayarınızdan çıkar. "Bitti" mesajı Claude'un yanıtının başını içerir. Paylaşılan bir Slack veya Discord kanalında bunu oradaki herkes okuyabilir. Kodunuz gizliyse
$detailkısmını kaldırın. - Sohbet uygulamaları bildirimleri gruplar ve sessize alır. Yoğun bir workspace veya sessize alınmış bir sunucu uyarıyı gizleyebilir. ntfy gibi özel bir push uygulamasında (bkz. ntfy rehberi) uyarının kaybolma ihtimali daha düşüktür.
- Hook'lar masa başında olup olmadığınızı bilmez.
Stopher seferinde mesaj gönderir.idle_promptvepermission_prompt, yerleşik olarak "uzakta" filtresine en yakın seçeneklerdir.
09Claude Code Notifier'ın yeri
Webhook, Claude'un ne yaptığının kaydını tutmak için iyi bir yoldur ve bir ekip için doğru araç olabilir. Ancak uyarı üzerine harekete geçmek isteyen tek bir kişi için yetersiz kalır: Claude'un izin istediğini okursunuz, sonra izni vermek için terminale geri dönersiniz. Bir Telegram botu teoride yanıt alabilir, ama yanıtları bekleyip bir karar döndüren hook'u sizin yazmanız gerekir.
Claude Code Notifier tam olarak bu kısmı halleder. Eşleştirilmiş bir telefonla, telefondan bir izin isteğine bir kez izin verebilir, oturum boyunca izin verebilir ya da reddedebilir, Claude'un çoktan seçmeli sorularını yanıtlayabilir ve Claude bitirdiğinde yeni bir talimat gönderebilirsiniz. Son 30 saniye içinde bir şey yazdıysanız terminal her zamanki gibi sorar ve telefonda hiçbir şey beklemez. Bağımsız bir araçtır, Anthropic tarafından geliştirilmemiştir; ccn Mac, Windows ve Linux'ta çalışır. Alternatiflerle karşılaştırmaya, ccn sayfasına ve fiyatlandırmaya göz atın.
10SSS
Claude Code, script olmadan Slack'e mesaj gönderebilir mi?
Claude Code'da hook'un JSON'unu bir URL'ye POST eden http hook'ları vardır, ancak Slack ve Discord webhook'ları kendi gövde formatlarını (text veya content) bekler; bu yüzden onlara doğrudan bir http hook'u başarısız olur. Arada küçük bir script veya bir relay gerekir.
Telegram chat ID'mi nasıl bulurum?
Botunuza bir mesaj gönderin, ardından https://api.telegram.org/bot<TOKEN>/getUpdates adresini açın. "chat":{"id": ifadesinden sonraki sayı chat ID'nizdir. Bir grup için önce botu gruba ekleyin ve oraya bir mesaj gönderin.
Claude Code'a Slack veya Discord üzerinden yanıt verebilir miyim?
Yalnızca mesaj gönderebilen bir incoming webhook ile hayır. Yanıt verebilmek için cevabınızı bekleyip bir karar döndüren bir hook gerekir; uzaktan onay araçları tam olarak bunun için tasarlanmıştır.
Hook, Claude Code'u yavaşlatır mı?
Stop girdisi "async": true kullandığı için bildirimi arka planda gönderir. Notification hook'ları zaten Claude ile paralel çalışır ve onu engellemez.