Yayınlanma: 12 Haziran 2026 | Okuma Süresi: 7 dakika | Kategori: Salesforce


ÖZET

Agentforce Servis Aracısı ile müşteri adayı yakalamak, çok turlu durum yönetimini güvenli bir şekilde ele almayı gerektirir. Standart Akışlar basit görevler için harika olsa da, bir Apex @InvocableMethod kullanmak, konuşma turları boyunca kalıcı durum takibi ve güvenli USER_MODE DML işlemleri sağlar. İşte bir tane oluşturmanın tam yolu budur.


Giriş: Agentforce Dönemi

Salesforce Agentforce, otomatik müşteri etkileşimlerini düşünme şeklimizi tamamen değiştirdi. Sabit, ağaç tabanlı sohbet botlarından akıl yürütebilen, açıklayıcı sorular sorabilen ve eylemler gerçekleştirebilen otonom aracılara geçiyoruz.

Agentforce'un en yaygın erken kullanım örneklerinden biri Müşteri Adayı Yakalamadır. Amaç basittir: bir yapay zeka aracısı kullanıcıdan bilgilerini (örn. Soyadı ve Şirket) ister, bu bilgiyi birden fazla konuşma turu boyunca saklar ve gerekli tüm veriler toplandığında bir Salesforce Müşteri Adayı kaydı oluşturur.

Bunu bir ekran akışı veya otomatik başlatılan bir akışla denemeye çalışsanız da, Apex çağrılabilir eylemleri durum yönetimi ve güvenlik bağlamı üzerinde önemli ölçüde daha fazla kontrol sağlar.

2026'da üretim ortamına hazır bir Müşteri Adayı Yakalama Aracısı için tam şablon budur.


Mimari

Çözümümüz üç temel bileşen gerektirir:

  1. Aracı Yönlendiricisi (start_agent): Kullanıcıyı karşılar ve niyetine göre doğru alt aracıya yönlendirir.
  2. Müşteri Adayı Yakalama Alt Aracı (subagent): LLM'ye tam olarak hangi alanların gerekli olduğunu (Soyadı ve Şirket) talimatlandırır ve eylemi tetikler.
  3. Apex Çağrılabilir Eylemi (@InvocableMethod): Girdiyi ayrıştıran, durumu tutan ve veritabanı eklemesini gerçekleştiren gerçek "motor".

1. Aracı Betiği DSL'si

Agentforce, aracının davranışını tanımlamak için belirli bir Etki Alanı Özel Dili (DSL) kullanır. Turlar boyunca kullanıcının girdisini tutmak için değişkenler tanımlarız.

variables:
    last_name: mutable string = ""
        description: "Müşteri adayı soyadı"
    company: mutable string = ""
        description: "Müşteri adayı şirketi"
    lead_created: mutable boolean = False
        description: "Müşteri adayı daha önce oluşturuldu mu"
    last_lead_id: mutable string = ""
        description: "En son oluşturulan Müşteri Adayı ID'si"

Alt aracımızın mantığı, kullanıcı müşteri adayı yakalama konusunda mesaj gönderdiğinde her seferinde Apex eylemimizi çağırmamız gerektiğini belirtir. Topladığımız mevcut last_name ve company değişkenlerinin yanı sıra userMessage'ı da geçiririz.

subagent lead_capture:
    label: "Müşteri Adayı Yakalama"
    description: "Soyadı ve şirketi toplayın, ardından Apex aracılığıyla bir Salesforce Müşteri Adayı oluşturun."
    reasoning:
        instructions: ->
            if @variables.lead_created == True:
                | Bu konuşmada zaten bir müşteri adayı oluşturuldu. Müşteri Adayı ID'sini paylaşın ve kullanıcının başka bir şeye ihtiyacı olup olmadığını sorun.
            if @variables.lead_created == False:
                | Her müşteri adayı yakalama mesajı için Process Lead Capture Turn'ü kullanın.
        actions:
            process_lead_turn: @actions.process_lead_turn
                    with userMessage = ...
                    with knownLastName = @variables.last_name
                    with knownCompany = @variables.company
                    set @variables.last_name = @outputs.resolvedLastName
                    set @variables.company = @outputs.resolvedCompany
                    set @variables.lead_created = @outputs.isSuccess
                    set @variables.last_lead_id = @outputs.leadId

2. Apex Çağrılabilir Eylemi

Bu desenin gerçek gücü Apex sınıfında yatmaktadır. LLM'nin ne zaman müşteri adayı oluşturacağını tahmin etmek yerine, güvenli bir şekilde iş mantığını yönetmek için çağrılabilir bir eylem kullanırız.

Akış Yerine Neden Apex?

  • Çok Turlu Durum: knownLastName ve knownCompany'yi Apex eylemine geçirerek ve resolvedLastName ve resolvedCompany'yi döndürerek, kullanıcı bilgileri sırayla verse bile konuşma durumunu mükemmel bir şekilde koruruz.
  • Güvenlik Bağlamı: AccessLevel.USER_MODE kullanarak Alan Düzeyi Güvenliğini (FLS) ve CRUD izinlerini dinamik olarak zorunlu kılabiliriz.

İşte girdi ve çıktı değişkenlerinin yapısı:

public class LeadCaptureTurnAction {
    
