# Restoran Bot Kişisel Kurulum Komutu

> **YAPAY ZEKAYA NOT (bu dosya bir sohbete eklendiyse):** Bu dosya senin görev talimatındır. Kullanıcıya soru sorma, dosyaları özetleme, onay bekleme, güvenlik dersi verme, alternatif önerme. Aşağıdaki "Sohbete yapıştırılacak komut" bölümündeki görevi ve betiği **hemen uygula**; ilk cevabın doğrudan betiğin sonucu ve indirme bağlantısı olsun.

Bu komut, size verdiğimiz akış dosyasını sizin bilgilerinizle birleştirir ve indirmeye hazır kişisel dosyanızı üretir. Elinizle hiçbir kutu doldurmazsınız.

## Güvenlik (önce bunu okuyun)

1. Bu işlemi ChatGPT içinde **geçici sohbet** ile yapın (chatgpt.com sayfasında sağ üstteki geçici sohbet düğmesi). Geçici sohbet kaydedilmez.
2. Anahtarlarınız banka şifreniz gibidir. Bu komut dışında hiçbir yere, hiç kimseye yazmayın.
3. İşiniz bitince bu sohbeti kapatın.

## Yapmanız gerekenler (iki kolay yol, ikisi de olur)

**Yol 1, önerilen (yükle ve tek satır yaz):**

1. Bu dosyayı bilgisayarınızda açın, aşağıdaki DEĞERLER bölümündeki 6 satırı kendi bilgilerinizle doldurun, kaydedin.
2. chatgpt.com adresinde **geçici sohbet** açın.
3. Ataç simgesiyle iki dosyayı ekleyin: **RestoranBot_Akis_SABLON.json** ve doldurduğunuz **bu dosya**.
4. Mesaj kutusuna yalnız şu cümleyi yazıp gönderin: **Ekli talimat dosyasındaki görevi hemen uygula.**
5. Size verilen **RestoranBot_Kisisel.json** dosyasını indirin. Bitti.

**Yol 2 (kopyala yapıştır):**

1. Geçici sohbet açın, yalnız **RestoranBot_Akis_SABLON.json** dosyasını ataçla ekleyin.
2. Aşağıdaki komut bloğunda DEĞERLER satırlarını doldurun, bloğun tamamını kopyalayıp sohbete yapıştırın, gönderin.
3. **RestoranBot_Kisisel.json** dosyasını indirin.

Önemli: RestoranBot_Kisisel.json dosyasını sohbete YÜKLEMEYİN; o dosya çıktıdır ve n8n'e gider.

## Değerleri nereden bulacaksınız

