Zamanlanmış Telegram mesajları; günlük satış özeti, yedekleme sonucu, stok uyarısı veya ekip hatırlatması gibi işleri e-postaya göre daha hızlı okunur hale getirir. Telegram Bot API, HTTPS üzerinden sendMessage çağrısı kabul eder; bu çağrıyı sunucudaki crontab veya harici bir HTTP zamanlayıcı ile tetikleyebilirsiniz. Resmi yöntem belgesi için Telegram sendMessage sayfasına bakabilirsiniz.
Bu rehber sabit metin gönderimi ile dinamik rapor üretimi arasındaki farkı netleştirir. Sabit metinde Bot API adresine doğrudan POST yeterlidir. Dinamik raporda ise önce kendi uygulamanız veriyi toplar, sonra Telegram'a yazar. E-posta kanalıyla karşılaştırma için cron ile e-posta gönderme rehberini de okuyabilirsiniz; kanal, API ve hata yüzeyi farklıdır.
Aşağıda bot token alma, chat ID bulma, JSON gövdesi, günlük plan ve yinelenen mesaj riski adım adım anlatılır. Zaman ifadesi seçerken crontab sözdizimi tablosu ve cron expression generator yardımcı olur. Ürün tarafında yerleşik Telegram entegrasyonu yoktur; HTTP POST ile Bot API veya sizin endpoint'iniz çağrılır.
Zamanlanmış Mesaj Senaryosu
Pratikte iki senaryo sık görülür. İlki sabit metin: her sabah 09:00'da "Günlük kontrol başladı" gibi değişmeyen bir uyarı. İkincisi dinamik rapor: gece 02:00'de yedekleme bitince başarı/hata, satır sayısı veya dosya yolu gibi o ana özel veri. Sabit metin için sunucuda tek satır curl veya panelden Bot API'ye POST yeterlidir. Dinamik raporda betik veya uygulama endpoint'i zorunludur; aksi halde Telegram'a güncel veri ulaştırılamaz.
Örnek iş akışları:
- Operasyon hatırlatması: Her iş günü 08:45'te ekip grubuna vardiya notu gider.
- İş sonucu bildirimi: Yedekleme veya fatura senkronu bittikten sonra başarı veya hata satırı gönderilir.
Bot Token Hazırlığı
Bot token, BotFather üzerinden oluşturulan botun kimlik anahtarıdır. Token olmadan https://api.telegram.org/bot<TOKEN>/... uç noktaları yanıt vermez.
- Telegram'da
@BotFatherile sohbet açın. /newbotkomutunu çalıştırıp görünen ad ve kullanıcı adı verin.- Dönen token'ı gizli tutun; depoda düz metin commit etmeyin, ortam değişkeninde saklayın.
- Doğrulama için
getMeçağrısı yapın:
curl -sS "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getMe"
Yanıtta "ok":true ve bot kullanıcı adı görünmelidir. Token sızdıysa BotFather'dan /revoke ile yenileyin; eski token anında geçersiz olur. Token, Bot API URL yolunda bulunur ve loglara düşebilir; mesaj parametreleri için üretimde JSON gövdesi veya form alanları tercih edin.
Chat ID ve İzinler
Chat ID, mesajın gideceği özel sohbetin veya grubun sayısal kimliğidir. Bota ilk kez yazmadan veya gruba eklemeden ID öğrenilemez.
- Bota özel mesaj gönderin veya botu hedef gruba ekleyip bota yönelik bir komut yazın (ör.
/start@BotKullaniciAdi). - Güncellemeleri okuyun:
curl -sS "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates"
JSON içinde message.chat.id alanını kaydedin. Özel sohbetlerde pozitif, gruplarda genelde negatif tam sayı görülür. Gruplarda botun mesaj gönderme izni olmalı; yönetici kısıtlı gruplarda botu yönetici yapmanız veya mesaj izni vermeniz gerekir. Aksi halde API Forbidden: bot is not a member of the group chat veya benzeri bir hata döner.
sendMessage İsteği
Temel çağrı HTTPS POST ile yapılır. Resmi taban URL: https://api.telegram.org/bot<TOKEN>/sendMessage. Zorunlu alanlar chat_id ve text'tir. İsteğe bağlı parse_mode (HTML veya MarkdownV2), disable_notification ve link_preview_options kullanılabilir.
curl -sS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-H "Content-Type: application/json" \
-d "{\"chat_id\":123456789,\"text\":\"Gunluk kontrol tamam\",\"disable_notification\":false}"
Başarılı yanıtta "ok":true ve result.message_id gelir. HTTP 200 ile birlikte gövdede ok:false de olabilir; bu yüzden yalnızca durum koduna bakmak yetmez, JSON içindeki ok alanını da kontrol edin. Linux sunucuda crontab satırı örneği:
0 9 * * 1-5 /usr/bin/curl -fsS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" -H "Content-Type: application/json" -d "{\"chat_id\":123456789,\"text\":\"Sabah operasyon hatirlaticisi\"}" >> /var/log/telegram-cron.log 2>&1
Ortam değişkenlerinin cron tarafından yüklenmediğini unutmayın; token'ı satıra gömmek yerine güvenli bir sarmalayıcı betik kullanın. Temel kurulum için Linux cron job rehberi PATH ve kabuk farklarını açıklar.
JSON ve Mesaj Biçimi
Content-Type: application/json kullanırken gövde geçerli JSON olmalıdır. Türkçe karakterler UTF-8 ile sorunsuz gider; sorun genelde kabuk tırnak kaçışından çıkar. HTML parse modunda yalnızca Telegram'ın izin verdiği etiketler (<b>, <i>, <code>, <a href="..."> vb.) geçerlidir. Desteklenmeyen etiket veya kapanmamış işaret can't parse entities hatasına yol açar.
{
"chat_id": 123456789,
"text": "<b>Yedek</b> tamamlandi\nDosya: backup-2026-10-15.sql.gz",
"parse_mode": "HTML",
"link_preview_options": {"is_disabled": true}
}
Uzun metinlerde Telegram sınırını aşmamaya dikkat edin; aşımda API reddeder. Çok satırlı raporlarda önce özet satırı, gerekirse ikinci mesajda detay gönderin. Hassas veri (şifre, tam token, kişisel müşteri bilgisi) Telegram metnine yazılmamalıdır; kanal paylaşımlıysa sızıntı riski yüksektir.
Günlük Gönderim Planı
İş takvimine göre ifade seçin. Saat dilimi sunucu saati ile bot okuyucusunun beklentisi uyuşmazsa mesaj erken veya geç gider; cron timezone rehberi bu sapmayı azaltır.
| Amaç | Cron ifadesi | Anlam |
|---|---|---|
| İş günü sabah hatırlatma | 0 9 * * 1-5 | Pzt–Cum 09:00 |
| Her gün gece özeti | 0 23 * * * | Her gün 23:00 |
| Saatlik durum | 0 * * * * | Her saat başı |
| Haftalık rapor | 0 10 * * 1 | Her Pazartesi 10:00 |
Saatlik veya daha sık bildirimlerde gürültü artar; ekip kanalını boğmamak için yalnızca eşik aşıldığında mesaj gönderen bir koşul ekleyin. Sabit "hâlâ ayaktayız" mesajı yerine eşik tabanlı uyarı, okunabilirliği korur.
Dinamik Rapor Endpoint'i
Veritabanı veya dosya sisteminden okunan özet için Bot API'yi doğrudan crontab'dan çağırmak yerine kendi HTTPS uç noktanızı yazın. Endpoint gizli bir token ile korunmalı, raporu üretmeli ve ardından Telegram'a POST etmelidir.
<?php
// /var/www/app/public/cron/telegram-daily-report.php
header('Content-Type: application/json; charset=utf-8');
$secret = getenv('CRON_REPORT_SECRET') ?: '';
$auth = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
if ($secret === '' || !hash_equals('Bearer ' . $secret, $auth)) {
http_response_code(401);
echo json_encode(['ok' => false, 'error' => 'unauthorized']);
exit;
}
$orders = (int) file_get_contents('/var/run/app/orders-today.txt');
$text = "Gunluk siparis ozeti: {$orders}";
$token = getenv('TELEGRAM_BOT_TOKEN');
$chat = getenv('TELEGRAM_CHAT_ID');
$payload = json_encode([
'chat_id' => $chat,
'text' => $text,
], JSON_UNESCAPED_UNICODE);
$ch = curl_init("https://api.telegram.org/bot{$token}/sendMessage");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 20,
]);
$raw = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$tg = json_decode((string) $raw, true);
$ok = ($code >= 200 && $code < 300) && !empty($tg['ok']);
http_response_code($ok ? 200 : 502);
echo json_encode(['ok' => $ok, 'telegram' => $tg], JSON_UNESCAPED_UNICODE);
Bu uç nokta sunucu crontab'ından curl ile veya harici HTTP zamanlayıcı ile çağrılır. Webhook benzeri tetikleme desenleri için cron webhook tetikleme sayfasına bakabilirsiniz. Endpoint hızlı yanıt vermeli; uzun hesaplamayı arka plana bırakıp Telegram gönderimini kısa tutun. Raporu n8n içinde HTTP Request + Telegram düğümüyle üretmek isterseniz n8n zamanlanmış görev rehberindeki Schedule Trigger ve Production Webhook adımlarını bu Bot API çağrısına bağlayın.
Hata ve Yinelenen Mesaj Kontrolü
Telegram ve cron birleşiminde en sık görülen dört sorun:
Unauthorized / invalid token
Yanıtta Unauthorized görünür. Token yanlış kopyalanmış, başında/sonunda boşluk vardır veya revoke edilmiştir. getMe ile doğrulayın; ortam değişkenini cron'un gördüğünden emin olun.
chat not found / Forbidden
Yanlış chat ID, bottan silinmiş sohbet veya gruba eklenmemiş bot. getUpdates ile ID'yi yenileyin; grupta botun mesaj iznini kontrol edin.
can't parse entities
parse_mode açıkken metindeki özel karakterler veya hatalı HTML/Markdown bozulur. Geçici çözüm: parse_mode'u kaldırın; kalıcı çözüm: içeriği API kurallarına göre kaçışlayın.
Çift mesaj (yinelenen cron)
sendMessage varsayılan olarak idempotent değildir. Aynı dakika iki süreç çalışırsa iki mesaj gider. Çözüm: flock ile kilit, veritabanında "bugün gönderildi" bayrağı veya tek kullanımlık işlem anahtarı. Görev hiç çalışmıyorsa önce cron job çalışmıyor adımlarını izleyin; log için cron job log rehberi yardımcı olur.
cronjob.com.tr ile HTTP Tabanlı Telegram Gönderimi
Sunucuya crontab yazmadan sabit bir Telegram mesajı göndermek için panelden Bot API adresine zamanlanmış POST tanımlayabilirsiniz. Dinamik rapor için ise yukarıdaki gibi kendi endpoint'inizi hedefleyin; ürün, belirlediğiniz adrese HTTP isteğini zamanında gönderir.
- Sabit mesaj: URL
https://api.telegram.org/bot<TOKEN>/sendMessage, metotPOST, headerContent-Type: application/json, gövde{"chat_id":...,"text":"..."}. - Dinamik rapor: URL
https://uygulamaniz.com/cron/telegram-daily-report.php, metotPOST, headerAuthorization: Bearer <gizli-token>. - Zamanlama: Hazır aralık veya 5 alanlı cron ifadesi; saat dilimi iş bazında (varsayılan Europe/Istanbul).
- Başarı ölçütü: HTTP 200–399 ve bağlantı hatası olmaması. Telegram gövdesindeki
ok:falsedurumunu da endpoint'inizde HTTP 5xx'e çevirmek izlemeyi kolaylaştırır. - Timeout: Cron ifadeli işlerde en fazla 290 sn yanıt beklenir; Telegram çağrısı genelde saniyeler içinde biter.
- Bildirim: Üründe yerleşik Telegram hata bildirimi yoktur. Ardışık erişim hatalarında e-posta uyarısı vardır; Telegram kanalı sizin Bot API veya endpoint akışınızdır.
Ücretsiz hesapla denemek için ücretsiz cron job servisi sayfasındaki akışı izleyebilirsiniz. Token'ı URL yoluna yazmak yerine mümkünse kendi proxy endpoint'inizde tutmak log sızıntısını azaltır.
Sıkça Sorulan Sorular (SSS)
Cron ile Telegram mesajı göndermek için bot oluşturmak zorunlu mu?
Evet. Telegram Bot API yalnızca bot hesapları üzerinden çalışır. BotFather ile bot oluşturup aldığınız token olmadan api.telegram.org üzerinden sendMessage çağrısı yapılamaz.
Chat ID nedir ve nasıl öğrenilir?
Chat ID, botun mesaj göndereceği özel sohbetin veya grubun sayısal kimliğidir. Bota bir mesaj yazdıktan sonra getUpdates metodunu çağırarak message.chat.id alanından okuyabilirsiniz.
Aynı cron satırı iki kez çalışırsa Telegram'da çift mesaj gider mi?
Evet gidebilir. Telegram sendMessage isteği varsayılan olarak idempotent değildir. Yinelenen gönderimi azaltmak için uygulama tarafında kilit, tek kullanımlık işlem anahtarı veya gönderim kaydı tutmalısınız.
cronjob.com.tr yerleşik Telegram bildirimi sunar mı?
Hayır. Üründe yerleşik Telegram hata bildirimi yoktur. Sabit metin için Bot API adresine zamanlanmış POST tanımlayabilir veya dinamik rapor üreten kendi endpoint'inizi çağırabilirsiniz.
Hemen Ücretsiz Cron Job Oluşturun
Telegram Bot API veya rapor endpoint'inize POST'u cronjob.com.tr panelinden zamanlayın; HTTP 200–399 dışı yanıtlarda e-posta alın, son 7 günlük istek loglarını inceleyin. Ücretsizdir; kayıtta kredi kartı istenmez.
Ücretsiz Başla →