# Trendyol Entegrasyon Paneli Harici İzleme (Monitoring) Kılavuzu

Bu kılavuz, Trendyol Entegrasyon Paneli'nin (trendyol.kaptanspor.com.tr) çalışma durumunu, veri senkronizasyon oranlarını, arka plan görevlerini, Trendyol sipariş durumlarını ve gelen müşteri sorularını/mesajlarını harici bir izleme sunucusundan (`monitor.kappmes.com` vb.) API istekleri ile nasıl takip edeceğinizi açıklamaktadır.

---

## 🔑 İzleme Sistemi (Monitor API) Anahtar ve Token Bilgileri

Monitör sisteminin (`monitor.kappmes.com`) kendi servislerinde, veritabanında ve dış entegrasyonlarında kullandığı tüm yetki anahtarları (secrets) aşağıda listelenmiştir:

| Anahtar/Token Adı | Tür / Kullanım Alanı | Güncel Değer |
| :--- | :--- | :--- |
| **ECOM_API_TOKEN** | E-Ticaret API bağlantısı izleme tokenı (X-Monitor-Token) | `3b9c6384809cb91ccfe19a725788a5b6f433118a00e4911e` |
| **PDKS_MONITOR_TOKEN** | PDKS entegrasyonu ve canlı PDKS takibi için kullanılan token | `2241f6afbdbd5d02047bf3115ade0e6dee2ac2f1dd6d898c22dd652c17a1331f44db964b6586901e17b4a362bd3dabe0` |
| **JOB_APPLICATION_API_TOKEN**| İş başvuru alıcı servisi tokenı | `kaptan_basvuru_345678` |
| **GA4_PROPERTY_ID** | Google Analytics 4 Mülk Kimliği | `469848830` |
| **GA4_CLIENT_ID** | Google Analytics 4 Google API İstemci Kimliği | `539586189391-jm7g4lrddkgs6qsg2qnt9ib7c8umbh6d.apps.googleusercontent.com` |
| **GA4_CLIENT_SECRET** | Google Analytics 4 Google API Gizli Anahtarı | `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` |
| **GDRIVE_CLIENT_ID** | Google Drive Yedekleme API İstemci Kimliği | `781384815939-sq2b7jp05jb1qvhpkd9hh6gopka4v5mv.apps.googleusercontent.com` |
| **GDRIVE_CLIENT_SECRET** | Google Drive Yedekleme API Gizli Anahtarı | `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` |
| **SMTP Yandex Mail** | Monitör uyarı ve yedek mailleri gönderici e-postası | `no-reply@kaptanspor.com.tr` |
| **SMTP Yandex Şifre** | Monitör SMTP Yandex e-posta şifresi | `QQaaZZxx123!!tt` |

---

## 🔑 Trendyol Entegrasyon Paneli Anahtarları (Trendyol Secrets)

Trendyol panelimizin kendi verilerini sunarken veya Trendyol'a istek yaparken kullandığı anahtarlar:

| Anahtar Tipi | Tanım / Kullanım Alanı | Değer |
| :--- | :--- | :--- |
| **Panel Webhook Secret** | Panel API'lerine harici güvenli erişim için (Bearer Token) | `1052876442a05bb510bef5e11d09dfa26cd1d66a4a86bd70895dbd473c997700` |
| **Trendyol Supplier ID** | KaptanSpor Trendyol Satıcı ID'si (Satıcı Mağaza ID) | `180775` |
| **Trendyol API Key** | Trendyol API isteklerinde kullanıcı adı olarak kullanılır | `2Z7JdHhE9qU0j0GYZv2n` |
| **Trendyol API Secret** | Trendyol API isteklerinde şifre (password) olarak kullanılır | `uQGhRal7Rww1OlYCAlQ7` |

---

## 🔒 Harici API Kimlik Doğrulama Yöntemi

Panel üzerindeki metrik API'lerine güvenli erişim sağlamak için tüm isteklere aşağıdaki başlık (Header) eklenmelidir:

*   **Header:** `Authorization: Bearer 1052876442a05bb510bef5e11d09dfa26cd1d66a4a86bd70895dbd473c997700`
*   **Temel URL:** `https://trendyol.kaptanspor.com.tr`

---

## 📡 İzlenebilir API Uçları (Endpoints)

Harici izleme sisteminiz tarafından uzaktan sorgulanabilecek API uçları şunlardır:

### 1. Genel Senkronizasyon İstatistikleri (Dashboard Stats)
*   **İstek Tipi:** `GET`
*   **Adres:** `https://trendyol.kaptanspor.com.tr/api/dashboard-stats`
*   **Açıklama:** Veritabanındaki ürün senkronizasyon durumlarını, son siparişleri ve son işlem günlüklerini döndürür.
*   **Örnek Curl Komutu:**
    ```bash
    curl -H "Authorization: Bearer 1052876442a05bb510bef5e11d09dfa26cd1d66a4a86bd70895dbd473c997700" https://trendyol.kaptanspor.com.tr/api/dashboard-stats
    ```
*   **Dönen JSON Yapısı:**
    ```json
    {
      "success": true,
      "stats": {
        "synced": 1540,
        "failed": 23,
        "pending": 4,
        "total": 1867
      }
    }
    ```

---

### 2. Trendyol Sipariş Durumları Kontrolü
Trendyol'dan B2B sisteminize aktarılan siparişleri ve anlık durumlarını sorgulamak için kullanılır:
*   **İstek Tipi:** `GET`
*   **Adres:** `https://trendyol.kaptanspor.com.tr/api/orders-list`
*   **Açıklama:** B2B veritabanında kayıtlı son 500 Trendyol siparişini listeler. Dönen sipariş listesi içinde döngü kurularak durum kırılımları hesaplanabilir.
*   **Örnek Curl Komutu:**
    ```bash
    curl -H "Authorization: Bearer 1052876442a05bb510bef5e11d09dfa26cd1d66a4a86bd70895dbd473c997700" https://trendyol.kaptanspor.com.tr/api/orders-list
    ```
*   **Dönen JSON İçindeki Önemli Alanlar:**
    *   `orders[].siparis_no`: Trendyol Sipariş Numarası.
    *   `orders[].siparis_durum`: Siparişin güncel durumu (Örn: `Created`, `Shipped`, `Delivered`, `Cancelled`).
    *   `orders[].toplam_tutar`: Sipariş ciro tutarı.
*   **İzleme Mantığı:** Sipariş durumları (`siparis_durum`) gruplanarak anlık ciro ve iptal oranları Kappmes paneline yansıtılabilir.

---

### 3. Trendyol Gelen Müşteri Soruları/Mesajları Kontrolü
Trendyol Q&A (Soru-Cevap) API'sini sorgulayarak mağazanıza gelen ve **yanıt bekleyen** müşteri sorularını anlık izleyebilirsiniz.
*   **İstek Tipi:** `GET`
*   **Adres:** `https://api.trendyol.com/sapigw/sellers/180775/questions?status=WAITING_FOR_ANSWER`
*   **Yetkilendirme:** Basic Authentication (`apiKey` ve `apiSecret` birleştirilerek base64 formatına dönüştürülür).
    *   Kullanıcı adı: `2Z7JdHhE9qU0j0GYZv2n`
    *   Şifre: `uQGhRal7Rww1OlYCAlQ7`
*   **Örnek Curl Komutu:**
    ```bash
    curl -u "2Z7JdHhE9qU0j0GYZv2n:uQGhRal7Rww1OlYCAlQ7" "https://api.trendyol.com/sapigw/sellers/180775/questions?status=WAITING_FOR_ANSWER"
    ```
*   **Dönen JSON Yapısı:**
    ```json
    {
      "totalElements": 3,
      "content": [
        {
          "id": 1234567,
          "text": "Ürünün kalıbı dar mı acaba?",
          "status": "WAITING_FOR_ANSWER",
          "creationDate": 1784905352000
        }
      ]
    }
    ```
*   **İzleme Mantığı:** `totalElements` değeri 0'dan büyükse, mağazanızda cevap bekleyen müşteri soruları bulunmaktadır. Kappmes panelinde **"Cevap Bekleyen Trendyol Mesajı: X"** şeklinde bir uyarı/badge gösterilebilir.

---

### 4. Toplu Senkronizasyon İlerleme Durumu (Bulk Status)
*   **İstek Tipi:** `GET`
*   **Adres:** `https://trendyol.kaptanspor.com.tr/api/bulk-status`
*   **Örnek Curl Komutu:**
    ```bash
    curl -H "Authorization: Bearer 1052876442a05bb510bef5e11d09dfa26cd1d66a4a86bd70895dbd473c997700" https://trendyol.kaptanspor.com.tr/api/bulk-status
    ```

