Bu bot, Schengen vizesi için randevu durumlarını otomatik olarak takip eder ve uygun randevular bulunduğunda Telegram üzerinden bildirim gönderir.
- 🔄 Belirtilen aralıklarla otomatik randevu durumu kontrolü
- 🌍 Kaynak ülke (
country_code
), hedef ülke (mission_code
) ve şehir (center
içinde) bazında filtreleme - 🏷️ Belirli vize tiplerine (
visa_type
) göre filtreleme - 🚦 Sadece 'açık' (
open
) veya 'bekleme listesi açık' (waitlist_open
) durumundaki randevuları bildirme - 📱 Telegram üzerinden anlık bildirimler
- ⏰ Özelleştirilebilir kontrol sıklığı (Cron formatı)
- 🚫 Telegram API rate limit yönetimi (dakikada gönderilen mesaj sayısını ve yeniden deneme süresini ayarlar)
- 🔍 Detaylı hata ayıklama modu (
DEBUG=true
) - 💾 Gönderilen bildirimleri ID bazlı önbelleğe alarak tekrar gönderimi engelleme
- Node.js (v16 veya üzeri)
- Paket yöneticisi (npm, yarn veya pnpm)
- Telegram Bot Token'ı
- Telegram Kanal/Grup ID'si
Bot'un sürekli çalışabilmesi için aşağıdaki seçeneklerden birine ihtiyacınız var:
-
VPS (Virtual Private Server) - Önerilen 🌟
- 7/24 kesintisiz çalışma
- Düşük maliyetli (aylık 50-100 lira)
- Önerilen sağlayıcılar (dolar bazlı): DigitalOcean, Linode, Vultr, OVH
- Önerilen sağlayıcılar (türk lirası bazlı): DeHost, Natro, Turhost
-
Kişisel Bilgisayar
- 7/24 açık kalması gerekir
- Elektrik kesintilerinden etkilenir
- İnternet bağlantısı sürekli olmalı
- Bilgisayarın uyku moduna geçmesi engellenmelidir
-
Raspberry Pi
- Düşük güç tüketimi
- 7/24 çalıştırılabilir
- Ekonomik çözüm
- Kurulum biraz teknik bilgi gerektirir
⚠️ Önemli Not: Bot'un randevuları kaçırmaması için sürekli çalışır durumda olması gerekir. VPS kullanımı, kesintisiz çalışma ve düşük maliyet açısından en ideal çözümdür.
- Node.js (v16 veya üzeri)
- Paket yöneticisi (npm, yarn veya pnpm)
- Telegram Bot Token'ı
- Telegram Kanal/Grup ID'si
- Telegram'da @BotFather ile konuşma başlatın
/newbot
komutunu gönderin- Bot için bir isim belirleyin
- Bot için bir kullanıcı adı belirleyin (sonu 'bot' ile bitmeli)
- BotFather size bir API Token verecek, bu token'ı kaydedin.
- Bir Telegram kanalı veya grubu oluşturun.
- Oluşturduğunuz botu bu kanala/gruba ekleyin ve yönetici yetkisi verin.
- Kanala/gruba herhangi bir mesaj gönderin.
- Tarayıcınızda şu adresi açın:
https://api.telegram.org/bot<BOT_TOKEN>/getUpdates
<BOT_TOKEN>
kısmını adım 1'de aldığınız API Token ile değiştirin.
- Açılan sayfada (JSON çıktısı)
"chat":{"id":-100xxxxxxxxxx}
şeklinde bir alan arayın. id
değerini (başındaki eksi işareti dahil) kaydedin. Bu sizin Kanal/Grup ID'nizdir (örn:-100123456789
).
- Projeyi bilgisayarınıza indirin veya klonlayın:
git clone https://github.com/byigitt/visa-checker.git
cd visa-checker
- Gerekli Node.js paketlerini yükleyin:
# npm kullanıyorsanız
npm install
# yarn kullanıyorsanız
yarn install
# pnpm kullanıyorsanız
pnpm install
.env.example
dosyasını kopyalayarak.env
adında yeni bir dosya oluşturun. Windows'ta:
copy .env.example .env
Linux/macOS'ta:
cp .env.example .env
- Yeni oluşturduğunuz
.env
dosyasını bir metin düzenleyici ile açın ve aşağıdaki gibi düzenleyin:
# .env Dosyası Örneği
# Telegram Yapılandırması / Telegram Configuration
TELEGRAM_BOT_TOKEN=your_bot_token_here # Adım 1'de aldığınız Bot Token
TELEGRAM_CHAT_ID=your_chat_id_here # Adım 2'de aldığınız Kanal/Grup ID (örn: -100123456789)
# Opsiyonel Telegram Ayarları (Varsayılan değerleri kullanmak için boş bırakılabilir)
TELEGRAM_RATE_LIMIT_MINUTES= # Default: 15 (Dakikada gönderilecek maksimum mesaj)
TELEGRAM_RETRY_AFTER= # Default: 5000 (Rate limit durumunda bekleme süresi ms)
# Uygulama Yapılandırması / Application Configuration
CHECK_INTERVAL=*/5 * * * * # Kontrol sıklığı (Cron formatı, varsayılan: 5 dakikada bir)
TARGET_COUNTRY=tur # Takip edilecek KAYNAK ülke kodu (API'deki country_code, örn: tur, gbr, are).
# Tüm kaynak ülkeler için 'all' yazılabilir.
# Randevu Filtreleme / Appointment Filtering
CITIES=Ankara,Istanbul # Takip edilecek şehirler (API'deki center alanından çıkarılır, virgülle ayrılır, boş bırakılırsa tüm şehirler). Örnek: "Netherlands Visa Application Centre - Ankara" için "Ankara".
MISSION_COUNTRY=nld,fra # Takip edilecek HEDEF ülke kodları (API'deki mission_code, küçük harfle, virgülle ayrılır, örn: nld,fra,deu). Bu alan zorunludur.
VISA_SUBCATEGORIES=Tourism,Business # Takip edilecek vize tipleri (API'deki visa_type alanıyla kısmi eşleşme, virgülle ayrılır, boş bırakılırsa tüm tipler). Örnek: "TOURISM VISA APPLICATION", "BUSINESS VISA APPLICATION"
# Hata Ayıklama / Debug Configuration
DEBUG=false # Detaylı logları görmek için 'true' yapın
# Opsiyonel API Ayarları (Varsayılanları kullanmak için boş bırakılabilir)
VISA_API_URL= # API URL (Default: https://api.visasbot.com/api/visa/list)
MAX_RETRIES= # API hata deneme sayısı (Default: 3)
RETRY_DELAY_BASE= # API denemeleri arası bekleme (Default: 1000ms)
# Opsiyonel Önbellek Ayarları (Varsayılanları kullanmak için boş bırakılabilir)
MAX_CACHE_SIZE= # Maksimum önbellek boyutu (Default: 1000)
CACHE_CLEANUP_INTERVAL= # Önbellek temizleme sıklığı (Default: 86400000ms - 24 saat)
Önemli .env
Açıklamaları:
TARGET_COUNTRY
: API yanıtındakicountry_code
alanına göre filtreler (örn:tur
,gbr
). Tüm ülkeler içinall
yazılabilir. Varsayılan:tur
.CITIES
: API yanıtındakicenter
alanının sonundaki şehir ismine göre filtreler. Örnekcenter
değerleri:Netherlands Visa Application Centre - Antalya
,Bulgaria Visa Application Center, Ankara
. Virgülle ayrılır. Boş bırakılırsa şehir filtresi uygulanmaz.MISSION_COUNTRY
: API yanıtındakimission_code
alanına göre (küçük harfle) filtreler (örn:nld
,fra
). Virgülle ayrılır. Bu alan zorunludur, varsayılan olaraknld
kullanılır eğer boş bırakılırsa.VISA_SUBCATEGORIES
: API yanıtındakivisa_type
alanının içinde geçen metinlere göre (büyük/küçük harf duyarsız) filtreler (örn:Tourism
,Job Seeker
). Virgülle ayrılır. Boş bırakılırsa vize tipi filtresi uygulanmaz.
- TypeScript kodunu JavaScript'e derleyin:
# npm kullanıyorsanız
npm run build
# yarn kullanıyorsanız
yarn build
# pnpm kullanıyorsanız
pnpm build
- Geliştirme modunda (kod değişikliklerinde otomatik yeniden başlar):
# npm kullanıyorsanız
npm run dev
# yarn kullanıyorsanız
yarn dev
# pnpm kullanıyorsanız
pnpm dev
- Production modunda (derlenmiş kodu çalıştırır):
# npm kullanıyorsanız
npm start
# yarn kullanıyorsanız
yarn start
# pnpm kullanıyorsanız
pnpm start
Bot başarıyla başladığında konsolda Vize randevu kontrolü başlatıldı...
mesajını ve yapılandırma detaylarını görmelisiniz.
TELEGRAM_BOT_TOKEN
: Zorunlu. Telegram bot token'ınız.TELEGRAM_CHAT_ID
: Zorunlu. Telegram kanal/grup ID'niz.TELEGRAM_RATE_LIMIT_MINUTES
(Opsiyonel): Dakikada gönderilebilecek maksimum mesaj sayısı (Varsayılan: 15).TELEGRAM_RETRY_AFTER
(Opsiyonel): Rate limit aşıldığında beklenecek süre (milisaniye) (Varsayılan: 5000).
CHECK_INTERVAL
(Opsiyonel): Randevu kontrolü sıklığı (Cron formatı, Varsayılan:*/5 * * * *
- 5 dakikada bir).TARGET_COUNTRY
(Opsiyonel): Takip edilecek kaynak ülke kodu (API'dekicountry_code
, küçük harfle, örn:tur
,gbr
). Varsayılan:tur
. Tüm ülkeler içinall
yazılabilir.CITIES
(Opsiyonel): Takip edilecek şehirler (API'dekicenter
alanından çıkarılır, virgülle ayrılır, büyük/küçük harf duyarsız). Boş bırakılırsa filtre uygulanmaz. Örnekcenter
değerleri:Netherlands Visa Application Centre - Antalya
içinAntalya
,Bulgaria Visa Application Center, Ankara
içinAnkara
.MISSION_COUNTRY
(Opsiyonel): Randevusu takip edilecek hedef ülke kodları (API'dekimission_code
, küçük harfle, virgülle ayrılır, örn:nld,fra,deu
). Boş bırakılırsa varsayılan olaraknld
kullanılır.VISA_SUBCATEGORIES
(Opsiyonel): Takip edilecek vize tipleri (API'dekivisa_type
alanıyla kısmi eşleşme, virgülle ayrılır, büyük/küçük harf duyarsız). Boş bırakılırsa filtre uygulanmaz. Örnekler:Tourism
,Job Seeker
,Family visit
.
VISA_API_URL
(Opsiyonel): Kullanılacak API adresi. (Varsayılan:https://api.visasbot.com/api/visa/list
)MAX_RETRIES
(Opsiyonel): API hatalarında tekrar deneme sayısı (Varsayılan: 3).RETRY_DELAY_BASE
(Opsiyonel): API hataları arasında bekleme süresi (ms) (Varsayılan: 1000).MAX_CACHE_SIZE
(Opsiyonel): Önbellekteki maksimum randevu ID'si sayısı (Varsayılan: 1000).CACHE_CLEANUP_INTERVAL
(Opsiyonel): Önbellek boyut kontrolü ve temizleme sıklığı (ms) (Varsayılan: 86400000 - 24 saat).DEBUG
(Opsiyonel): Detaylı log kayıtları için hata ayıklama modu (true
/false
) (Varsayılan:false
).
Bot, filtrelerinize uyan ve durumu open
veya waitlist_open
olan bir randevu bulduğunda, önbellekte yoksa src/services/telegram.ts
içindeki formatMessage
fonksiyonuna göre Telegram'a şu formatta bir mesaj gönderir (emojiler ve bazı alanlar duruma göre değişebilir):
*✅ YENİ RANDEVU DURUMU! *
🏢 *Merkez:* Netherlands Visa Application Centre - Ankara
🌍 *Ülke/Misyon:* TUR -> NLD
🛂 *Kategori:* KISA DONEM VIZE / SHORT TERM VISA
📄 *Tip:* TURIZM VIZE BASVURUSU / TOURISM VISA APPLICATION
🚦 *Durum:* ✅ open
🗓️ *Son Müsait Tarih:* 22/07/2025
📊 *Takip Sayısı:* 6
⏰ *Son Kontrol:* 31 May 2025 12:02:56
(Not: Emoji ve format, randevu durumuna göre değişebilir: ✅ open
, ⏳ waitlist_open
)
-
Bot çalışıyor mu?
- Konsolda
Vize randevu kontrolü başlatıldı...
mesajını görmelisiniz. DEBUG=true
yaparak.env
dosyasında hata ayıklama modunu açın. KonsoldaGeçerli randevu bulundu...
veyaSkipping appointment...
gibi daha detaylı loglar görmelisiniz.
- Konsolda
-
Telegram bildirimleri gelmiyor
.env
dosyasındakiTELEGRAM_BOT_TOKEN
doğru mu kontrol edin..env
dosyasındakiTELEGRAM_CHAT_ID
doğru mu ve başında-
işareti var mı kontrol edin.- Botu Telegram kanalınıza/grubunuza ekleyip yönetici yetkisi verdiğinizden emin olun.
DEBUG=true
yapıp konsoldaYeni randevu bildirimi gönderiliyor...
veBildirim başarıyla gönderildi...
loglarını arayın. Hata varsa loglarda görünmelidir.
-
Belirli bir şehir/ülke/vize tipi için randevuları nasıl takip ederim?
.env
dosyasındaCITIES
,MISSION_COUNTRY
veVISA_SUBCATEGORIES
değerlerini istediğiniz kriterlere göre (virgülle ayırarak) düzenleyin. Açıklamalar için.env
örneğine bakın.MISSION_COUNTRY
için API'dekimission_code
değerlerini (örn:nld
,fra
,deu
) kullanın.VISA_SUBCATEGORIES
için API'dekivisa_type
içinde geçen kelimeleri kullanın.
-
Rate limit hatası alıyorum
- Telegram çok sık mesaj gönderildiği için botu geçici olarak engellemiş olabilir.
.env
dosyasındaTELEGRAM_RATE_LIMIT_MINUTES
değerini artırarak dakikada gönderilecek mesaj sayısını azaltabilirsiniz (aslında bu ayarconfig.telegram.rateLimit
olarak koda yansır ve Telegram servisi bu değeri doğrudan kullanır, bu nedenle kontroller arası süreyi etkiler)..env
dosyasındaCHECK_INTERVAL
değerini değiştirerek kontroller arasındaki süreyi artırabilirsiniz (örn:*/10 * * * *
10 dakikada bir).
-
API URL'si değişirse ne yapmalıyım?
- Mecburen yeni update beklemeniz gerekecek.
Bir hata bulduysanız veya öneriniz varsa, lütfen GitHub üzerinden issue açın.
Bu proje MIT lisansı altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakın.