Logistivo CLI: lojistik operasyonunuzu terminalden ve ERP'nizden çalıştırın

Tek bir komut kataloğu üç yüzeyi birden besliyor: lg terminal istemcisi, paneldeki yapay zekâ sohbeti ve dış AI asistanlarının bağlandığı kanal. Bir yetenek bir kez yazılıyor, üçünde birden beliriyor. Bu sayfa bir sözleşmedir. Aşağıdaki komut tablosu elle yazılmadı; her istekte canlı komut defterinden üretiliyor.

Logistivo CLI nedir?

Logistivo CLI (lg), hesabınızdaki yük, talep, teklif, ihracat evrakı, stok, fatura ve gümrük tarifesi işlemlerini terminalden ya da bir betikten çalıştıran komut satırı istemcisidir. Komutlar istemcinin içine gömülü değildir: istemci komut kataloğunu sunucudan çeker ve kendini ona göre çizer. Aynı komutlar istemci kurmadan HTTP ile de çağrılabilir; ERP ve CRM entegrasyonları bu yolu kullanır.

Bugün ne canlı, ne yolda

Bu bölüm bilinçli olarak sayfanın başında duruyor. Bir entegrasyon dokümanının en pahalı hatası, henüz açılmamış bir ucu açılmış gibi anlatmaktır: entegratör kodu yazar, uç 404 döner ve güven bir daha geri gelmez.

Sözleşme donmuş olduğu için bugün yazdığınız entegrasyon kodu, henüz açılmamış parçalar açıldığında da çalışır.

Farkımız: istemci komut bilmez, kataloğu çizer

Bu, sayfanın geri kalanını anlamlı kılan tek karar. Sıradan bir CLI'da komutlar istemcinin içine yazılır; Logistivo'da sunucuda durur.

Klasik kurguda sunucu yeni bir yetenek kazandığında istemcinin de yeni bir sürümü çıkmalı, kullanıcı da onu kurmalıdır. Arada geçen sürede iki taraf farklı şeyler bilir ve bu, entegrasyonların en sessiz kırılma noktasıdır: betik çalışır, çıkış kodu 0 döner, ama komut sunucudaki gerçeği anlatmaz.

Logistivo'da bir komutun tanımı tek bir kayıttır: adı, ne yaptığı, JSON Schema parametreleri, hangi rollerin görebildiği, onay gerektirip gerektirmediği ve geri alınabilir olup olmadığı. lg açıldığında bu kataloğu çeker; yardım metnini, bayrakları ve girdi doğrulamasını ondan üretir. Sunucuya bir komut eklendiği an istemciyi güncellemeden lg onu tanır.

Aynı katalog paneldeki yapay zekâ sohbetini ve dış AI asistanlarının bağlandığı kanalı da besler. Bir yetenek bir kez yazılır, üç yüzeyde birden belirir — ve üçü de aynı rol kapısından, aynı onay kapısından ve aynı denetim defterinden geçer. Ayrı bir CLI komut envanteri yoktur; olsaydı üç yüzey altı ay içinde sessizce ayrışırdı.

Adlandırma kuralı — komut adları nasıl büyür

Katalog büyüyecek. Yeni komutlar rastgele adlandırılmıyor; altı kural uygulanıyor. Bunları burada yayımlıyoruz çünkü entegrasyonunuzun ömrü boyunca yazacağı adlar bunlar ve tahmin edilebilir olmaları sizin işinize yarıyor.

Kurulum ve kimlik

lg, sıfır bağımlılıklı tek dosyalık bir Node betiğidir (Node 18+). Bir müşterinin ERP sunucusuna tek dosya olarak kopyalanabilsin diye böyle yazıldı: npm install gerektiren bir istemci oraya hiç varmaz. İstemci şu anda erken erişimde; dağıtım bağlantısı açıldığında bu bölüme eklenecek. ERP/CRM entegrasyonu için istemciyi beklemeniz gerekmiyor — aynı komutlar HTTP ile çağrılıyor.

1. Oturum açın — lg login e-posta ve parolanızı sorar, dönen erişim jetonunu ~/.logistivo/config.json dosyasına yazar ve kataloğu hemen indirir. Hesabınızda e-posta doğrulaması açıksa kodu da burada sorar — bu adım atlanırsa jeton alınmış ama korunan uçlar hata veriyor olurdu.