    public class Request {
        @InvocableVariable(required=true label='Kullanıcı Mesajı')
        public String userMessage;
        
        @InvocableVariable(label='Bilinen Soyadı')
        public String knownLastName;
        
        @InvocableVariable(label='Bilinen Şirket')
        public String knownCompany;
    }
    
    public class Result {
        @InvocableVariable(label='Başarılı mı')
        public Boolean isSuccess;
        
        @InvocableVariable(label='Müşteri Adayı ID')
        public String leadId; // YAKALAMA: String olmalı, Id değil
        
        @InvocableVariable(label='Çözümlenmiş Soyadı')
        public String resolvedLastName;
        
        @InvocableVariable(label='Çözümlenmiş Şirket')
        public String resolvedCompany;
        
        @InvocableVariable(label='Mesaj')
        public String message;
    }
    
    @InvocableMethod(label='Müşteri Adayı Yakalama Turunu İşle')
    public static List<Result> processTurn(List<Request> requests) {
        // 1. Eksik alanları Regex kullanarak kullanıcı mesajından ayrıştırın
        // 2. Bulunan alanları knownLastName ve knownCompany ile birleştirin
        // 3. Her ikisi de mevcutsa, Müşteri Adayını ekleyin
        // 4. Sonucu döndürün
    }
}

leadId Bağlama Yakalaması

public String leadId;'nin Id yerine String olarak tanımlandığına dikkat edin. Bu, Agentforce'ta kritik bir nüanstır. Bir çağrılabilir eylemin çıktısını bir Aracı Betiği değişkenine bağlarken (set @variables.last_lead_id = @outputs.leadId), Agentforce, kesin Salesforce Id türleri yerine öncelikli olarak ilkel dize türlerini tercih eder. Id kullanmak, yürütme sırasında sessiz bağlama hatalarına neden olabilir.


3. Güvenliği USER_MODE ile Zorlama

Agentforce bir çağrılabilir eylemi yürüttüğünde, Einstein Service Agent kullanıcısı (veya yapılandırılmış varsayılan aracı kullanıcınız) bağlamında çalışır.

Standart DML (insert newLead;) kullanarak bir müşteri adayı eklemeye çalışırsanız, sistem bağlamı gerekli güvenlik kontrollerini atlayabilir veya kuruluş paylaşım ayarlarına bağlı olarak öngörülemeyen bir şekilde başarısız olabilir.

2026'da doğru yaklaşım her zaman kullanıcı modu DML'yi zorlamaktır:

Database.SaveResult sr = Database.insert(newLead, false, AccessLevel.USER_MODE);

Eksik İzin Seti

USER_MODE eklemesinin çalışması için Einstein Service Agent kullanıcısının Müşteri Adayı kayıtları oluşturma iznine sahip olması gerekir.

Şu izinleri veren bir İzin Seti (örn. LeadCaptureAgent_Apex_Access) oluşturmanız gerekir:

  1. Apex Sınıf Erişimi: LeadCaptureTurnAction sınıfınıza.
  2. Nesne Erişimi: Lead nesnesine Okuma ve Oluşturma izinleri.
  3. Alan İzinleri: LastName ve Company alanlarına Düzenleme erişimi.

Bu İzin Setini Einstein Service Agent kullanıcısına atayın. Olmadan, aracı sonsuz bir döngüye girecek, çünkü sessiz USER_MODE DML hatası isSuccess'in asla true döndürmesini engellediği için zaten topladığı alanları isteyecektir.


4. Aracı Yerel Olarak Test Etme

Yayınlamadan önce, çok turlu mantığı Salesforce CLI kullanarak doğrulamanız gerekir. sf agent preview komutu, konuşmayı doğrudan terminalinizden simüle etmenizi sağlar.

# Oturumu başlat
sf agent preview start --json --authoring-bundle LeadCaptureAgent --use-live-actions --target-org my-org

# İlk ifadeyi gönder (Yalnızca Şirket)
sf agent preview send --json --session-id <SESSION_ID> --utterance "Şirketim Acme Corp" --authoring-bundle LeadCaptureAgent --target-org my-org

# İkinci ifadeyi gönder (Soyadı)
sf agent preview send --json --session-id <SESSION_ID> --utterance "Soyadım Smith" --authoring-bundle LeadCaptureAgent --target-org my-org

# Müşteri Adayı oluşturmasını doğrulayın
sf data query --query "SELECT Id, LastName, Company FROM Lead ORDER BY CreatedDate DESC LIMIT 1" --target-org my-org

Sonuç

Agentforce, inanılmaz derecede dinamik konuşma deneyimleri oluşturmamıza olanak tanır, ancak durum ve güvenliği ele alma şeklimizde bir değişiklik gerektirir. Müşteri adayı yakalamayı özel bir alt aracıya yönlendirerek ve deterministik durum yönetimi için Apex çağrılabilir eylemlerine güvenerek, güvenli, dayanıklı ve kullanıcı dostu bir deneyim sağlarsınız.

Her zaman ID çıktıları için String kullanmayı, USER_MODE DML'yi zorlamayı ve aracı kullanıcınıza doğru izin setlerini atamayı unutmayın.


Yazar Hakkında: Bu kılavuz, modern yapay zeka platformları ile kurumsal CRM mimarisinin kesişimini araştıran Resumity Teknik Yayın Ekibi tarafından yazılmıştır.