

HubSpot + AI Sunum: Satış Sunum Otomasyonu Rehberi (2026)
2026'da HubSpot kullanan satış ekipleri için hesap bazlı satış sunumlarını otomatikleştirmenin yatırım getirisi ölçülebilir: ortalama Hesap Yöneticisi başına haftada 2-4 saat zaman tasarrufu, toplantıdan toplantıya geçişte %12-18 artış ve ekip genelinde sunum hazırlık varyansında %30-60 azalma. 2026 HubSpot + 2Slides iş akışı, HubSpot'ta zaten mevcut olan verilerle (şirket, anlaşma aşaması, ürün ilgisi, şampiyon iletişim, rekabetçi alternatifler) herhangi bir hesap için tamamen kişiselleştirilmiş bir satış sunumu oluşturur. Üç entegrasyon yolu mevcuttur: HubSpot Workflow → Webhook → 2Slides API; Sunum Oluştur butonu içeren özel HubSpot App Card; belirli bir aşamadaki tüm anlaşmalar için planlanmış günlük toplu işlem. Bu rehber, HubSpot alanlarını sunum içeriğine dönüştüren tam webhook payload'unu, prompt şablonunu ve bugün gerçek RevOps ekipleri tarafından üretimde kullanılan 2Slides API akışını (generate → jobs/:id → download) içermektedir.
HubSpot üzerinde bir satış ekibi için gelir operasyonlarını yönetiyorsanız, sorunu zaten biliyorsunuzdur: her Hesap Yöneticisi, bir sonraki görüşmesi öncesinde sunuma "sadece küçük bir ayarlama" yapılması için pazarlama veya satış etkinleştirme ekibinden yardım istiyor. Bunu kırk temsilci ve devam eden üç yüz anlaşmayla çarpın ve Google Slides şablonlarını Salesforce tarzı CRM verilerine yapıştırmak tam zamanlı bir iş haline gelir — üstelik Salesforce'un Belge Oluşturma modülüne eşdeğer yerel bir özelliği olmayan HubSpot'tasınız.
Bu rehber, herhangi bir aşamadaki herhangi bir anlaşmanın, bir insanın slayt yöneticisine dokunmadan kişiselleştirilmiş, marka tutarlı, kanala hazır bir satış sunumu oluşturabilmesi için HubSpot'u 2Slides V1 API'ye nasıl bağlayacağınızı göstermektedir. Aşağıdaki paternler, B2B SaaS, siber güvenlik ve kurumsal AI şirketlerindeki RevOps ekipleri tarafından $40K ile $400K+ arasında ortalama sözleşme değerlerini artırmak için kullanılmaktadır.
HubSpot Entegreli Sunumlar Neden Kazanır
Satış sunumlarını HubSpot üzerinden otomatikleştirmenin iş gerekçesi, üç ölçülebilir kaldıraçtan gelir.
Kaldıraç 1: AE zamanı kazanımı. 20+ kullanıcılı dağıtımlara sahip 2Slides müşterileri arasında yapılan iç gözlemlerde, hesap yöneticilerinin (account executive) haftalık 2-4 saatlerini sunum özelleştirmesine harcadığı görülüyor — giriş slaytlarını yeniden yazma, logoları güncelleme, rakibin zayıf noktalarını yapıştırma, ROI hesaplayıcılarını değiştirme. Tam maliyetli bir AE'nin yıllık 160K$ olduğu düşünüldüğünde, bu her AE için yılda 6.400-12.800$ saf slayt emeği demektir. 40 kişilik bir satış ekibi için muhafazakar bir tahminle yılda 256K$ kazanılmış kapasite söz konusudur.
Kaldıraç 2: Toplantıdan toplantıya dönüşüm. Canlı CRM verilerinden üretilen sunumlar — yani şirketin gerçek gelir bandı, karar vericinin gerçek unvanı, anlaşma kaydında gerçekten listelenen rakip — jenerik şablon sunumlara göre %12-18 daha yüksek bir sonraki toplantı rezervasyonu dönüşümü sağlar. Nedeni basittir: özgüllük hazırlıklılığı işaret eder ve hazırlıklılık bir satış elemanının ikinci bir toplantıya değer olduğunu gösterir.
Kaldıraç 3: Varyans azaltma. En üst çeyrek AE'leriniz harika sunumlar oluşturur. En alt çeyreğiniz ise potansiyel satış hattını kaybettiren vasat sunumlar yapar. Otomasyon, en altı yukarı çeker. Kohort verilerinde, HubSpot tetiklemeli sunum üretimi kullanan RevOps ekipleri, yönetici kalite güvence skorlarıyla ölçülen sunum kalitesi varyansında %30-60 azalma bildiriyor.
Üçünde de ortak kalıp: sunum ürün değildir, hazırlık üründür. Hazırlığı otomatikleştirmek, RevOps'un 2026'da yapabileceği en yüksek kaldıraçlı harekettir. Yetkinlendirme tarafına daha derin bir bakış için, AI ile satış yetkinlendirme sunumları nasıl oluşturulur rehberimize bakın.
2026 HubSpot + 2Slides Mimarisi
Her yönteme dalmadan önce, tüm uygulamaların takip ettiği mimari şu şekildedir:
HubSpot CRM (fırsatlar, şirketler, kişiler) │ ├── Tetikleyici (workflow, uygulama kartı, cron) │ ▼ Dönüştürücü Katman (serverless fn / Zapier / Make) │ - CRM alanlarından prompt oluşturur │ - 2Slides V1 API'yi çağırır │ ▼ 2Slides V1 API ├── POST /api/v1/slides/generate (jobId döndürür) ├── GET /api/v1/jobs/{id} (durum = success olana kadar yoklama) └── GET /api/v1/slides/download-slides-pages-voices (varlık URL'leri) │ ▼ Teslimat (HubSpot fırsatına not olarak geri, AE'ye e-posta, Slack DM)
2Slides API iş başına durumsuz (stateless), asenkron ve kredi ölçümlüdür.
x-api-key: sk-2slides-...jobIdpendingprocessingsuccess/api/v1/jobs/{id}Yöntem 1: HubSpot Workflow → Webhook → 2Slides API
Bu en yaygın entegrasyon yoludur. Bir HubSpot Workflow, anlaşma hattındaki aşama değişikliğini izler ve 2Slides API ile iletişim kuran sunucusuz bir fonksiyona webhook tetikler.
Adım 1: HubSpot Workflow Oluşturma
HubSpot'ta Otomasyon → Workflows → Workflow oluştur → Anlaşma tabanlı bölümüne gidin. Kayıt tetikleyicisini ayarlayın:
- Filtre: şunlardan herhangi biri
Anlaşma aşaması,Keşif Tamamlandı,Demo PlanlandıTeklif Gönderildi - Yeniden kayıt: aşama değişikliğinde etkinleştirildi
Bir Webhook gönder eylemi ekleyin:
- Yöntem:
POST - URL:
https://your-revops-fn.vercel.app/api/hubspot/generate-deck - ,
dealveilişkili şirketözellik gruplarını dahil edinbirincil iletişim
Adım 2: Dönüştürücü Fonksiyon
Bunu Vercel, Cloudflare Workers veya AWS Lambda'ya deploy edin. Fonksiyon HubSpot webhook'unu alır, 2Slides prompt'unu oluşturur ve üretimi başlatır.
// /api/hubspot/generate-deck.ts export async function POST(req: Request) { const payload = await req.json() const deal = payload.properties const company = payload.associations?.company?.properties ?? {} const contact = payload.associations?.contact?.properties ?? {} const prompt = buildDeckPrompt({ deal, company, contact }) const generateRes = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY!, }, body: JSON.stringify({ prompt, slide_count: 12, language: 'en', aspect_ratio: '16:9', theme_id: process.env.BRAND_THEME_ID, // kilitli marka temanız metadata: { hubspot_deal_id: deal.hs_object_id, account: company.name, }, }), }) const { jobId } = await generateRes.json() // jobId -> anlaşma ilişkilendirmesini sonraki sorgu için kaydet await kv.set(`deal:${deal.hs_object_id}:job`, jobId, { ex: 86400 }) return Response.json({ ok: true, jobId }) }
Adım 3: Sorgulama ve Teslim
İkinci bir fonksiyon (her 90 saniyede bir Vercel Cron tarafından veya HubSpot'un gecikmeli workflow yeniden girişi ile çağrılır)
/api/v1/jobs/{id}const jobRes = await fetch(`https://2slides.com/api/v1/jobs/${jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY! }, }) const job = await jobRes.json() if (job.status === 'success') { const assets = await fetch( `https://2slides.com/api/v1/slides/download-slides-pages-voices?jobId=${jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY! } } ).then(r => r.json()) await hubspotClient.crm.objects.notes.basicApi.create({ properties: { hs_note_body: `Yeni sunum hazır: ${assets.pptx_url}`, hs_timestamp: Date.now(), }, associations: [{ to: { id: deal.hs_object_id }, types: [{ category: 'HUBSPOT_DEFINED', typeId: 214 }] }], }) }
Bu, Zapier haftalık rapor otomasyonumuzda kullandığımız desenin aynısıdır — bir üretim çağrısı, bir sorgulama, bir teslim — sadece Zapier yerine HubSpot üzerinden bağlanmıştır.
Yöntem 2: Generate Deck Butonu ile HubSpot App Card
Yöntem 1 otomatiktir. Yöntem 2 ise talep üzerinedir: AE, HubSpot'ta bir deal'ı açar, sağ kenar çubuğunda özel bir kart görür, Generate Deck düğmesine tıklar ve deck iki dakika sonra gelen kutusuna düşer.
Bu, bir HubSpot UI Extension kullanır (Developer Projects platformunun bir parçası).
UI Extension Kodu
// src/app/extensions/DealDeckCard.tsx import { hubspot, Button, Flex, Text, Alert, LoadingSpinner, } from '@hubspot/ui-extensions' import { useState } from 'react' hubspot.extend(({ context, runServerlessFunction }) => ( <DeckCard context={context} runServerless={runServerlessFunction} /> )) function DeckCard({ context, runServerless }) { const [state, setState] = useState<'idle' | 'working' | 'done' | 'error'>('idle') const [deckUrl, setDeckUrl] = useState<string | null>(null) async function onClick() { setState('working') const { response } = await runServerless({ name: 'generateDeck', parameters: { dealId: context.crm.objectId }, }) if (response.deckUrl) { setDeckUrl(response.deckUrl) setState('done') } else { setState('error') } } return ( <Flex direction="column" gap="sm"> <Text>2Slides kullanarak bu hesap için kişiselleştirilmiş bir satış sunumu oluşturun.</Text> {state === 'idle' && <Button onClick={onClick}>Generate Deck</Button>} {state === 'working' && <LoadingSpinner label="Sunum hazırlanıyor (90–120s)" />} {state === 'done' && deckUrl && ( <Alert title="Sunum hazır"> <a href={deckUrl} target="_blank" rel="noreferrer">Sunumu aç</a> </Alert> )} {state === 'error' && <Alert variant="danger">Oluşturma başarısız — RevOps loglarını kontrol edin.</Alert>} </Flex> ) }
Serverless Yardımcısı
Yukarıda referans verilen serverless fonksiyonu (
generateDeck/api/v1/slides/generate/api/v1/jobs/{id}// src/app/app.functions/generateDeck.js exports.main = async (context) => { const { dealId } = context.parameters const deal = await hubspotFetchDeal(dealId) const prompt = buildDeckPrompt(deal) const gen = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY }, body: JSON.stringify({ prompt, slide_count: 12, theme_id: process.env.BRAND_THEME_ID }), }).then(r => r.json()) // 3 dakikaya kadar yokla for (let i = 0; i < 36; i++) { await new Promise(r => setTimeout(r, 5000)) const job = await fetch(`https://2slides.com/api/v1/jobs/${gen.jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY }, }).then(r => r.json()) if (job.status === 'success') { return { deckUrl: job.result?.pptx_url } } if (job.status === 'failed') throw new Error(job.error || 'oluşturma başarısız') } throw new Error('zaman aşımı') }
Bu pattern — CRM objesi → extension kartı → API çağrısı → satır içi sonuç — pazarlama ekiplerinin içerik üretimini ölçeklendirirken kullandığı yaklaşımın aynısıdır; pazarlama ekiplerinin AI sunum destelerini ölçekte nasıl çalıştırdığını inceleyin.
Yöntem 3: Zamanlanmış Toplu Üretim
Her sunumun talep üzerine oluşturulması gerekmez. Öngörülebilir pipeline incelemeleri için — her Pazartesi sabahı, her çeyreklik iş değerlendirmesi, her MEDDPICC aşaması yenilemesi — cron ile zamanlanmış toplu üretim, gerçek zamanlı webhook'lardan daha ucuz ve daha güvenilirdir.
Desen
HubSpot'ta hedef aşamadaki her fırsatı sorgulayan, her biri için yeni bir sunum oluşturan ve satış temsilcisine sabah özeti e-postası gönderen gecelik bir iş çalıştırın.
// /api/cron/nightly-deck-refresh.ts export const runtime = 'nodejs' export const maxDuration = 300 export async function GET(req: Request) { // Vercel Cron, CRON_SECRET ile koruma sağlar if (req.headers.get('authorization') !== `Bearer ${process.env.CRON_SECRET}`) { return new Response('Unauthorized', { status: 401 }) } const deals = await hubspotClient.crm.deals.searchApi.doSearch({ filterGroups: [{ filters: [ { propertyName: 'dealstage', operator: 'EQ', value: 'proposal_sent' }, { propertyName: 'hs_lastmodifieddate', operator: 'GT', value: String(Date.now() - 86400000) }, ], }], properties: ['dealname', 'amount', 'competitor', 'product_interest', 'champion_title'], limit: 100, }) const jobs = await Promise.all(deals.results.map(async (deal) => { const prompt = buildDeckPrompt(deal) const res = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY! }, body: JSON.stringify({ prompt, slide_count: 10, theme_id: process.env.BRAND_THEME_ID }), }).then(r => r.json()) return { dealId: deal.id, jobId: res.jobId, owner: deal.properties.hubspot_owner_id } })) await enqueueDeliveryJobs(jobs) // SQS / Upstash QStash / Trigger.dev return Response.json({ enqueued: jobs.length }) }
vercel.json{ "crons": [ { "path": "/api/cron/nightly-deck-refresh", "schedule": "0 6 * * 1-5" } ] }
Sabah altı, hafta içi. Satış temsilcisi e-postayı açar, sunum hazır bekler.
CRM Alanlarını Sunum İçeriğine Dönüştüren Prompt Şablonu
Sunum kalitesini belirleyen en büyük faktör prompt'tur. İyi prompt'lar, kıdemli bir satış yöneticisinin yeni bir çalışana söyleyeceği şeyleri kodlar: "şirket X olduğunda, Y rolünde bir şampiyon varken, Z sonuca odaklanıldığında, sunumu böyle oluştur." Yapıştırmaya hazır şablon:
function buildDeckPrompt({ deal, company, contact }: Ctx) { return ` B2B yazılım değerlendirmesi için 10-12 slaytlık bir satış sunumu oluştur. HESAP BAĞLAMI - Şirket: ${company.name} - Sektör: ${company.industry ?? 'belirtilmemiş'} - Yıllık gelir bandı: ${company.annualrevenue ?? 'belirtilmemiş'} - Çalışan sayısı: ${company.numberofemployees ?? 'belirtilmemiş'} - Web sitesi: ${company.domain} ANLAŞMA BAĞLAMI - Anlaşma aşaması: ${deal.dealstage} - Anlaşma tutarı: $${deal.amount} - Ürün ilgisi: ${deal.product_interest} - Öncelikli kullanım senaryosu: ${deal.primary_use_case} - Rakip kısa listesi: ${deal.competitors /* virgülle ayrılmış */} - Değerlendirme zaman çizelgesi: ${deal.close_date} ŞAMPİYON BAĞLAMI - İsim: ${contact.firstname} ${contact.lastname} - Ünvan: ${contact.jobtitle} - Bildirilen öncelikler: ${contact.priorities} SUNUM YAPISI 1. Başlık slaytı — "${company.name} × <Markanız>: ${deal.primary_use_case}" 2. Bugünkü dünyaları — ${company.industry} sektörüne özgü 3 madde 3. Hiçbir şey yapmama maliyeti — ${company.annualrevenue} bandını kullanarak ölçümle 4. Yaklaşımımız — ${deal.primary_use_case} ile uyumlu 3 temel sütun 5. Kanıt — ${company.industry} sektöründen (veya yakın sektörlerden) 2 vaka çalışması 6. ${deal.competitors} karşısında farklılaşma — aşağıdaki savaş kartı bölümüne bakın 7. Uygulama planı — ${deal.close_date} tarihine uyarlanmış 30/60/90 8. Ticari özet — $${deal.amount} tutarına dayalı aralık 9. Riskler ve azaltma önlemleri 10. Sonraki adımlar — ${deal.dealstage} ile uyumlu TON - Hedef kitleye uygun: ${contact.jobtitle} - Ünvan VP, SVP, Chief, Director içeriyorsa resmi; aksi halde samimi. - Her slayt: bir fikir, bir grafik veya bir alıntı, metin duvarı yok. `.trim() }
Şablonu versiyon kontrolü altında tutun. Pazarlama ekibi mesajlaşma çerçevesini güncellediğinde, tek bir dosyayı değiştirirsiniz ve bir sonraki cron çalışması bunu alır.
Rekabetçi Alternatifleri Ele Alma
HubSpot'taki
deal.competitorsconst BATTLECARDS: Record<string, string> = { 'Rakip A': ` Rakip A kendini <onların iddiası> üzerinden konumlandırıyor. Karşı argüman: <sizin kanıt noktanız> + <3 kelimelik slogan>. Yerleştirilecek mayın sorusu: "Son güvenlik denetimlerini ne zaman yayınladılar?" `, 'Rakip B': ` Rakip B <onların açısı> ile öne çıkıyor. Karşı argüman: <sizin karşı argümanınız> — <müşteri adı> geçiş vakasına referans verin. Mayın: "500 kullanıcı sonrası kişi başı limitlerini sorun." `, } function battlecardSection(competitorsCsv: string) { const names = competitorsCsv.split(',').map(s => s.trim()).filter(Boolean) if (!names.length) return '' return ` REKABETÇİ BATTLECARD'LAR ${names.map(n => BATTLECARDS[n] ?? '').filter(Boolean).join('\n')} Bunu Farklılaştırma slaytını doldurmak için kullanın. Rakibi asla ikiden fazla kez adlandırmayın. `.trim() }
battlecardSection(deal.competitors)Ondan fazla olduğunda battlecard'ları sabit kodlamak yerine bir veritabanı tablosunda saklayın. Ürün Pazarlama Müdürünüz PR göndermeden bunları düzenleyebilir.
Sık Sorulan Sorular
HubSpot'un her özellik güncellemesinde yinelenen sunumlar oluşturmasını nasıl engellerim?
Deal nesnesine
last_deck_generated_atlast_deck_generated_at2Slides kredileri açısından maliyeti nedir?
Her
/api/v1/slides/generateSunumu İngilizce dışında bir dilde oluşturabilir miyim?
Evet.
/api/v1/slides/generatelanguage: 'de'language: 'ja'language: 'es'Görsel markayı nasıl sabitlerim ki her sunum aynı görünsün?
Her oluşturma isteğinde kilitli bir
theme_idBRAND_THEME_IDOluşturma işi başarısız olursa ne olur?
/api/v1/jobs/{id}statusfailederrorSonuç
HubSpot, Salesforce olmaya çalışmıyor ve bu sorun değil — sadeliği bir özellik. Ancak sadelik aynı zamanda native doküman otomasyonu sunmadığı anlamına da geliyor. Bu boşluk bir hata değil, bir özellik çünkü HubSpot'u bir AI sunum API'sine bağlayan RevOps ekibinin, satış teknoloji yığınındaki en değerli alanın sahibi olduğu anlamına geliyor: alıcının önüne gelen sunum.
Yukarıdaki üç yöntem — workflow webhook, uygulama kartı butonu, planlanmış batch işleme — bir satış ekibinin ihtiyaç duyduğu tüm oluşturma tetikleyicilerini kapsıyor. Huni aşamanıza uygun olanı seçin. Discovery ve Demo aşamaları neredeyse her zaman talep üzerine (uygulama kartı) çalışmayı ister. Teklif ve Müzakere aşamaları, aşama değişikliğinde otomasyondan en çok faydayı görür (workflow webhook). Pipeline incelemeleri ve QBR hazırlıkları batch işlemedir (cron). Üçünü de çalıştırın ve pipeline'daki her fırsat, her gün, el altında CRM-doğru bir sunuma sahip olsun.
Satış sunumlarınızı HubSpot'tan otomatikleştirin — 2Slides API key edinin ve bir gün içinde bir sonraki workflow'unuza entegre edin.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free