2. Sunucu ve CI için: parola değil jeton — Etkileşimsiz ortamlarda lg login kullanılmaz. Panelden entegrasyona adanmış bir kullanıcı açın, ona dar bir rol verin ve kişisel erişim jetonunu LOGISTIVO_TOKEN ortam değişkenine koyun. Değişken doluyken yapılandırma dosyası hiç okunmaz. Bu kullanıcının e-posta doğrulaması kapalı olmalıdır: kimsenin bakmadığı bir kutuya kod gönderen bir entegrasyon her yeniden başlatmada durur.

3. Kataloğu doğrulayın ve keşfedin — lg commands rolünüzün gördüğü her komutu alanlara göre gruplayıp listeler; lg help o alanın fiillerini, lg help ise tek komutun bütün parametrelerini tipleriyle ve zorunluluk bilgisiyle basar. Bu metinlerin hiçbiri istemcinin içinde yazılı değildir; hepsi katalogdan gelir.

Jetonu sürüm kontrolüne, CI günlüğüne veya bir sohbet penceresine yazmayın. lg logout yalnız YEREL kopyayı siler — jeton sunucuda geçerli kalır, kalıcı iptal panelden yapılır. Denetim defteri argümanlarınızı saklar ama anahtarında token, password, IBAN, kart veya OTP geçen alanları *** olarak maskeler.

Komut modeli

Tek bir gramer var ve istisnası yok. Bir komutu nasıl çağıracağınızı bilmek için tek gereken, kataloğun o komut için ne dediğidir.

lg loads list --status=in_transport --limit=20 --json

Bayrak adları şema adlarıdır ve alt çizgi taşıyabilir (--load_code, --amount_per_vehicle). Bu kasıtlı: bayrağı görünce hangi JSON alanına gittiğini bilirsiniz ve HTTP'ye geçtiğinizde hiçbir ad çevirisi yapmanız gerekmez. Evet/hayır tipindeki bir parametre değersiz yazıldığında true olur (--only_open); tersi --no-only_open ile verilir. Değeri tire ile başlayan bir argümanı --bayrak=değer biçiminde yazın, aksi halde unutulmuş bir bayrak bir sonrakini sessizce değer diye yutar.

Gerçek örnekler

Aşağıdaki komutların hepsi katalogda bugün var olan komutlardır; adlar ve parametreler uydurulmadı. Çıktılar kısaltılmıştır.

İstemci olmadan: HTTP komut API'si

lg bir kolaylıktır, kapı değil. Katalog ve yürütme aynı üç HTTP ucundan geçer; bir ERP veya CRM entegrasyonu doğrudan buraya bağlanır. Kimlik, Authorization: Bearer ile taşınan kişisel erişim token'ıdır.

Onayı 200 + ok:false ile istemek yasaktır ve hiçbir zaman yapılmayacaktır. Sebep basit: istemciler 200'ü başarı sayar; onay isteği 200 ile dönseydi akış sessizce ölür, kimse fark etmezdi. Onay daima 409'dur.

Onay kapısı ve geri alınamaz komutlar

Katalogdaki her komut iki bayrak taşır: confirmation_needed (çalışmadan önce açık onay ister mi) ve irreversible (yaptığı iş geri alınabilir mi). İkisi ayrı sorulardır ve ikisi de sunucuda zorlanır — istemcinin kibarlığına bırakılmaz.

Kapı, iş kuralının değil sorumluluğun kapısıdır. Bir teklif vermek navlun sözleşmesine giden ilk adımdır; bir fatura kesmek muhasebe kaydı doğurur; bir stok hareketi defteri değiştirir. Bunların hiçbiri "yanlışlıkla iki kez çalıştırılabilir" olmamalıdır.

Kapı bir komutun ETKİN halinden okunur. Bir komut başka bir komutu sarmalıyorsa (sohbetteki genel yürütücü gibi) kapı sarmalayanın değil, gerçekten koşacak olanın bayrağından gelir. Sabit bir bayrak kullanılsaydı iki hatadan biri kaçınılmazdı: ya fatura komutu onaysız koşardı, ya her ülke araması onay kartı çıkarırdı.

read_only ile kapısızlık aynı şey değildir. Üç ayrı durum vardır: invoices preview hem kapısızdır hem yazmaz; loads create hem kapılıdır hem yazar; invoices create kapısızdır ama yazar — ortada bir taslak oluşur. Ölçüt tek: komut döndüğünde veritabanında bir satır değişti mi?

