social-agent-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,824 @@
1
+ # Telegram Platform Bilgi Dosyasi
2
+
3
+ ## Genel Bakis
4
+
5
+ Telegram, bulut tabanli bir mesajlasma platformudur. Otomasyon icin birincil yontem **Bot API**'dir. Bot API ucretsizdir, HTTP tabanlidir ve JSON formatinda calisir. Tum bot istekleri `https://api.telegram.org/bot<TOKEN>/<METHOD>` adresine yapilir.
6
+
7
+ ---
8
+
9
+ ## 1. Bot Olusturma ve Yonetim
10
+
11
+ ### @BotFather Komutlari
12
+
13
+ Bot olusturma ve yonetim isleri Telegram icerisinde `@BotFather` botu uzerinden yapilir.
14
+
15
+ | Komut | Aciklama |
16
+ |---|---|
17
+ | `/newbot` | Yeni bot olusturur. Once bot adi, sonra kullanici adi istenir. Kullanici adi `bot` ile bitmeli. |
18
+ | `/token` | Mevcut bir botun token'ini gosterir. |
19
+ | `/revoke` | Token'i iptal edip yenisini uretir. Eski token aninda gecersiz olur. |
20
+ | `/setname` | Bot gorunen adini degistirir. |
21
+ | `/setdescription` | Bot aciklamasini degistirir (profil sayfasinda gorunur). |
22
+ | `/setabouttext` | Bot hakkinda kisa bilgi (sohbet listesinde gorunur). |
23
+ | `/setuserpic` | Bot profil resmini degistirir. |
24
+ | `/setcommands` | Bot komut listesini ayarlar (/ menusunde gorunur). |
25
+ | `/setinline` | Inline modu etkinlestirir. |
26
+ | `/setjoingroups` | Botun gruplara eklenip eklenemeyecegini ayarlar. |
27
+ | `/setprivacy` | Gruptaki tum mesajlari mi yoksa sadece komutlari mi alacagini belirler. |
28
+ | `/deletebot` | Botu kalici olarak siler. |
29
+ | `/mybots` | Tum botlarinizi listeler ve yonetim panelini acar. |
30
+
31
+ ### Token Yonetimi
32
+
33
+ - Token formati: `123456789:ABCDefGHIjklMNOpqrsTUVwxyz-0123456789`
34
+ - Token, bot ID (numerik) ve gizli anahtardan olusur.
35
+ - Token ifsa olursa `/revoke` ile hemen yenileyin.
36
+ - Token'i kaynak kodda veya public repo'larda saklamayin. Ortam degiskeni (env var) kullanin.
37
+
38
+ ---
39
+
40
+ ## 2. Bot API - Temel Metodlar
41
+
42
+ ### Mesaj Gonderme
43
+
44
+ #### `sendMessage`
45
+
46
+ Metin mesaji gonderir.
47
+
48
+ ```
49
+ POST https://api.telegram.org/bot<TOKEN>/sendMessage
50
+ ```
51
+
52
+ | Parametre | Tip | Zorunlu | Aciklama |
53
+ |---|---|---|---|
54
+ | `chat_id` | Integer/String | Evet | Hedef sohbet ID veya `@kanal_adi` |
55
+ | `text` | String | Evet | Mesaj metni (1-4096 karakter) |
56
+ | `parse_mode` | String | Hayir | `HTML`, `Markdown` veya `MarkdownV2` |
57
+ | `entities` | Array | Hayir | Ozel metin varliklari (parse_mode yerine) |
58
+ | `disable_web_page_preview` | Boolean | Hayir | Link onizlemesini kapatir |
59
+ | `disable_notification` | Boolean | Hayir | Sessiz mesaj gonderir (bildirim calmaz) |
60
+ | `protect_content` | Boolean | Hayir | Mesajin iletilmesini ve kaydedilmesini engeller |
61
+ | `reply_to_message_id` | Integer | Hayir | Yanit verilecek mesaj ID |
62
+ | `reply_markup` | Object | Hayir | InlineKeyboard, ReplyKeyboard, vs. |
63
+
64
+ #### `sendPhoto`
65
+
66
+ Fotograf gonderir.
67
+
68
+ | Parametre | Tip | Zorunlu | Aciklama |
69
+ |---|---|---|---|
70
+ | `chat_id` | Integer/String | Evet | Hedef sohbet ID |
71
+ | `photo` | InputFile/String | Evet | Dosya, file_id veya URL |
72
+ | `caption` | String | Hayir | Aciklama (0-1024 karakter) |
73
+ | `parse_mode` | String | Hayir | Aciklama formatlama modu |
74
+
75
+ #### `sendVideo`
76
+
77
+ Video gonderir.
78
+
79
+ | Parametre | Tip | Zorunlu | Aciklama |
80
+ |---|---|---|---|
81
+ | `chat_id` | Integer/String | Evet | Hedef sohbet ID |
82
+ | `video` | InputFile/String | Evet | Dosya, file_id veya URL |
83
+ | `caption` | String | Hayir | Aciklama (0-1024 karakter) |
84
+ | `duration` | Integer | Hayir | Video suresi (saniye) |
85
+ | `width` | Integer | Hayir | Video genisligi |
86
+ | `height` | Integer | Hayir | Video yuksekligi |
87
+ | `thumbnail` | InputFile | Hayir | Kucuk resim (thumbnail) |
88
+ | `supports_streaming` | Boolean | Hayir | Streaming destegi |
89
+
90
+ #### `sendDocument`
91
+
92
+ Herhangi bir dosya gonderir.
93
+
94
+ | Parametre | Tip | Zorunlu | Aciklama |
95
+ |---|---|---|---|
96
+ | `chat_id` | Integer/String | Evet | Hedef sohbet ID |
97
+ | `document` | InputFile/String | Evet | Dosya, file_id veya URL |
98
+ | `caption` | String | Hayir | Aciklama (0-1024 karakter) |
99
+ | `thumbnail` | InputFile | Hayir | Kucuk resim |
100
+
101
+ #### `sendMediaGroup`
102
+
103
+ Birden fazla medya (album) gonderir.
104
+
105
+ | Parametre | Tip | Zorunlu | Aciklama |
106
+ |---|---|---|---|
107
+ | `chat_id` | Integer/String | Evet | Hedef sohbet ID |
108
+ | `media` | Array | Evet | InputMediaPhoto ve/veya InputMediaVideo dizisi (2-10 oge) |
109
+
110
+ Onemli: `sendMediaGroup` icindeki her bir medya ogesi icin `caption` ayarlanabilir. Yalnizca ilk ogenin `caption` degeri gorunur sekilde gosterilir. Tum medya turleri karisik olabilir (foto + video).
111
+
112
+ #### `sendAnimation`
113
+
114
+ GIF veya MP4 animasyon gonderir (sessiz, otomatik oynatilan).
115
+
116
+ #### `sendAudio`
117
+
118
+ Ses dosyasi gonderir (muzik olarak, sarki bilgileriyle).
119
+
120
+ #### `sendVoice`
121
+
122
+ Sesli mesaj gonderir (.ogg formatinda).
123
+
124
+ #### `sendSticker`
125
+
126
+ Cikartma gonderir (.webp, .tgs veya .webm).
127
+
128
+ ### Mesaj Duzenleme ve Silme
129
+
130
+ | Metod | Aciklama |
131
+ |---|---|
132
+ | `editMessageText` | Metin mesajini duzenler. |
133
+ | `editMessageCaption` | Medya aciklamasini duzenler. |
134
+ | `editMessageMedia` | Medyanin kendisini degistirir. |
135
+ | `editMessageReplyMarkup` | Sadece reply markup'i degistirir. |
136
+ | `deleteMessage` | Mesaji siler. Bot sadece kendi gonderdigi veya admin oldugu yerdeki mesajlari silebilir. 48 saat siniri vardir. |
137
+
138
+ ### Guncellemeleri Alma
139
+
140
+ #### `getUpdates` (Polling)
141
+
142
+ ```
143
+ GET https://api.telegram.org/bot<TOKEN>/getUpdates?offset=<UPDATE_ID>&timeout=30
144
+ ```
145
+
146
+ | Parametre | Tip | Aciklama |
147
+ |---|---|---|
148
+ | `offset` | Integer | Son islenen update_id + 1. Eski guncellemeleri onaylar. |
149
+ | `limit` | Integer | Alinacak maks. guncelleme sayisi (1-100, varsayilan 100). |
150
+ | `timeout` | Integer | Long polling suresi (saniye). 0 = short polling. Onerilen: 25-30. |
151
+ | `allowed_updates` | Array | Alinacak guncelleme tipleri. Ornek: `["message", "callback_query"]` |
152
+
153
+ Long polling kullanin: `timeout=30` ayarlayin. Bu, sunucunun yeni guncelleme gelene kadar baglantini acik tutmasini saglar. Short polling (timeout=0) gereksiz istek yuku olusturur.
154
+
155
+ #### `setWebhook`
156
+
157
+ ```
158
+ POST https://api.telegram.org/bot<TOKEN>/setWebhook
159
+ ```
160
+
161
+ | Parametre | Tip | Aciklama |
162
+ |---|---|---|
163
+ | `url` | String | HTTPS URL (self-signed sertifika kabul edilir). Bos string webhook'u kaldirir. |
164
+ | `certificate` | InputFile | Self-signed sertifika (opsiyonel). |
165
+ | `max_connections` | Integer | Maks. esanli baglanti (1-100, varsayilan 40). |
166
+ | `allowed_updates` | Array | Alinacak guncelleme tipleri. |
167
+ | `secret_token` | String | Webhook isteklerini dogrulamak icin gizli token (1-256 karakter). `X-Telegram-Bot-Api-Secret-Token` header'inda gonderilir. |
168
+
169
+ Onemli notlar:
170
+ - Webhook ve getUpdates ayni anda kullanilamaz.
171
+ - Webhook URL'si HTTPS olmalidir.
172
+ - Port secenekleri: 443, 80, 88, 8443.
173
+ - Webhook ayarlandiktan sonra Telegram, her yeni guncellemeyi JSON POST olarak URL'nize gonderir.
174
+ - `deleteWebhook` ile webhook'u kaldirabilirsiniz.
175
+
176
+ ---
177
+
178
+ ## 3. Kanal Yonetimi ve Bot ile Gonderim
179
+
180
+ ### Kanal Turleri
181
+
182
+ | Ozellik | Kanal | Grup | Supergrup |
183
+ |---|---|---|---|
184
+ | Uyeler | Sinirsiz | 200'e kadar | 200.000'e kadar |
185
+ | Mesaj gonderme | Sadece adminler | Tum uyeler | Tum uyeler (ayarlanabilir) |
186
+ | Mesaj gecmisi | Yeni uyeler gorebilir | Yeni uyeler goremez | Ayarlanabilir |
187
+ | Chat ID formati | Negatif sayi (genelde -100 ile baslar) | Negatif sayi | Negatif sayi (-100 ile baslar) |
188
+ | Kullanici adi | `@kanal_adi` olabilir | Opsiyonel | Opsiyonel |
189
+ | Mesaj imzasi | Admin adi veya kanal adi | Gonderenin adi | Gonderenin adi |
190
+
191
+ ### Bot ile Kanala Gonderim
192
+
193
+ 1. Botu kanala admin olarak ekleyin.
194
+ 2. Bot'a "Mesaj Gonderme" izni verin.
195
+ 3. `chat_id` olarak `@kanal_kullanici_adi` veya kanalin numerik ID'sini kullanin.
196
+
197
+ ```
198
+ POST /sendMessage
199
+ {
200
+ "chat_id": "@kanal_adi",
201
+ "text": "Merhaba kanal!"
202
+ }
203
+ ```
204
+
205
+ ### Admin Izinleri
206
+
207
+ Bot'un kanaldaki islevleri admin izinlerine baglidir:
208
+
209
+ | Izin | Aciklama |
210
+ |---|---|
211
+ | Mesaj gonderme | Metin, medya, dosya gonderme |
212
+ | Mesaj duzenleme | Kendi mesajlarini ve baskalarinin mesajlarini duzenleme |
213
+ | Mesaj silme | Herhangi bir mesaji silme |
214
+ | Davet linki yonetimi | Ozel davet linkleri olusturma |
215
+ | Sohbet bilgisini duzenleme | Kanal adi, aciklama, foto degistirme |
216
+ | Mesaj sabitleme | Mesajlari sabitleme/kaldirma |
217
+
218
+ ---
219
+
220
+ ## 4. URL Yapisi
221
+
222
+ | URL Formati | Aciklama | Ornek |
223
+ |---|---|---|
224
+ | `t.me/USERNAME` | Kullanici veya bot profili | `t.me/mybot` |
225
+ | `t.me/CHANNEL` | Kanal veya genel grup | `t.me/mychannel` |
226
+ | `t.me/CHANNEL/MESSAGE_ID` | Belirli bir mesaja link | `t.me/mychannel/42` |
227
+ | `t.me/+INVITE_HASH` | Ozel davet linki | `t.me/+aBcDeFgHiJk` |
228
+ | `t.me/BOT_USERNAME?start=PAYLOAD` | Bot'u payload ile baslatma | `t.me/mybot?start=ref123` |
229
+ | `t.me/BOT_USERNAME?startgroup=PAYLOAD` | Bot'u gruba ekleme | `t.me/mybot?startgroup=setup` |
230
+ | `tg://resolve?domain=USERNAME` | Deep link (uygulama icinden acar) | `tg://resolve?domain=mybot` |
231
+
232
+ ---
233
+
234
+ ## 5. Dosya ve Medya Sinirlari
235
+
236
+ ### Genel Bot API Sinirlari
237
+
238
+ | Medya Tipi | Maks. Boyut (Bot API) | Maks. Boyut (Yerel Bot API) | Notlar |
239
+ |---|---|---|---|
240
+ | Fotograf yukleme | 10 MB | 2 GB | Sunucu tarafinda sikistirilir |
241
+ | Video yukleme | 50 MB | 2 GB | |
242
+ | Dokuuman yukleme | 50 MB | 2 GB | |
243
+ | Ses dosyasi | 50 MB | 2 GB | |
244
+ | Sesli mesaj | 50 MB | 2 GB | |
245
+ | Sticker (statik) | 512 KB | 512 KB | .webp, 512x512 px |
246
+ | Sticker (animasyonlu) | 64 KB | 64 KB | .tgs (Lottie) |
247
+ | Sticker (video) | 256 KB | 256 KB | .webm |
248
+ | Genel dosya indirme | 20 MB | 2 GB | `getFile` metodu ile |
249
+
250
+ ### Fotograf Ozellikleri
251
+
252
+ - Telegram, yuklenlen fotograflari otomatik olarak sikistirir.
253
+ - En uzun kenar 1280 piksel olacak sekilde yeniden boyutlandirilir.
254
+ - Orijinal kalitede gondermek icin `sendDocument` kullanin (fotograf olarak degil, dosya olarak gonderilir).
255
+ - JPEG, PNG, BMP, GIF (tek kare), WebP desteklenir.
256
+ - Toplam fotograf boyutu 10 MB'i asmamalidir.
257
+
258
+ ### Video Ozellikleri
259
+
260
+ - MP4 formati desteklenir (H.264 codec, AAC ses).
261
+ - Diger formatlar da gonderilebilir ama uygulamada oynatma garanti degildir.
262
+ - Thumbnail (kucuk resim): JPEG, maks. 320x320 piksel, 200 KB'den kucuk olmali.
263
+ - `sendVideo` ile gonderilen videolar uygulamada inline oynatilir.
264
+ - `sendDocument` ile gonderilen videolar dosya olarak gosterilir, inline oynatilmaz.
265
+
266
+ ### Yerel Bot API (Local Bot API Server)
267
+
268
+ Buyuk dosyalar icin Telegram, acik kaynakli yerel Bot API sunucusu saglar:
269
+ - 2 GB'a kadar dosya yukleme ve indirme.
270
+ - Yerel dosya sistemi uzerinden dosya gonderme (sunucu ayni makinedeyse).
271
+ - Webhook icin HTTP destegi (HTTPS zorunlulugu yok).
272
+ - Kurulum: `https://github.com/tdlib/telegram-bot-api` reposundan derlenebilir.
273
+
274
+ ---
275
+
276
+ ## 6. Hiz Sinirlari (Rate Limiting)
277
+
278
+ ### Genel Sinirlar
279
+
280
+ | Sinir | Deger | Aciklama |
281
+ |---|---|---|
282
+ | Farkli sohbetlere mesaj | 30 mesaj/saniye | Toplu gonderimde bu sinira uyun |
283
+ | Ayni gruba mesaj | 20 mesaj/dakika | Grup icerisindeki islemler icin |
284
+ | Ayni kanala mesaj | 20 mesaj/dakika | Kanal gonderimlerinde gecerli |
285
+ | Toplu mesaj (broadcast) | ~30 mesaj/saniye | 30 farkli kullaniciya saniyede 1'er mesaj |
286
+ | API istegi genel | Belirtilmemis | Asiri istek 429 hatasi dondurur |
287
+
288
+ ### 429 Too Many Requests Hatasi
289
+
290
+ Rate limit asiminida API su yaniti dondurur:
291
+
292
+ ```json
293
+ {
294
+ "ok": false,
295
+ "error_code": 429,
296
+ "description": "Too Many Requests: retry after 35",
297
+ "parameters": {
298
+ "retry_after": 35
299
+ }
300
+ }
301
+ ```
302
+
303
+ - `retry_after` degerini (saniye) bekleyin, sonra tekrar deneyin.
304
+ - Exponential backoff stratejisi uygulayin.
305
+ - Toplu gonderim yaparken mesajlar arasinda en az 33ms (1/30 saniye) bekleyin.
306
+
307
+ ### Toplu Mesaj Gonderim Stratejisi
308
+
309
+ ```
310
+ 1. Kuyruk olusturun (message queue).
311
+ 2. Her mesaj gonderdikten sonra en az 35ms bekleyin.
312
+ 3. Ayni sohbete ardisik mesaj gonderiyorsaniz 3 saniye bekleyin.
313
+ 4. 429 hatasi alindiginda retry_after suresi kadar bekleyin.
314
+ 5. Basarisiz mesajlari kuyruga geri ekleyip yeniden deneyin.
315
+ ```
316
+
317
+ ---
318
+
319
+ ## 7. Mesaj Formatlama
320
+
321
+ ### Parse Mode Secenekleri
322
+
323
+ #### HTML
324
+
325
+ ```html
326
+ <b>kalin</b>
327
+ <i>italik</i>
328
+ <u>alti cizili</u>
329
+ <s>ustu cizili</s>
330
+ <tg-spoiler>spoiler</tg-spoiler>
331
+ <a href="https://ornek.com">link</a>
332
+ <a href="tg://user?id=123456789">kullanici mention</a>
333
+ <code>tek satirlik kod</code>
334
+ <pre>cok satirlik kod blogu</pre>
335
+ <pre><code class="language-python">sozdizimi vurgulu kod</code></pre>
336
+ <blockquote>alinti</blockquote>
337
+ <blockquote expandable>genisletilebilir alinti</blockquote>
338
+ ```
339
+
340
+ #### MarkdownV2
341
+
342
+ ```
343
+ *kalin*
344
+ _italik_
345
+ __alti cizili__
346
+ ~ustu cizili~
347
+ ||spoiler||
348
+ [link metni](https://ornek.com)
349
+ [kullanici mention](tg://user?id=123456789)
350
+ `tek satirlik kod`
351
+ ```pre
352
+ cok satirlik kod
353
+ ```pre
354
+ ```python
355
+ sozdizimi vurgulu kod
356
+ ```pre
357
+ >alinti (her satirin basinda > olmali)
358
+ ```
359
+
360
+ **MarkdownV2 Ozel Karakter Kacirma (Escape):**
361
+
362
+ Su karakterlerin onune `\` konulmalidir:
363
+ ```
364
+ _ * [ ] ( ) ~ ` > # + - = | { } . !
365
+ ```
366
+
367
+ Ornek: `Fiyat 10\\.99 TL` (nokta kaciriliyor)
368
+
369
+ #### Markdown (Eski - Onerilen MarkdownV2)
370
+
371
+ ```
372
+ *kalin*
373
+ _italik_
374
+ [link](https://ornek.com)
375
+ `tek satirlik kod`
376
+ ```pre
377
+ cok satirlik kod
378
+ ```pre
379
+ ```
380
+
381
+ Eski Markdown sinirlidir. MarkdownV2 veya HTML kullanin.
382
+
383
+ ### Entity Tipleri
384
+
385
+ Mesaj varliklari (entities) `parse_mode` kullanmadan formatlama yapmanizi saglar:
386
+
387
+ | Entity Tipi | Aciklama |
388
+ |---|---|
389
+ | `bold` | Kalin yazi |
390
+ | `italic` | Italik yazi |
391
+ | `underline` | Alti cizili |
392
+ | `strikethrough` | Ustu cizili |
393
+ | `spoiler` | Spoiler (tiklaninca gorunur) |
394
+ | `code` | Tek satirlik kod |
395
+ | `pre` | Kod blogu |
396
+ | `text_link` | Tiklanabilir URL |
397
+ | `text_mention` | Kullanici mention (kullanici adi olmayanlar icin) |
398
+ | `url` | Otomatik algilanan URL |
399
+ | `email` | Otomatik algilanan e-posta |
400
+ | `phone_number` | Otomatik algilanan telefon numarasi |
401
+ | `hashtag` | Hashtag |
402
+ | `cashtag` | Cashtag ($USD gibi) |
403
+ | `bot_command` | Bot komutu (/start gibi) |
404
+ | `mention` | @kullaniciadi mention |
405
+ | `blockquote` | Alinti blogu |
406
+ | `expandable_blockquote` | Genisletilebilir alinti |
407
+ | `custom_emoji` | Ozel emoji |
408
+
409
+ ---
410
+
411
+ ## 8. Klavye ve Butonlar
412
+
413
+ ### Inline Keyboard (Mesaj Icinde Butonlar)
414
+
415
+ Mesajin altinda gorunen butonlardir. Kullanici tiklayinca `callback_query` olusur.
416
+
417
+ ```json
418
+ {
419
+ "reply_markup": {
420
+ "inline_keyboard": [
421
+ [
422
+ {"text": "Buton 1", "callback_data": "btn1"},
423
+ {"text": "Buton 2", "callback_data": "btn2"}
424
+ ],
425
+ [
426
+ {"text": "Web Sayfasi", "url": "https://ornek.com"}
427
+ ],
428
+ [
429
+ {"text": "Paylas", "switch_inline_query": "arama sorgusu"}
430
+ ]
431
+ ]
432
+ }
433
+ }
434
+ ```
435
+
436
+ Inline buton tipleri:
437
+
438
+ | Parametre | Aciklama |
439
+ |---|---|
440
+ | `callback_data` | Tiklaninca bot'a callback_query gonderir (1-64 byte) |
441
+ | `url` | Tiklaninca URL acar |
442
+ | `switch_inline_query` | Baska sohbette inline sorgu baslatir |
443
+ | `switch_inline_query_current_chat` | Ayni sohbette inline sorgu baslatir |
444
+ | `login_url` | Telegram Login ile web sitesine giris |
445
+ | `web_app` | Web App acar |
446
+ | `pay` | Odeme butonu (sadece ilk buton olabilir) |
447
+
448
+ Callback query'ye yanit vermek icin `answerCallbackQuery` kullanin. Bu, butondaki yukleniyor animasyonunu durdurur.
449
+
450
+ ### Reply Keyboard (Ozel Klavye)
451
+
452
+ Kullanicinin klavyesini degistirir. Normal mesaj olarak gonderilir.
453
+
454
+ ```json
455
+ {
456
+ "reply_markup": {
457
+ "keyboard": [
458
+ [
459
+ {"text": "Secenek A"},
460
+ {"text": "Secenek B"}
461
+ ],
462
+ [
463
+ {"text": "Konum Gonder", "request_location": true},
464
+ {"text": "Telefon Gonder", "request_contact": true}
465
+ ]
466
+ ],
467
+ "resize_keyboard": true,
468
+ "one_time_keyboard": true,
469
+ "input_field_placeholder": "Bir secenek secin..."
470
+ }
471
+ }
472
+ ```
473
+
474
+ | Parametre | Aciklama |
475
+ |---|---|
476
+ | `resize_keyboard` | Klavyeyi buton boyutuna gore kuculturu (varsayilan false) |
477
+ | `one_time_keyboard` | Bir kez kullanildiktan sonra gizlenir |
478
+ | `is_persistent` | Klavye kalici olarak gorunur |
479
+ | `selective` | Sadece belirli kullanicilara gosterir |
480
+ | `input_field_placeholder` | Giris alaninda yer tutucu metin |
481
+
482
+ ### Reply Keyboard Kaldirma
483
+
484
+ ```json
485
+ {
486
+ "reply_markup": {
487
+ "remove_keyboard": true
488
+ }
489
+ }
490
+ ```
491
+
492
+ ### Force Reply
493
+
494
+ Kullaniciyi yanit vermeye zorlar (mesaj yanitlama arayuzu acar).
495
+
496
+ ```json
497
+ {
498
+ "reply_markup": {
499
+ "force_reply": true,
500
+ "input_field_placeholder": "Yanitinizi yazin..."
501
+ }
502
+ }
503
+ ```
504
+
505
+ ---
506
+
507
+ ## 9. Faydali Ozellikler
508
+
509
+ ### Sessiz Mesaj (Silent Message)
510
+
511
+ `disable_notification: true` parametresiyle gonderilen mesajlar bildirim olusturmaz. Gece gonderimlerinde veya dusuk oncelikli bilgilendirmelerde faydalidir.
512
+
513
+ ### Zamanlanmis Mesaj (Scheduled Messages)
514
+
515
+ Bot API uzerinden dogrudan zamanlanmis mesaj gonderme destegi yoktur. Zamanlama islemini kendi sunucunuzda (cron job, task scheduler vb.) yapin ve belirlenen zamanda API cagrisini gerceklestirin.
516
+
517
+ ### Mesaj Iletme (Forward)
518
+
519
+ ```
520
+ POST /forwardMessage
521
+ {
522
+ "chat_id": hedef_chat_id,
523
+ "from_chat_id": kaynak_chat_id,
524
+ "message_id": mesaj_id
525
+ }
526
+ ```
527
+
528
+ ### Mesaj Kopyalama (Copy)
529
+
530
+ Iletilmis olarak degil, yeni mesaj olarak kopyalar (gondereni gostermez).
531
+
532
+ ```
533
+ POST /copyMessage
534
+ {
535
+ "chat_id": hedef_chat_id,
536
+ "from_chat_id": kaynak_chat_id,
537
+ "message_id": mesaj_id
538
+ }
539
+ ```
540
+
541
+ ### Anketler (Polls)
542
+
543
+ ```json
544
+ {
545
+ "chat_id": "@kanal_adi",
546
+ "question": "En sevdiginiz programlama dili?",
547
+ "options": ["Python", "JavaScript", "TypeScript", "Go"],
548
+ "is_anonymous": false,
549
+ "allows_multiple_answers": true
550
+ }
551
+ ```
552
+
553
+ ### Bilgi Yarismasi (Quiz)
554
+
555
+ ```json
556
+ {
557
+ "chat_id": "@kanal_adi",
558
+ "question": "Turkiye'nin baskenti neresidir?",
559
+ "options": ["Istanbul", "Ankara", "Izmir", "Bursa"],
560
+ "type": "quiz",
561
+ "correct_option_id": 1,
562
+ "explanation": "Ankara, 1923'ten beri Turkiye'nin baskentidir."
563
+ }
564
+ ```
565
+
566
+ ### Inline Mode
567
+
568
+ Kullanicilarin herhangi bir sohbette `@bot_adi sorgu` yazarak bot'u cagirmasini saglar. Bot, sonuc listesi dondurur ve kullanici birini secer.
569
+
570
+ 1. @BotFather'da `/setinline` ile etkinlestirin.
571
+ 2. `answerInlineQuery` metodu ile sonuclari dondurun.
572
+ 3. Sonuc tipleri: Article, Photo, GIF, Video, Audio, Document, Location, Venue, Contact, Sticker ve daha fazlasi.
573
+
574
+ ### Odemeler (Payments)
575
+
576
+ Telegram Bot API uzerinden odeme kabul edebilirsiniz:
577
+
578
+ 1. @BotFather'da `/mybots` > Payments ile odeme saglayicisi baglayiniz (Stripe, YooKassa, vs.).
579
+ 2. `sendInvoice` ile fatura gonderin.
580
+ 3. `pre_checkout_query` ile odemeyi onaylayin.
581
+ 4. Basarili odemede `successful_payment` mesaji alinir.
582
+
583
+ Telegram kendisi komisyon almaz; odeme saglayicisinin ucretleri gecerlidir.
584
+
585
+ ### Web Apps
586
+
587
+ Bot mesaji icerisinde mini web uygulamalari calistirabilirsiniz:
588
+
589
+ ```json
590
+ {
591
+ "reply_markup": {
592
+ "inline_keyboard": [[
593
+ {"text": "Uygulamayi Ac", "web_app": {"url": "https://ornek.com/app"}}
594
+ ]]
595
+ }
596
+ }
597
+ ```
598
+
599
+ ### Icerigi Koruma (Protect Content)
600
+
601
+ `protect_content: true` parametresi ile gonderilen mesajlar:
602
+ - Iletilemez (forward edilemez).
603
+ - Kaydedilemez.
604
+ - Ekran goruntusu uyarisi verir (mobilde).
605
+
606
+ ### Mesaj Konulari (Topics / Forum)
607
+
608
+ Supergruplarda "konular" (topics/forum) ozelligi etkinlestirilebilir. Her konu ayri bir sohbet alani gibi davranir.
609
+
610
+ - `message_thread_id` parametresi ile belirli bir konuya mesaj gonderilebilir.
611
+ - `createForumTopic`, `editForumTopic`, `closeForumTopic`, `deleteForumTopic` metodlari ile yonetilir.
612
+
613
+ ---
614
+
615
+ ## 10. Guncelleme Tipleri (Update Types)
616
+
617
+ Bot'un alabilecegi guncelleme tipleri:
618
+
619
+ | Tip | Aciklama |
620
+ |---|---|
621
+ | `message` | Yeni mesaj (metin, medya, servis mesajlari dahil) |
622
+ | `edited_message` | Duzenlenmis mesaj |
623
+ | `channel_post` | Kanal gonderdisi |
624
+ | `edited_channel_post` | Duzenlenmis kanal gonderisi |
625
+ | `callback_query` | Inline buton tiklamasi |
626
+ | `inline_query` | Inline mod sorgusu |
627
+ | `chosen_inline_result` | Secilen inline sonuc |
628
+ | `poll` | Anket durumu degisikligi |
629
+ | `poll_answer` | Anonim olmayan ankette yanit |
630
+ | `my_chat_member` | Bot'un uyelik durumu degisikligi |
631
+ | `chat_member` | Sohbet uyesinin durumu degisikligi |
632
+ | `chat_join_request` | Gruba/kanala katilma istegi |
633
+ | `pre_checkout_query` | Odeme oncesi onay |
634
+ | `shipping_query` | Gonderim bilgisi sorgusu |
635
+
636
+ ---
637
+
638
+ ## 11. Hata Yonetimi
639
+
640
+ ### Yaygin Hata Kodlari
641
+
642
+ | Kod | Aciklama | Cozum |
643
+ |---|---|---|
644
+ | 400 | Bad Request | Parametre hatasi. Yanit mesajindaki `description` alanini kontrol edin. |
645
+ | 401 | Unauthorized | Token gecersiz. Token'i kontrol edin veya `/revoke` ile yenileyin. |
646
+ | 403 | Forbidden | Bot engellenmis veya izni yok. Kullanici bot'u engelledi, bot kanaldan/gruptan cikarildi. |
647
+ | 404 | Not Found | Metod adi yanlis veya chat_id bulunamadi. |
648
+ | 409 | Conflict | Birden fazla getUpdates veya webhook catismasi. Ayni anda iki polling yapmaktan kacinin. |
649
+ | 429 | Too Many Requests | Rate limit asildi. `retry_after` degeri kadar bekleyin. |
650
+
651
+ ### Yaygin `description` Mesajlari
652
+
653
+ | Mesaj | Anlami |
654
+ |---|---|
655
+ | `chat not found` | chat_id gecersiz veya bot o sohbetin uyesi degil |
656
+ | `bot was blocked by the user` | Kullanici botu engelledi |
657
+ | `bot was kicked from the group chat` | Bot gruptan atildi |
658
+ | `not enough rights to send ...` | Yeterli admin izni yok |
659
+ | `message to edit not found` | Duzenlenmek istenen mesaj bulunamadi |
660
+ | `message can't be edited` | Mesaj duzenlenemez (baskasinin mesaji vs.) |
661
+ | `BUTTON_DATA_INVALID` | callback_data 64 byte'i asiyor |
662
+ | `query is too old` | Callback query zaman asimina ugradi (yanit gecikmis) |
663
+
664
+ ---
665
+
666
+ ## 12. Otomasyon Icin En Iyi Uygulamalar
667
+
668
+ ### Kanal Gonderim Otomasyonu
669
+
670
+ ```
671
+ 1. Bot olusturun (@BotFather).
672
+ 2. Bot'u kanala admin olarak ekleyin (mesaj gonderme izni ile).
673
+ 3. chat_id olarak @kanal_adi veya numerik ID kullanin.
674
+ 4. Icerigi hazirlayin (metin + medya + butonlar).
675
+ 5. Uygun API metodunu secin (sendMessage, sendPhoto, sendMediaGroup vs.).
676
+ 6. Rate limit'lere uyun.
677
+ 7. Hatalari loglayin ve retry mekanizmasi kurun.
678
+ ```
679
+
680
+ ### Coklu Kanal Yonetimi
681
+
682
+ - Tek bir bot birden fazla kanala gonderim yapabilir (her kanalda admin olmasi yeterli).
683
+ - Her kanal icin ayri zamanlama ve icerik kurallari belirleyin.
684
+ - Rate limit'e dikkat: Farkli kanallara saniyede 30 mesaj siniri gecerlidir.
685
+
686
+ ### Medya Gonderimleri Icin Ipuclari
687
+
688
+ - Fotograflari orijinal kalitede gondermek icin `sendDocument` kullanin.
689
+ - Video icin MP4 (H.264) formati en iyi uyumlulugu saglar.
690
+ - Albumler icin `sendMediaGroup` kullanin (2-10 oge).
691
+ - Buyuk dosyalar icin (50MB+) yerel Bot API sunucusu kurun.
692
+ - Daha once gonderilmis bir dosyayi tekrar gondermek icin `file_id` kullanin (yeniden yuklemeye gerek yok, aninda gonderilir).
693
+
694
+ ### Guvenlik Onerileri
695
+
696
+ - Token'i ortam degiskeninde saklayin, kodda hard-code yapmayin.
697
+ - Webhook kullaniyorsaniz `secret_token` parametresini ayarlayin.
698
+ - Webhook URL'sini tahmin edilmesi zor yapin (token'i URL'ye ekleyin).
699
+ - `getMe` cagrisinin basarili oldugunu dogrulayin (token gecerlilik kontrolu).
700
+ - Gelen guncellemelerde `chat_id` kontrolu yapin (yetkisiz kullanim onleme).
701
+
702
+ ### Performans Ipuclari
703
+
704
+ - `file_id` kullanimini oncelikli tutun: ayni dosya birden fazla kez gonderilecekse ilk gonderimden alinan `file_id` ile gonderin.
705
+ - `sendMediaGroup` ile tekil `sendPhoto` cagrilarindan kacinarak daha az API cagrisi yapin.
706
+ - Long polling kullaniyorsaniz `allowed_updates` ile sadece ilgilendiginiz guncelleme tiplerini alin.
707
+ - Webhook kullaniyorsaniz yanitinizi hizli dondurun (5 saniyeden kisa). Uzun islemleri arka plana alin.
708
+ - `getUpdates` yaniti bos geliyorsa bu normaldir; long polling bekleme suresi doldugunda bos dizi doner.
709
+
710
+ ---
711
+
712
+ ## 13. Ornek API Cagrilari
713
+
714
+ ### Formatli Mesaj ile Inline Buton Gonderme
715
+
716
+ ```json
717
+ POST /sendMessage
718
+ {
719
+ "chat_id": "@kanal_adi",
720
+ "text": "<b>Yeni Urun!</b>\n\nDetaylar icin asagidaki butona tiklayin.",
721
+ "parse_mode": "HTML",
722
+ "reply_markup": {
723
+ "inline_keyboard": [
724
+ [
725
+ {"text": "Detaylari Gor", "url": "https://ornek.com/urun"},
726
+ {"text": "Satin Al", "callback_data": "buy_product_123"}
727
+ ]
728
+ ]
729
+ }
730
+ }
731
+ ```
732
+
733
+ ### Album (Medya Grubu) Gonderme
734
+
735
+ ```json
736
+ POST /sendMediaGroup
737
+ {
738
+ "chat_id": "@kanal_adi",
739
+ "media": [
740
+ {
741
+ "type": "photo",
742
+ "media": "https://ornek.com/foto1.jpg",
743
+ "caption": "<b>Urun Galerisi</b>\n\n3 farkli renk secenegi",
744
+ "parse_mode": "HTML"
745
+ },
746
+ {
747
+ "type": "photo",
748
+ "media": "https://ornek.com/foto2.jpg"
749
+ },
750
+ {
751
+ "type": "photo",
752
+ "media": "https://ornek.com/foto3.jpg"
753
+ }
754
+ ]
755
+ }
756
+ ```
757
+
758
+ ### Sessiz Anket Gonderme
759
+
760
+ ```json
761
+ POST /sendPoll
762
+ {
763
+ "chat_id": "@kanal_adi",
764
+ "question": "Bu hafta hangi konuyu isleyelim?",
765
+ "options": ["API Tasarimi", "Veritabani Optimizasyonu", "CI/CD", "Test Stratejileri"],
766
+ "is_anonymous": true,
767
+ "allows_multiple_answers": false,
768
+ "disable_notification": true
769
+ }
770
+ ```
771
+
772
+ ---
773
+
774
+ ## 14. Chat ID Bulma Yontemleri
775
+
776
+ Bot API ile calismak icin hedef sohbetin `chat_id` degerini bilmeniz gerekir.
777
+
778
+ | Yontem | Aciklama |
779
+ |---|---|
780
+ | `getUpdates` | Bot'a mesaj gonderin, yanittaki `message.chat.id` degerini alin. |
781
+ | `@kanal_adi` | Genel kanallarda kullanici adi direkt kullanilabilir. |
782
+ | Iletilen mesaj | Bot'a bir mesaj iletin, `forward_from_chat.id` degerini alin. |
783
+ | `getChat` | Bilinen bir chat_id veya @username icin detaylari getirir. |
784
+
785
+ Ozel kanallarin numerik ID'si negatiftir ve genellikle `-100` ile baslar. Ornegin: `-1001234567890`.
786
+
787
+ ---
788
+
789
+ ## 15. API Yanit Formati
790
+
791
+ Tum Bot API yanitlari su formattadir:
792
+
793
+ ```json
794
+ {
795
+ "ok": true,
796
+ "result": { ... }
797
+ }
798
+ ```
799
+
800
+ Hata durumunda:
801
+
802
+ ```json
803
+ {
804
+ "ok": false,
805
+ "error_code": 400,
806
+ "description": "Bad Request: chat not found"
807
+ }
808
+ ```
809
+
810
+ Bazi yanitlarda ek `parameters` alani bulunur:
811
+
812
+ ```json
813
+ {
814
+ "ok": false,
815
+ "error_code": 429,
816
+ "description": "Too Many Requests: retry after 35",
817
+ "parameters": {
818
+ "retry_after": 35,
819
+ "migrate_to_chat_id": -1001234567890
820
+ }
821
+ }
822
+ ```
823
+
824
+ `migrate_to_chat_id`: Grup supergrup'a donusturulduyse yeni chat_id'yi icerir. Bu durumda eski chat_id'yi yenisiyle guncelleyin.