---

## 🛠️ Harici İzleme Sunucusu İçin Python Betiği (Gelişmiş)

Tüm metrikleri, sipariş durumlarını ve cevap bekleyen müşteri sorularını tek seferde toplayıp `monitor.kappmes.com` sistemine raporlayan gelişmiş python betiği:

```python
#!/usr/bin/env python3
import requests
import json
import sys
import base64

# KaptanSpor Panel Ayarları
TRENDYOL_PANEL_URL = "https://trendyol.kaptanspor.com.tr"
WEBHOOK_SECRET = "1052876442a05bb510bef5e11d09dfa26cd1d66a4a86bd70895dbd473c997700"

# Trendyol API Ayarları
TRENDYOL_SUPPLIER_ID = "180775"
TRENDYOL_API_KEY = "2Z7JdHhE9qU0j0GYZv2n"
TRENDYOL_API_SECRET = "uQGhRal7Rww1OlYCAlQ7"

# Kappmes İzleme Sistemi Ayarları
MONITOR_API_URL = "https://monitor.kappmes.com/api/v1/update-status"
MONITOR_API_KEY = "3b9c6384809cb91ccfe19a725788a5b6f433118a00e4911e" # ECOM_API_TOKEN

def collect_all_metrics():
    headers = {"Authorization": f"Bearer {WEBHOOK_SECRET}"}
    
    # 1. Senkronizasyon İstatistiklerini Al
    stats_data = {}
    try:
        res = requests.get(f"{TRENDYOL_PANEL_URL}/api/dashboard-stats", headers=headers, timeout=10)
        if res.status_code == 200:
            stats_data = res.json().get("stats", {})
    except Exception as e:
        print(f"Stats hatası: {e}", file=sys.stderr)

    # 2. Sipariş Durumu Sayılarını Al
    order_counts = {"Created": 0, "Shipped": 0, "Cancelled": 0, "Delivered": 0}
    try:
        res = requests.get(f"{TRENDYOL_PANEL_URL}/api/orders-list", headers=headers, timeout=10)
        if res.status_code == 200:
            orders = res.json().get("orders", [])
            for order in orders:
                status = order.get("siparis_durum", "Unknown")
                order_counts[status] = order_counts.get(status, 0) + 1
    except Exception as e:
        print(f"Sipariş hatası: {e}", file=sys.stderr)

    # 3. Trendyol Cevap Bekleyen Müşteri Sorularını Al
    pending_questions = 0
    try:
        # Basic auth base64 encoding
        auth_str = f"{TRENDYOL_API_KEY}:{TRENDYOL_API_SECRET}"
        auth_bytes = base64.b64encode(auth_str.encode("utf-8")).decode("utf-8")
        ty_headers = {"Authorization": f"Basic {auth_bytes}"}
        
        ty_url = f"https://api.trendyol.com/sapigw/sellers/{TRENDYOL_SUPPLIER_ID}/questions?status=WAITING_FOR_ANSWER"
        res = requests.get(ty_url, headers=ty_headers, timeout=10)
        if res.status_code == 200:
            pending_questions = res.json().get("totalElements", 0)
    except Exception as e:
        print(f"Trendyol Soru API hatası: {e}", file=sys.stderr)

    # 4. Verileri Kappmes Sistemine Post Et
    payload = {
        "service": "trendyol_integration",
        "status": "OK",
        "metrics": {
            "sync": {
                "total_products": stats_data.get("total", 0),
                "synced": stats_data.get("synced", 0),
                "failed": stats_data.get("failed", 0),
                "pending": stats_data.get("pending", 0)
            },
            "orders": order_counts,
            "customer_messages": {
                "waiting_answer_count": pending_questions
            }
        }
    }

    try:
        mon_headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {MONITOR_API_KEY}"
        }
        requests.post(MONITOR_API_URL, headers=mon_headers, json=payload, timeout=5)
        print("Tüm metrikler (Senkron, Sipariş, Mesaj) Kappmes izleme sistemine başarıyla gönderildi.")
    except Exception as e:
        print(f"Raporlama hatası: {e}", file=sys.stderr)

if __name__ == "__main__":
    collect_all_metrics()
```