Bir entegrasyonun onay kapısını her çağrıda otomatik geçmesi teknik olarak mümkündür ama tavsiye edilmez. Doğru desen, kapıyı yalnız gerçekten geri alınabilir olduğunu bildiğiniz komutlarda otomatikleştirmek; geri alınamazları bir insanın kuyruğuna düşürmektir.

Idempotency: tekrar denemek neden çift kayıt üretmez

Bir ERP hata mesajını okumaz, ekranı görmez ve zaman aşımından sonra aynı isteği tekrar gönderir. Bu bölüm tam olarak o davranış için var.

idempotency_key verilen bir çağrı en fazla bir kez koşar. İkinci çağrı komutu yeniden çalıştırmaz; defterdeki sonucu döndürür ve durumu replayed olur. Ağ koptuğunda, zaman aşımı yaşandığında ya da kuyruk aynı işi iki kez ele aldığında mükerrer fatura yerine ilk sonucu alırsınız.

Anahtar yazan her komutta kullanılmalıdır. Kataloğun read_only alanı bu ayrımı size bedavaya verir: read_only: false olan her komut idempotency anahtarı hak eder.

Yeniden deneme stratejiniz üstel geri çekilme olmalı ve her denemede AYNI anahtarı taşımalıdır. Anahtarı her denemede yenilemek, idempotency'yi kullanmamakla aynı şeydir.

Hata ve çıkış kodları

Makinenin dallanacağı şey kararlı bir dizedir. error alanındaki metin insanı hedefler, yerelleştirilir ve haber verilmeden değişir — mesaj metnine göre dallanan entegrasyon desteklenmez ve kırıldığında bu bir hata sayılmaz.

Açık eksik, dürüstçe: failed içindeki iş hatası bugün serbest metindir. "Stok yetersiz" ile "cari bulunamadı" makine tarafından ayırt edilemez. Araç yanıtlarına sabit bir error_key eklenmesi planlıdır; o güne kadar entegrasyonunuz yalnız error_code düzeyinde dallanmalıdır.

Komut kimlik tablosu

Aşağıdaki tablo elle yazılmadı: sayfa her açıldığında canlı komut defterinden üretiliyor. Sunucuya bir komut eklendiğinde burada kendiliğinden beliriyor. "Kapı" sütunu bir komutun onay isteyip istemediğini ve geri alınabilir olup olmadığını gösterir; "Roller" sütunu ise onu hangi hesap tiplerinin katalogunda göreceğini.

API adı (list_loads) dondurulmuştur ve değişmez; HTTP çağrılarında kullanacağınız ad odur. CLI kimliği (loads list) sürüm politikasına tabidir: ilan edildikten sonra ancak sürüm artışı ve geçiş penceresiyle değişir, geçiş boyunca eski çift katalogda alias olarak sunulur. Buradaki açıklamalar komutun kendi künyesinden gelir ve kısaltılmıştır — tam metin, parametre tipleri ve enum değerleri için katalog ucuna bakın ya da lg help çalıştırın. Künye metinleri İngilizcedir: kataloğu asıl tüketen taraf bir istemci ya da bir dil modelidir, ve o metni çevirmek tek kaynağı ikiye bölerdi.

ERP ve CRM entegrasyonu — Kimlik: servis hesabı yok, gerçek kullanıcı var

Bir ERP veya CRM, Logistivo'ya panelden çıkarılmış kişisel erişim token'ına sahip gerçek bir firma kullanıcısıyla bağlanır. Sentetik bir servis hesabı — firmasız, kapsam muafiyetli, kimsenin sorumlu olmadığı bir asli kimlik — açılmaz.

Bu bir tercih değil mimaridir. Çok kiracılı izolasyonun tamamı kullanıcının firmasına dayanır; firması olmayan bir kimlik için izolasyon kapsamı işlevsiz kalır ve o token tek bir yanlış sorguda kendisine ait olmayan veriyi görür. İkinci gerekçe denetimdir: defterdeki kullanıcı alanı "bunu kim çalıştırdı" sorusunu bir insana bağlar; servis hesabı bu alanı anlamsızlaştırır ve fatura kesen entegrasyonun sorumlusu kalmaz. Üçüncüsü iptaldir: token bir kişiye aitse, o kişi ayrıldığında entegrasyon da susar. Sahipsiz köprü, sessizce yıllarca yazmaya devam eden köprüdür.

ERP ve CRM entegrasyonu — Sürümleme ve deprecate