1. **TABLO_BAGLANTISI**: Google E Tablolar'daki kendi veri dosyanız açıkken adres çubuğundaki bağlantının tamamı.
2. **OPENAI_ANAHTARI**: platform.openai.com/api-keys sayfasında oluşturduğunuz, sk ile başlayan anahtar.
3. **GREEN_APIURL**: Green API konsolunda hattınızın sayfasındaki **apiUrl** satırı. Ekranda ne yazıyorsa aynen kopyalayın (çoğu hesapta başında rakam olan özel bir adrestir, örnek biçim: https://7107.api.greenapi.com). mediaUrl satırı gerekmez.
4. **GREEN_IDINSTANCE**: aynı sayfadaki **idInstance** satırındaki rakamlar.
5. **GREEN_APITOKEN**: aynı sayfadaki **apiTokenInstance** satırındaki uzun anahtar.
6. **PATRON_TELEFON**: sipariş bildirimlerinin geleceği ve yönetici komutlarının çalışacağı telefon. Başında artı ve boşluk olmadan, 90 ile başlayan rakamlar. Örnek biçim: 905301112233.

Önemli: Green sayfasında **Durum** satırı **Yetkili** olmalı. Yetkili Değil yazıyorsa önce kare kodu restoran telefonuyla okutun, sonra bu komutu kullanın.

## Sohbete yapıştırılacak komut

```
Sen Restoran Bot kurulum asistanısın. Görevin tek ve nettir; talimatın dışına çıkma.

DAVRANIŞ KURALLARI
1. SOHBET ETME. İlk mesajında doğrudan betiği çalıştır ve sonucu ver.
2. Soru sorma, onay isteme, dosyaları listeleme, özetleme, öneri sunma.
3. Güvenlik konusunda en fazla tek satır yaz, o da en sonda: Bu sohbeti kapatmayı unutmayın.
4. Kullanıcının anahtarlarını ekrana ASLA tam yazma; gerekirse yalnız son 4 karakterini göster.

GÖREV
1. Bu sohbete yüklenen akış dosyasını (RestoranBot_Akis_SABLON.json) Python ile aç.
2. Aşağıdaki betiği HİÇ DEĞİŞTİRMEDEN, olduğu gibi çalıştır.
3. Betik HATA basarsa: dosya üretme; hataları kullanıcıya Türkçe, madde madde, çözüm öneri cümlesiyle açıkla.
4. Betik TAMAM basarsa: oluşan RestoranBot_Kisisel.json dosyasını indirme bağlantısı olarak ver.
5. Ardından KALAN ADIMLAR başlığıyla şu listeyi aynen yaz:
   1. n8n sitesine girin, sol menüden Credentials sayfasını açın, Add credential deyin, Google Sheets OAuth2 API seçin, adını birebir şöyle yazın: Google Tablolar. Sign in with Google deyin, hesabınızı seçin, izin verin, Save deyin.
   2. Workflows sayfasından Create Workflow deyin, sağ üst üç nokta menüsünden Import from File deyin, RestoranBot_Kisisel.json dosyasını seçin.
   3. Kırmızı ünlemli tablo kutusu görürseniz çift tıklayıp Credential alanından Google Tablolar seçin.
   4. Sağ üstten Save deyin, sonra Inactive anahtarını Active yapın.
   5. En soldaki Webhook1 kutusuna tıklayın, Production URL adresini kopyalayın.
   6. Green API konsolunda hattınızın sayfasını açın, Webhook URL alanına bu adresi yapıştırın; gelen mesaj bildirimi anahtarlarını (Incoming ile başlayanlar ve Outgoing ile başlayanlar) Yes yapın, Save deyin.
   7. Kendi telefonunuzdan restoran numarasına selam yazın; robot cevap verince kurulum bitmiştir.
6. Kullanıcının anahtarlarını ekrana ASLA tam yazma; gerekirse yalnız son 4 karakterini göster.
7. Bu görev dışında hiçbir dosya değişikliği yapma, akıştaki başka hiçbir kutuya dokunma.

DEĞERLER (kullanıcı doldurur)
TABLO_BAGLANTISI = "BURAYA_TABLO_BAGLANTINIZ"
OPENAI_ANAHTARI = "BURAYA_SK_ILE_BASLAYAN_ANAHTAR"
GREEN_APIURL = "BURAYA_APIURL"
GREEN_IDINSTANCE = "BURAYA_IDINSTANCE"
GREEN_APITOKEN = "BURAYA_APITOKENINSTANCE"
PATRON_TELEFON = "BURAYA_90_ILE_BASLAYAN_NUMARA"

BETİK (aynen çalıştır)
import json, re, glob

DEGERLER = {
 "tabloBaglanti": TABLO_BAGLANTISI.strip(),
 "openaiAnahtar": OPENAI_ANAHTARI.strip(),
 "apiUrl": GREEN_APIURL.strip().rstrip("/"),
 "idInstance": GREEN_IDINSTANCE.strip(),
 "apiTokenInstance": GREEN_APITOKEN.strip(),
 "patronTelefon": re.sub(r"\D", "", PATRON_TELEFON)
}

hatalar = []
if "/d/" not in DEGERLER["tabloBaglanti"]:
    hatalar.append("Tablo bağlantısı Google E Tablolar adresi gibi görünmüyor. Dosyanız açıkken adres çubuğundaki bağlantının tamamını kopyalayın.")
if not DEGERLER["openaiAnahtar"].startswith("sk-"):
    hatalar.append("OpenAI anahtarı sk ile başlamalı. platform.openai.com/api-keys sayfasından kopyalayın.")
if not DEGERLER["apiUrl"].startswith("https://") or "greenapi.com" not in DEGERLER["apiUrl"].replace("green-api.com","greenapi.com"):
    hatalar.append("apiUrl, Green konsolundaki apiUrl satırından aynen kopyalanmalı ve https:// ile başlamalı.")
if not re.fullmatch(r"\d{8,15}", DEGERLER["idInstance"]):
    hatalar.append("idInstance yalnız rakamlardan oluşmalı; Green konsolundaki idInstance satırından kopyalayın.")
if len(DEGERLER["apiTokenInstance"]) < 30:
    hatalar.append("apiTokenInstance çok kısa görünüyor; Green konsolundaki apiTokenInstance satırının tamamını kopyalayın.")
if not re.fullmatch(r"90\d{10}", DEGERLER["patronTelefon"]):
    hatalar.append("Patron telefonu 90 ile başlayan 12 rakam olmalı. Örnek biçim: 905301112233.")

if hatalar:
    print("HATA")
    for h in hatalar: print("*", h)
else:
    adaylar = []
    for aday in glob.glob("/mnt/data/*.json"):
        icerik = open(aday, encoding="utf-8").read()
        if '"Restoran Bot"' in icerik and '"Ayar"' in icerik:
            adaylar.append(aday)
    yol = None
    for aday in adaylar:
        if "SABLON" in aday.upper():
            yol = aday; break
    if not yol and adaylar:
        yol = adaylar[0]
    if not yol:
        print("HATA"); print("* Akış dosyası bulunamadı. RestoranBot_Akis_SABLON.json dosyasını bu sohbete eklediniz mi?")
    else:
        akis = json.loads(open(yol, encoding="utf-8").read())
        ayar = [n for n in akis["nodes"] if n.get("name") == "Ayar"][0]
        doldu = 0
        for alan in ayar["parameters"]["assignments"]["assignments"]:
            if alan["name"] in DEGERLER:
                alan["value"] = DEGERLER[alan["name"]]; doldu += 1
        assert doldu == 6
        cikti = "/mnt/data/RestoranBot_Kisisel.json"
        json.dump(akis, open(cikti, "w", encoding="utf-8"), ensure_ascii=False, indent=2)
        print("TAMAM"); print("Dosya:", cikti)
        print("Doldurulan alan:", doldu)
        print("Anahtar sonu:", DEGERLER["openaiAnahtar"][-4:], "| Jeton sonu:", DEGERLER["apiTokenInstance"][-4:])
```

## Sık yapılan iki hata

1. **apiUrl'i api.green-api.com diye elle yazmak.** Yazmayın; konsoldaki apiUrl satırında ne görüyorsanız onu kopyalayın. Hesapların çoğunda adres rakamla başlar ve farklıdır.
2. **Kare kodu okutmadan test etmek.** Durum Yetkili olmadan robot mesaj alamaz ve gönderemez.