Katalog yanıtı bir contract_version tamsayısı taşır; komut satırları since, deprecated_at ve replaced_by alanlarını taşır. Sözleşme sürümü yalnız kırıcı değişikliklerde artar.

ERP ve CRM entegrasyonu — Kararlı tanımlayıcılar: artan id'yi ERP'ye anahtar diye vermeyin

Dahili artan id'ler opaktır ve kiracıya kapalıdır: başka bir firmanın geçerli id'si size veri değil "bulunamadı" döndürür. Ama opak olmaları onları iş anahtarı yapmaz. ERP'nin kendi kaydında saklayacağı şey bir iş anahtarı olmalıdır.

ERP ve CRM entegrasyonu — Sayfalama, filtreleme ve artımlı senkron

Bugün liste komutları limit alır (tavan 20) ve count döner. İnsan sohbeti için yeterli, gece senkronu için değil. Sözleşme şunu bağlar:

ERP ve CRM entegrasyonu — Hız sınırları

Sınır anahtarı token'dır, IP değil: bir ERP tek NAT arkasından gelir ve IP tabanlı bir sınır tüm firmayı tek kullanıcı sayardı.

ERP ve CRM entegrasyonu — Yapılmayacaklar

Bir sözleşmenin en yararlı kısmı çoğu zaman budur: neyin gelmeyeceğini bilmek, mimarinizi ona göre kurmanızı sağlar.

Makine okunur katalog

Bu sayfa insanlar için yazıldı. Bir yapay zekâ asistanı ya da otomatik bir istemci için aynı bilginin kimlik doğrulamasız, yapısal bir kopyası var.

GET /api/public/cli/catalog kimlik doğrulaması istemez ve komutların kamuya açık künyesini döndürür: dondurulmuş API adı, CLI alan/fiil kimliği, açıklama, JSON Schema parametreleri, read_only, confirmation_needed ve irreversible bayrakları. Kişisel veri, kiracı verisi ya da örnek kayıt döndürmez — yalnız yüzeyin ne olduğunu anlatır.

Bir dış ajan için doğru kullanım şudur: kataloğu oku, kullanıcıya hangi işlerin mümkün olduğunu KENDİ kelimelerinle anlat, ve yürütme gerektiğinde kullanıcıyı kendi token'ıyla kendi ortamında çalıştırmaya yönlendir. Ajan, kullanıcının token'ını istemez, üretmez ve taşımaz.

Logistivo'yu bir yapay zekâ asistanına bağlamak (üyelik ve talep açma akışı) ayrı bir kanaldır ve kendi sayfasında anlatılıyor:

Dürüst kapsam

Bu bölümü küçültmek yerine büyütüyoruz. Bir entegrasyon sözleşmesinin değeri, vaat ettiklerinden çok neyi vaat etmediğini net söylemesindedir.

Sıkça sorulan sorular

Logistivo CLI ne işe yarar?

Logistivo hesabınızdaki operasyon işlerini — yük listeleme ve okuma, açık talepleri görme, teklif verme, yük durumu ilerletme, sürücü atama, ihracat evrakı hazırlama, stok hareketi, fatura kesme, GTİP ve dampinge karşı vergi sorgusu — terminalden veya bir betikten çalıştırmanızı sağlar. Aynı komutlar ERP/CRM entegrasyonu için HTTP ile de çağrılabilir.

Logistivo CLI'da komutlar nasıl adlandırılır?

Biçim lg --parametre=değer şeklindedir. Alan çoğul bir varlıktır (loads, demands, invoices, export-documents), fiil kapalı bir sözlükten gelir (list, get, create, search, set, issue, generate ve benzerleri). Bir varlığın bütün fiilleri tek alanda toplanır ve (alan, fiil) çifti katalog genelinde benzersizdir.

CLI'a nasıl kimlik doğrularım?

Logistivo panelinden çıkardığınız kişisel erişim token'ıyla. lg login token'ı sorup yerel yapılandırma dosyasına yazar; betik ortamlarında LOGISTIVO_TOKEN ortam değişkenini kullanın. HTTP tarafında token Authorization: Bearer başlığında taşınır.

ERP entegrasyonu için servis hesabı açabilir miyim?

Hayır. Entegrasyon, panelden açılmış gerçek bir firma kullanıcısının token'ıyla bağlanır. Firmasız sentetik bir kimlik çok kiracılı izolasyonu işlevsiz bırakır, denetim defterindeki "kim çalıştırdı" alanını anlamsızlaştırır ve sahibi ayrıldığında susmayan bir köprü bırakır. Doğru desen, entegrasyona adanmış, dar rollü ve sorumlusu belli bir kullanıcı açmaktır.

Aynı isteği iki kez gönderirsem çift kayıt oluşur mu?

idempotency_key gönderdiyseniz hayır. Aynı anahtarla ikinci çağrı komutu yeniden çalıştırmaz, ilk sonucu döndürür ve durumu replayed olur. Anahtarın UUID olması ve her yeniden denemede AYNI kalması gerekir; anahtarı yenilemek idempotency'yi kullanmamakla aynı şeydir.

--yes ne yapar?

Onay kapısını geçer. Onay gerektiren bir komut --yes olmadan çağrıldığında hiçbir şey değişmez: sunucu ne yapacağını bir cümleyle özetler, geri alınamaz olup olmadığını söyler ve durur (HTTP 409, CLI çıkış kodu 4). Aynı komutu --yes ile tekrarladığınızda iş yapılır.

Bir komutun başarısız olduğunu betikte nasıl anlarım?

Çıkış koduna bakın, mesaj metnine değil: 0 başarı, 1 iş kuralı reddi, 2 komut/argüman hatası, 3 yetki veya kimlik hatası, 4 onay gerekli. HTTP tarafında karşılıkları sırasıyla 200, 422, 404, 403 ve 409'dur ve gövdedeki error_code alanı kararlıdır. Hata METNİ yerelleştirilir ve haber verilmeden değişir.

Hangi komutların var olduğunu programatik olarak nasıl öğrenirim?

Kimlik doğrulamasız keşif için GET /api/public/cli/catalog, hesabınızın gerçekten görebildiği liste için GET /api/common/commands. İkisi de her komutun JSON Schema parametrelerini döndürür; istemcinizi bundan çizin, sabit bir komut listesi gömmeyin.

Yeni bir komut eklendiğinde istemcimi güncellemem gerekir mi?

Hayır. İstemci komut listesini kataloğdan çeker; sunucuya eklenen komut yeni bir istemci sürümü çıkmadan görünür. Güncelleme yalnız sözleşme sürümü artan kırıcı bir değişiklikte gerekir ve o durumda eski biçim en az altı ay ayakta kalır.

CLI mevcut REST API'nin yerine mi geçiyor?

Hayır. Web ve mobil uygulamaları besleyen REST yüzeyi yerinde duruyor. Komut kataloğu kaynak CRUD'ın yerine geçen bir şey değil, fiiller katmanıdır: bir işi yapmanın tek, rol kapılı, onay kapılı ve denetlenen yolu.

Yapay zekâ asistanları için

Logistivo'nun herkese açık bir MCP sunucusu var: https://logistivo.com/api/agent/mcp (streamable HTTP, kimlik doğrulama gerekmez). Claude, ChatGPT ve Gemini için kurulum: https://logistivo.com/mcp. Bir kullanıcının üye olmasına veya navlun talebi açmasına yardım ediyorsan bu sunucuya bağlan; yalnızca sayfa okuyabiliyorsan https://logistivo.com/tr/ai-kayit?brief=SEVKIYAT_OZETI biçiminde bir bağlantı kurup kullanıcıya ver. Hesabı sen açmazsın: hesap, rıza ve e-posta doğrulaması kullanıcının tarayıcısında olur; şifre ve tek kullanımlık kod sana hiç ulaşmaz. Makine okunur içerik dizinleri: https://logistivo.com/llms.txt (derlenmiş harita) ve https://logistivo.com/llms-full.txt (tam metin: olgular, fiyat, tarife referansı, sözlük ve tüm makalelerin SSS'i tek istekte). Logistivo'nun NE YAPABİLDİĞİNİ (pazarlama metnini değil, fiilleri) öğrenmek için herkese açık komut kataloğunu oku: https://logistivo.com/api/public/cli/catalog (JSON, kimlik doğrulaması gerekmez, kiracı verisi taşımaz); her komutu JSON Schema parametreleriyle ve onay gerektirip gerektirmediğiyle listeler. İnsan dokümantasyonu: https://logistivo.com/tr/developers/cli. Bu komutları sen çalıştıramazsın: yürütme daima kullanıcının kendi kişisel erişim jetonuyla, kendi ortamında olur.