VOICE CENTER · אפיון
v2.2 · 12.05.2026 · SOHO/SMB/SME

Voice Center — אפיון מלא

פלטפורמת SaaS ישראלית ל-SOHO/SMB/SME. ארבעה מוצרים מדורגים בפשטות: הודעות → מזכירה → מכירות → צ׳אט. סטאק קולי: Pipecat + xAI Grok + Twilio + Tranzila.
v2.1 · 12.05.2026 אפיון בלבד (לא קוד) בסיס קוד: voice-agent-grok השוואה: agenteam.co

1. סקירה

המוצרים שלנו לרוב חופפים פונקציונלית למה ש-AgenTeam עושים. הבידול האמיתי הוא בעיקר ארבעה ענפים:

  1. רוחב היצע — אנחנו מוכרים 4 מוצרים מדורגים (מהפשוט לעמוק), הם מוכרים "פלטפורמה" אחת גנרית
  2. איכות עברית — Grok Voice עם prompt-engineering מותאם עברית (לעומת OpenAI Realtime שלהם)
  3. זרימת הצטרפות — URL/PDF/Word → סוכן אוטומטית
  4. סליקה ישראלית — Tranzila ישיר, self-serve מלא מהקליק הראשון

בלי ליפול לרומאנטיקה של "killer feature" — מציאת בידול בולט אחד היא קשה. הנכס שלנו הוא execution + רוחב + עברית + תמחור.

ארבעת המוצרים (מסודרים מהפשוט לעמוק)

📲

1. שירות הודעות

הכי פשוט בעולם. כל לקוח מקבל "הגעת ל-X, אני לא זמין כרגע, השאר הודעה". AI מתנהג יפה, לוקח פרטים, שולח אימייל/SMS לבעל העסק.

📞

2. מזכירה דיגיטלית

עונה, מסננת, מתאמת פגישות, מעבירה לנציג כשצריך. Voice Realtime + tools.

🎯

3. סוכן מכירות

נכנסות ויוצאות. Hardcoded pitch, מעביר מהר מאוד לנציג אנושי כשמתעניינים.

💬

4. צ׳אט לאתר

פחות מעניין כרגע — דורש מהלקוח להדביק widget לאתר. נחמד כ-upsell אבל לא כניסה ראשית.

מה השונה מ-AgenTeam (בכנות)

ממדAgenTeamVoice Center
היצע מוצרים"פלטפורמה" אחת גנרית — הלקוח צריך להבין מה לבנות4 מוצרים נפרדים — קונה את מה שמתאים לו
סטאק קוליOpenAI Realtime (alloy/echo — הוכח מהקוד)xAI Grok Voice + Pipecat (עברית טובה יותר — אומת)
גרסת ניסיוןאין30 דקות חינם + מספר זמני

מסמכים נוספים

שני מסמכי הרקע שעמדו בבסיס האפיון הזה:

2. מה גילינו על AgenTeam

חקרתי את ה-bundles של הדשבורד שלהם (הורדה ישירה מ-Vercel). הסטאק שלהם חשוף בקוד.

1.1 הסטאק הקולי — OpenAI לבד

בקובץ AgentDetail-B9uX-zwn.js (86KB) — voice='alloy' מופיע כקול ברירת מחדל. alloy זה שם ייחודי של OpenAI TTS (6 קולות: alloy/echo/fable/onyx/nova/shimmer).
Voice speed slider מוגדר ל-0.25–1.5 — בדיוק הטווח של OpenAI TTS.
מילת המפתח realtime מופיעה ב-AgentDetail — מצביע על שימוש ב-OpenAI Realtime API (gpt-realtime model — WebSocket יחיד ל-STT+LLM+TTS).
Privacy מצהיר במפורש: OpenAI ל-STT/NLU/text generation, Twilio לטלפוניה.
אפס אזכורים של: ElevenLabs, Deepgram, Cartesia, Pipecat, LiveKit, xAI, Grok, Vapi, Retell.

1.2 אין שום זרימת URL → סקרייפ → סוכן

מיפיתי את כל ה-chunks של הדשבורד מה-bundle. אלה כל ה-routes שקיימים:

Dashboard · AdminDashboard · AgentManagement · AgentDetail · AgentRunner
RealtimeCall · CheckVoiceBot · CheckChatbot · PhoneNumbers · BillingPage
BillingHistory · Settings* · Resources · ApiDocs · VerifyEmailPage

מה אין: UrlImport, Wizard, Scraper, WebsiteAnalyzer, OnboardingWizard, AgentBuilder, Templates — אפס.

ברירת המחדל של system_prompt בקוד: "You are a helpful AI assistant." — הגנרי ביותר שיש. אין תבניות לפי תעשייה, אין wizard, אין סקרייפר.

הסרטונים ב-YouTube שלהם (וידאתי דרך oEmbed API):

  • "יצירת סוכן בינה מלאכותית שמאשר הגעה לאירועים"
  • "יצירת סוכן מכירות מבוסס בינה מלאכותית"
  • "יצירת סוכן בינה מלאכותית שמנהל יומן פגישות"

שלושתם מסבירים איך לכתוב prompt ידנית, לא איך לסרוק URL.

1.3 ה-API שלהם — Plain CRUD

GET    /companies
POST   /agents              ← אתה שולח system_prompt
PATCH  /agents/:id
POST   /agents/:id/leads
PATCH  /agents/:id/leads/:id

אין POST /agents/from-url, אין /scrape, אין /generate. הכל manual flow.

1.5 מיפוי ה-Routes של AgenTeam (לבחינה)

Routeתפקידמה אנחנו לוקחים
/שיווקבסיס מבני אבל מחליף מסר
/productסקירת מוצרמחלקים ל-3 דפי מוצר (secretary, messaging, sales)
/pricing3 חבילות4 חבילות + Trial — עם Tranzila checkout
/records5 הקלטות + 3 צ׳אטים20+ הקלטות לפי תעשייה
/api-docsתיעוד CRUD מעולהנשכפל + MCP server + AI Context Pack
/check-voice-bot"בחר חברה" — דלWebRTC live demo, בלי הרשמה
/agent-tutorials3 YouTubeKnowledge base + ספריית פלייבוקים

3. הקונספט

הבעיה האמיתית של SOHO/SMB/SME ישראלי: לא "אין AI" — אלא מאבדים פניות כי אין מי שיענה. שיחות אחרי שעות, לידים לא הוחזרו, פגישות לא אושרו. זה פדיון אבוד.

הפתרון: שלוחה דיגיטלית 24/7 שעובדת כמו עובד שכיר — אבל פחות משכר מינימום ליום. הלקוח לא קונה "מודל שפה". הוא קונה נציג עבודה בענן.

הסטוריטלינג השיווקי: מחשבון "פניות אבודות" על הומפייג ("כמה שיחות החמצת החודש?"), לא דיבור על "GPT-4" או "Realtime API".

ארבעת המוצרים — מהפשוט לעמוק

📲

1. שירות הודעות (Smart Voicemail) — הכי פשוט בעולם

AI עונה לשיחה, פותח עם hardcoded פר-לקוח: "הגעת למרפאה של ד״ר זימן / מוסך יהלומי. כרגע לא זמין, רוצה להשאיר הודעה?" לוקח פרטים, מתעד, שולח SMS/אימייל לבעל העסק עם סיכום. בלי tools מורכבים, בלי קביעת פגישות, בלי שום דבר. זה ה-MVP האמיתי וה-entry point החינמי-כמעט.

עוסק מורשהחד-עובד מוסכיםחנויות
📞

2. מזכירה דיגיטלית

עונה, מסננת, מתאמת פגישות בזמן אמת (Google Calendar), מעבירה לנציג כשצריך, שולחת SMS אישור. פלייבוק מותאם למרפאות / משרדי עו"ד / קליניקות.

מרפאותעו"ד מספרותקליניקות
🎯

3. סוכן מכירות (נכנסות + יוצאות)

Hardcoded pitch עם 2-3 שורות מידע על המוצר. מעביר מהר מאוד לנציג אנושי ברגע שהשיחה הופכת רצינית. לא מנסה לסגור עסקאות בעצמו — מתפקיד כ-pre-qualifier.

נדל"ןביטוח קורסיםחוגים
💬

4. צ׳אט לאתר (Lower priority)

Widget שמדביקים לאתר. דורש מהלקוח גישה לקוד האתר שלו → פחות מתאים ל-SOHO בלי מפתחים. נכנס לרודמאפ אבל לא מוצר entry-level.

ארבעת המוצרים רצים על אותה תשתית טכנית (Pipecat+Grok+Twilio). השוני הוא בפלייבוק (system_prompt) + tools פעילים + מחיר.

מה המערכת באמת עושה (מאחורי הקלעים)

4. זרימת Onboarding: URL/PDF → סוכן חי

זרימת ההצטרפות הסטנדרטית של המוצר. הלקוח מביא URL של האתר שלו (או PDF/Word), המערכת סורקת, מחלצת מידע, ובונה את ה-system_prompt אוטומטית. בלי זה אין self-serve.

הזרימה — מקצה לקצה

1
הלקוח נכנס לאתר ולוחץ "התחל בחינם"
בוחר מוצר (מזכירה / הודעות / מכירות) → ממשיך ב-onboarding wizard.
2
בחירת מקור: URL / PDF / Word / טקסט ידני
"מאיפה תרצה שאלמד עליך?" — שדה URL, או drag&drop של PDF/DOCX, או textarea חופשי.
FileUpload (S3/R2) + URL validation
3
סקרייפ ב-cascade (אם URL)
המערכת מנסה ב-3 שכבות (פירוט בטאב הבא): Firecrawl → CloakBrowser → Playwright. עוצרת ב-10-15 דפים עיקריים.
Worker job · 30-60s
4
חילוץ מידע מובנה
מהדפים שהוצאו: שם העסק, תיאור, שירותים/מוצרים, שעות פעילות, מחירים (אם יש), טלפון, כתובת, FAQ.
Claude Opus 4.7 — extraction prompt
5
הצגה ללקוח לאישור (Human-in-the-loop)
"זה מה שהבנתי על העסק שלך — האם זה נכון?" — הלקוח עורך/מאשר. הצעד החשוב ביותר ל-trust.
Editable form + diff highlight
6
בחירת אישיות הסוכן
שם הסוכן (ברירת מחדל: "אלמוג" / "תמיר" / "נועה"), קול (Ara/Eve/Sal/Leo/Rex של Grok), טון (פורמלי/חברותי/אנרגטי), שפה (he/en).
Grok voices · UI selector
7
בחירת פלייבוק
לפי המוצר שנבחר: מזכירה (לוקח הודעות + מתאם פגישות + מסנן), הודעות (תזכורות + מעקב), מכירות (פיץ׳ + סינון + סגירה).
10+ Playbook templates
8
יצירת system_prompt
Claude Opus 4.7 (או GPT-5.4 / Grok 4) מקבל: [scraped content מאושר] + [פלייבוק template] + [אישיות] → מחזיר system_prompt מוכן בעברית, בלי RAG, הכל דחוס פנימה (5-15K tokens).
Claude Opus 4.7 · 1 LLM call
9
תצוגה מקדימה: "דבר עם הסוכן עכשיו"
WebRTC live → הלקוח מדבר עם הסוכן בדפדפן לפני שמשלם. אם מרוצה → ממשיך. אם לא → חוזר לעריכת ה-prompt.
voice-agent-grok backend · /ws/test
10
תשלום ב-Tranzila
בחירת חבילה → iFrame של Tranzila → אישור → webhook חזרה → token לחיוב חוזר נשמר.
Tranzila iFrame · recurring billing
11
הקצאת מספר טלפון
Twilio API → קונה מספר ישראלי חדש (או מעביר קיים דרך SIP trunk). מקצה ל-tenant. מגדיר webhook לזכר ה-backend.
Twilio Phone Number purchase API
12
הסוכן חי
מעבירים ללקוח לדשבורד: "הסוכן שלך פעיל ב-03-XXX-XXXX. נסה להתקשר עכשיו." סך הכל: ~15 דקות.
Tenant active · webhook bound
הנקודה הקריטית: ה-cascade של הסקרייפ + LLM extract/compose + Human-in-the-loop יוצרים אונבורדינג חלק — מאחורי הקלעים זה רק 3 שלבים מובנים. אין RAG, אין vector DB. הכל פלין.

5. Scrape Cascade — איך סורקים URL

הקסקדה מטפלת ב-3 רמות של "קושי" באתרים. כל שלב מנסה — אם נכשל (timeout / block / חסר תוכן) → עובר לבא בתור.

SHALLOW
Firecrawl
המהיר ביותר. עובד מצוין לרוב אתרי SMB ישראלי. JS rendering מובנה. מחיר נמוך לקריאה.
STEALTH
CloakBrowser
אנטי-זיהוי ברמת C++ patches. כשאתרים מחזירים 403 לבוט הראשון (g-s-law, אתרי B2B עם Cloudflare).
FALLBACK
Playwright local
Chromium מקומי, מלא בשליטה. כאשר השניים הראשונים נכשלו או דורשים login/cookies.

4.1 לוגיקת ה-cascade (פסאודו)

async def scrape_with_cascade(url, max_pages=15):
    # Stage 1: Firecrawl (fast, hosted, ~$0.001/page)
    try:
        result = await firecrawl.crawl(url, limit=max_pages, formats=["markdown","html"])
        if validate(result, min_chars=500):
            return {"source": "firecrawl", "pages": result}
    except Exception: pass

    # Stage 2: CloakBrowser (anti-bot, local)
    try:
        pages = await cloakbrowser_crawl(url, max_pages)
        if validate(pages, min_chars=500):
            return {"source": "cloakbrowser", "pages": pages}
    except Exception: pass

    # Stage 3: Playwright (last resort)
    pages = await playwright_crawl(url, max_pages)
    return {"source": "playwright", "pages": pages}

4.2 בחירת הדפים החשובים (לא "כל האתר")

10-15 דפים זה התקרה. לוגיקת priority:

  1. Always: /, /about, /contact
  2. Pricing/Services: /pricing, /services, /products
  3. FAQ: /faq, /help
  4. Footer links שאינם משפטיים
  5. Top items בתפריט ראשי
  6. דיסקרימינטור: מקסימום 15 דפים, מעדיפים דפים עם >500 chars טקסט

מה לא סורקים: /privacy, /terms, /accessibility, blog posts (אלא אם כן יש <10 דפים בסה"כ).

4.3 מקור חלופי: PDF / Word / Text

סוגטיפול
PDFPyMuPDF / pdfplumber → טקסט גולמי → אותו pipeline כמו scraped pages
DOCXpython-docx → טקסט
Plain textהלקוח מדביק ל-textarea — מדלגים על Stages 1-3

4.4 ולידציה

  • אם פחות מ-500 תווים סה"כ — שגיאה ידידותית: "לא הצלחנו לקרוא את האתר. אפשר להעלות מסמך?"
  • אם זוהתה שפה זרה לא נתמכת — אזהרה: "האתר באנגלית — הסוכן יוצב לאנגלית. רוצה לעבור לעברית?"
  • אם זוהה שהאתר ב-Hebrew אבל מערפל RTL/encoding — UTF-8 normalization בכפיה

4.5 עלויות משוערות

שלבעלות לסריקה (15 דפים)
Firecrawl~$0.015
CloakBrowserאפסי (local)
Playwrightאפסי (local)
LLM extraction call~$0.03
LLM compose call~$0.03
סה"כ לסקרייפ אחד~$0.02 = 7 אגורות

בעלות אונבורדינג של פחות מ-7 אגורות לסקרייפ ובחירה של $0 חבילת trial, ROI הצדדי מוצדק בקלות.

6. Prompt Generator — איך מייצרים system_prompt (ללא RAG)

הבחירה האסטרטגית: אין RAG. אין vector DB. אין chunking. הכל נדחס ל-system_prompt אחד שעובר ל-Grok בכל שיחה. עסק SOHO/SMB ממוצע מחזיק 3-15K טוקנים — נכנס בקלות.

5.1 בחירת המודלים — מאי 2026

שלבמודללמה
חילוץ JSON מ-markdown Claude Opus 4.7 / GPT-5.4 / Grok 4 structured output, עברית מצוינת, JSON mode
חיבור system_prompt סופי Claude Opus 4.7 / GPT-5.4 / Grok 4 איכות מקסימלית — ה-prompt משמש בכל שיחה
קריאת PDF/Word Claude Opus 4.7 (vision) / GPT-5.4 (vision) vision-capable, הופך מסמך ישירות ל-markdown — אותו model handles everything
אין Gemini באפיון. כל ה-pipeline משתמש באותה משפחת מודלים (Claude Opus 4.7 כברירת מחדל, GPT-5.4 או Grok 4 כ-fallback). זה גם פשוט וגם איכותי — אותו model עושה גם vision (PDF) וגם text (extraction + compose).

5.2 התהליך המלא

1
איסוף חומר גלם
מ-URL: 10-15 דפי markdown מה-cascade (טאב 5).
מ-PDF/Word: Claude Opus 4.7 (vision) → markdown נקי.
מטקסט: השארה כפי שהוא.
2
חילוץ JSON מובנה (LLM call #1)
קלט: כל ה-markdown
פלט: { business_name, description, services[], hours, contact, faqs[], pricing? }
structured output mode כדי שלא יחזיר טקסט חופשי.
3
הצגה ללקוח לאישור (Human-in-the-loop)
מציגים טופס עם השדות המחולצים — לא את ה-system_prompt הגולמי (מאיים). הלקוח עורך/מתקן/מאשר. זה ה-trust gateway החשוב ביותר באונבורדינג.
4
חיבור system_prompt סופי (LLM call #2)
קלט: JSON המאושר + Playbook template (לפי המוצר: messaging/secretary/sales) + persona settings (שם, קול, טון, שפה).
פלט: system_prompt טקסט מוכן ב-עברית/אנגלית/ערבית/רוסית (לפי בחירה).
5
שמירה + הקצאת מספר Twilio
שמירה ב-Postgres. קריאה ל-Twilio API: POST /IncomingPhoneNumbers עם VoiceUrl שמצביע על endpoint שלנו עם tenant_id.

5.3 מבנה ה-system_prompt שיווצר

[PERSONA]
שמך {agent_name}. אתה {role} של {business_name}.
אתה מדבר {language} בטון {tone}. אנושי, סבלני, קצר בתשובות.

[BUSINESS CONTEXT]
{business_name} הוא {one_line_description}.
- כתובת: {address}
- שעות פעילות: {hours}
- טלפון נציג אנושי לחירום: {fallback_phone}

[SERVICES / PRODUCTS]
{extracted_services_bullets}

[FAQ]
{extracted_faqs}

[PLAYBOOK: messaging|secretary|sales]
{playbook_template_content}

[GUARDRAILS]
- אל תמציא מחירים שלא מצוינים → "אני אתאם נציג שיחזור אליך".
- אל תיתן ייעוץ משפטי/רפואי בשם העסק.
- אם לא ברור — escalate_to_human().

[TOOLS] (משתנים פר-מוצר)
messaging: take_message, send_sms_summary
secretary: book_appointment, send_sms, escalate, take_message
sales:     send_sms, escalate, send_brochure

[CLOSING]
תמיד סיים בסיכום ברור.

5.4 עלות אונבורדינג פר-לקוח (אומדן)

שלבעלות משוערת
Scrape cascade (15 עמודים)~$0.015
Opus 4.7 extraction call~$0.03
Opus 4.7 compose call~$0.03
PDF vision (אם יש)~$0.01 לעמוד
סה"כ~$0.08-0.15 (30-55 אגורות)

עלות חד פעמית פר onboarding. זניחה.

7. Voice Stack — Pipecat + xAI Grok (קיים)

טוב לדעת: ה-stack הזה כבר עובד ב-voice-agent-grok שלך. עבור ל-Voice Center אנחנו לא בונים מחדש את ה-pipeline הקולי — אנחנו עוטפים אותו ב-multi-tenancy.

Option A (primary) — xAI Grok Voice

grok-voice-think-fast-1.0 — עברית נבדקה ואומתה. realtime API יחיד שמטפל ב-STT+LLM+TTS.

Option B (fallback) — OpenAI Realtime

במקרים שבהם Grok חורק (לדוגמה: דובר עם מבטא חזק, עברית טכנית של מקצוע מסוים, או downtime של xAI) — אותה ארכיטקטורת Pipecat תומכת ב-swap ל-gpt-realtime של OpenAI. זה גם מה שהוכחנו ש-AgenTeam משתמשים בו.

ה-config של ה-tenant יכיל שדה realtime_provider: "xai" | "openai" ואפשר לשנות בלי downtime.

6.1 איך זה עובד היום (voice-agent-grok)

+97233822272 (Twilio number) │ ▼ Twilio PSTN gateway │ ▼ HTTP webhook POST /twilio/incoming/xai/{voice} │ ▼ TwiML <Stream> → wss://... Pipecat WebSocket server (FastAPI) │ ▼ bidirectional audio xAI Grok Voice realtime API (grok-voice-think-fast-1.0) │ STT + LLM + TTS (Hebrew - Ara/Eve/Sal/Leo/Rex)

6.2 מה צריך להוסיף כדי שזה יעבוד multi-tenant

  1. Tenant resolver בכל webhook — לזהות איזה tenant לפי המספר שמתקשרים אליו.
  2. Per-tenant config loader — system_prompt + voice + tools + business_hours מ-DB.
  3. Tool registry — כל tenant יכול להפעיל/לבטל כלים (book_appointment, send_sms, ...).
  4. Call recording ל-S3/R2 פר tenant (עם הסכמה ברורה לחוק הפרטיות).
  5. Transcript pipeline — אחרי שיחה: שמירה ב-DB + webhook ל-CRM של הלקוח.

6.3 קולות זמינים (כבר נבדקו)

קולמגדרהערה
Araנשיחם, ידידותי — ברירת מחדל מומלצת למזכירה
Eveנשינמרץ — מתאים למכירות
Leoנשי (לפי בדיקה)שונה מהתיעוד הרשמי של xAI
Salזכרפורמלי
Rexזכראנרגטי

* HD mode זמין דרך preset xai_realtime_hd ב-output_rate=48kHz.

6.4 עברית — מה צריך לדעת

  • ה-system prompt צריך הנחיה להעריך כוונה ולא לבקש לחזור כדי לפצות על שגיאות STT.
  • הקובץ app/prompts.py ב-voice-agent-grok כבר מכיל את ה-Hebrew appendix המתאים.

6.5 התאמות נדרשות ל-voice-agent-grok

app/
├── agent.py                 # ←  הוסף tenant_id param
├── main.py                  # ←  webhook resolves tenant from number
├── prompts.py               # ←  load from DB instead of hardcoded
├── voices.py                # ←  unchanged
├── config.py                # ←  add TenantConfig dataclass
├── tenants/                 # ←  NEW
│   ├── resolver.py          # phone → tenant_id
│   └── config_loader.py     # DB query
├── tools/                   # ←  NEW
│   ├── book_appointment.py
│   ├── send_sms.py
│   └── escalate.py
├── call_logger.py           # ←  add S3 upload per-tenant
└── rag/                     # ←  REMOVE / disable (no RAG)

8. ארכיטקטורה כוללת

┌─────────────────────────────────────────────────────────────────────┐ │ USER LAYER │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ Marketing │ │ Tenant │ │ End Customer │ │ │ │ Website │ │ Dashboard │ │ Phone Calls │ │ │ │ (Next.js) │ │ (React/Vite)│ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │ └──────────┼──────────────────┼──────────────────────┼────────────────┘ │ Tranzila │ REST API │ PSTN │ iFrame │ + WebSocket │ in/out ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ VOICE CENTER BACKEND │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ ONBOARDING SERVICE (FastAPI) │ │ │ │ /onboarding/scrape → cascade scraper │ │ │ │ /onboarding/extract → LLM extract (Claude/GPT/Grok) │ │ │ │ /onboarding/compose → LLM compose prompt │ │ │ │ /onboarding/provision → Twilio buy number + bind │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ VOICE AGENT SERVICE (Pipecat + xAI Grok) │ │ │ │ /twilio/incoming/{tenant_id} → live call │ │ │ │ /ws/test/{tenant_id} → browser WebRTC demo │ │ │ │ /api/agents, /api/calls, ... → CRUD │ │ │ │ ← reuses voice-agent-grok with multi-tenant wrapper │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ MESSAGING SERVICE │ │ │ │ /sms/send, /sms/incoming → Twilio Messaging │ │ │ │ /whatsapp/send → Twilio WhatsApp │ │ │ │ /scheduler → cron for reminders, retries │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ BILLING SERVICE │ │ │ │ /billing/checkout → Tranzila iFrame init │ │ │ │ /billing/webhook → Tranzila notify URL │ │ │ │ /billing/charge → recurring monthly cron │ │ │ │ /billing/invoice → Green Invoice integration │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ BACKGROUND WORKERS (BullMQ / Celery) │ │ │ │ - Scrape jobs - CRM sync - Call transcripts │ │ │ │ - Reminders (cron) - Outbound campaigns │ │ │ └──────────────────────────────────────────────────────────────┘ │ └──────────┬──────────────────┬───────────────────┬───────────────────┘ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ PostgreSQL │ │ Redis │ │ S3 / R2 │ │ (entities, │ │ (cache, │ │ (audio, │ │ tenants) │ │ queue) │ │ transcripts, │ │ │ │ │ │ PDFs) │ └──────────────┘ └──────────────┘ └──────────────────┘ ┌─────────────────────────────────────────────────────────────────────┐ │ EXTERNAL SERVICES │ │ │ │ ┌────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐ ┌──────┐ ┌──────┐ │ │ │ Twilio │ │xAI Grok │ │Claude/ │ │ Firecrawl│ │Cloak │ │Tran- │ │ │ │ Voice │ │ Voice │ │ Flash │ │ API │ │Brows │ │zila │ │ │ │ +SMS+WA│ │ realtime│ │ extract│ │ scrape │ │ er │ │bill. │ │ │ └────────┘ └──────────┘ └────────┘ └──────────┘ └──────┘ └──────┘ │ │ │ │ ┌────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │ │ Google │ │ HubSpot/ │ │ Green Invoice / │ │ │ │ Calendar │ │ monday.com │ │ iCount │ │ │ │ (OAuth) │ │ (webhooks) │ │ (חשבוניות) │ │ │ └────────────┘ └─────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘

7.1 פירוט שירותים

Onboarding Service

FastAPI server נפרד שמטפל רק ב-flow של הצטרפות. רץ ב-Railway/Fly. מתקשר ל:

  • Firecrawl API (חיצוני)
  • CloakBrowser (binary מקומי)
  • Playwright (binary מקומי)
  • Anthropic / OpenAI / xAI API
  • DB (לאחסון התוצאות)

Voice Agent Service

זהו voice-agent-grok הקיים + multi-tenancy. רץ באותו cluster.

  • Pipecat orchestration
  • xAI Grok realtime client
  • Twilio webhooks
  • WebSocket לדפדפן (test)

7.2 hosting מומלץ

שכבהמקוםלמה
Marketing site (Next.js)VercelSSG/ISR, CDN, יומן הקצאות גמיש
Tenant Dashboard (React/Vite)Cloudflare Pagesזול, מהיר, אין vendor lock-in
Voice/Onboarding servicesFly.io או Railwayקרוב גיאוגרפית ל-Twilio EU. תמיכה ב-WebSocket persistent.
PostgreSQLNeon / SupabaseServerless Postgres. RLS multi-tenant מובנה.
RedisUpstashServerless. Pay-per-request.
FilesCloudflare R2אין egress fees — חשוב לקבצי אודיו.

9. מודל נתונים

Tenant
├── id, name, business_name, created_at
├── owner_user_id
├── subscription (plan, status, tranzila_token, next_charge_at)
├── usage_meters (minutes_used, sms_sent, current_month)
└── settings (timezone, language, business_hours_json)

User (גישה למחשב, יכול לנהל את ה-Tenant)
├── id, tenant_id, email, name, role (owner|admin|viewer)
└── auth (google_oauth | email_pw, password_hash)

Source (חומר גלם להפקת ה-prompt)
├── id, tenant_id, type (url|pdf|docx|text), url_or_filename
├── scrape_status, scrape_method (firecrawl|cloakbrowser|playwright)
├── raw_markdown[]   ← 15 דפים שנשמרו ב-R2
└── extracted_json   ← {business_name, services[], hours, ...}

Agent
├── id, tenant_id, name, persona_id, playbook_id (secretary|messaging|sales)
├── system_prompt (text - generated)
├── voice (Ara|Eve|Sal|Leo|Rex)
├── language (he|en)
├── voice_speed (0.5-1.5)
├── tools_enabled[] (book_appointment, send_sms, escalate, ...)
├── business_hours_json
└── source_id  ← reference to Source

PhoneNumber
├── id, tenant_id, twilio_sid, phone_e164
├── linked_agent_id, country, monthly_cost
└── status (active|suspended)

Contact (CRM-like - האנשים שמתקשרים אליך)
├── id, tenant_id, phone_e164, name, email, tags[]
└── first_seen_at, last_seen_at

Conversation (thread יחיד לאיש קשר, חוצה ערוצים)
├── id, tenant_id, contact_id, agent_id
├── started_at, last_activity_at, status
└── summary (auto-generated after each event)

Call
├── id, conversation_id, twilio_call_sid
├── direction (inbound|outbound), duration_sec
├── recording_url     ← Supabase Storage (mp3/wav)
├── transcript_url    ← Supabase Storage (JSON timestamped)
├── transcript_text   ← short flat text for search/index
├── outcome (appointment_booked|escalated|hung_up|...)
├── extracted_fields_json (name, intent, contact info from call)
└── tools_used[] (which functions the agent called)

Message (SMS / WhatsApp)
├── id, conversation_id, channel (sms|whatsapp)
├── direction, body, sent_at, delivered_at, status
└── twilio_message_sid

Event (פגישה / משימה / תזכורת)
├── id, conversation_id, contact_id
├── type (appointment|callback|reminder)
├── scheduled_at, status, calendar_event_id (Google)
└── created_by_call_id

Campaign (outbound — קמפיין שיחות יוצאות)
├── id, tenant_id, name, agent_id
├── target_contacts[] (CSV upload)
├── schedule (cron expression), status
└── stats (calls_made, connected, converted)

Integration
├── id, tenant_id, type (hubspot|monday|salesforce|generic_webhook)
├── credentials_encrypted, webhook_url
└── events_subscribed[] (call_ended|appointment_booked|...)

ApiKey
├── id, tenant_id, name, key_hash (prefix only stored)
├── created_at, last_used_at, revoked_at
└── scopes[]

8.1 הקלטות, תמלולים, ודשבורד

כל שיחה נשמרת מלאה: אודיו (mp3/wav) + תמלול עם timestamps (JSON). הקלטות יוצאות אוטומטית מ-Pipecat ל-Supabase Storage בסיום שיחה. Bucket פר-tenant (RLS).

בדשבורד הלקוח:

  • רשימת כל השיחות (תאריך, משך, מתקשר, outcome) — מסוננת לפי tenant_id דרך RLS
  • כל שורה ניתנת לפתיחה: נגן אודיו + תמלול גלילה + פעולות שבוצעו (function calls) + הודעות SMS/WA הקשורות
  • חיפוש טקסטואלי על transcript_text
  • סינון לפי outcome, agent, תאריך, מספר
  • הורדה: mp3 + תמלול PDF (כפתור)

חוק: בתחילת שיחה הסוכן יודיע "שיחה זו עשויה להיות מוקלטת" (חוק הגנת הפרטיות התשמ"א).

8.2 הבדל קונספטואלי מ-AgenTeam

AgenTeamVoice Center
מרכז המודלAgent → Lead → CallsContact → Conversation (multi-channel)
Multi-channelאין thread אחדConversation מכיל Calls + Messages + Events
Sourceאין — system_prompt ידניSource נשמר → ניתן לרענן את ה-prompt
Playbookאיןplaybook_id מצרף לתבנית

10. Tranzila — תשלום ומסחר (דרך API, לא iFrame)

Tranzila היא ספק הסליקה הישראלי המוביל ל-SMB. תומך באשראי, ביט, Apple Pay, הוראת קבע, ובעיקר — סליקה חוזרת (recurring billing) עם TOKEF — קריטית למודל SaaS חודשי.

אנחנו עובדים מול ה-API שלהם ישירות, לא דרך iFrame. כלומר הטופס הוויזואלי נבנה אצלנו (עיצוב משלנו, חוויה משלנו), והנתונים נשלחים ל-Tranzila ב-API call ישיר. זה מה שעבד אצלנו בעבר ויעבוד שוב.

10.1 זרימת רכישה (API-first)

1
לקוח מסיים onboarding → דף תשלום מעוצב משלנו
UI מותאם לעיצוב של Voice Center, לא iFrame של Tranzila.
2
הלקוח מזין פרטי אשראי בטופס שלנו
בצד הלקוח: מספר כרטיס, תוקף, CVV, ת.ז.. חשוב: ה-frontend שולח ישירות ל-Tranzila מ-JS — לא עובר דרך הבקאנד שלנו (PCI compliance).
Frontend → Tranzila /tranzila/api/v1/transaction
3
Tranzila מבצעת חיוב + מחזירה TOKEF
חיוב ראשון של החודש הראשון + יצירת טוקן מאובטח (TOKEF) לחיוב חוזר. הטוקן הוא המפתח שלנו לחיוב את אותו כרטיס בעתיד בלי לראות שוב את מספר הכרטיס.
4
Frontend מעביר את ה-TOKEF + transaction_id לבקאנד שלנו
Backend שומר ב-DB: tenant.subscription.tranzila_tokef + transaction_id ראשון.
POST /api/billing/confirm
5
הפעלת Tenant אוטומטית
Tenant.status = active, next_charge_at = +30 days, הקצאת מספר Twilio (טאב 4), הפניה לדשבורד.

10.2 ניהול מנויים — Tranzila לבד מספיק לחלוטין

שיקול חשוב: Tranzila כן מנהלת מנויים — דרך מודל ה-TOKEF + הוראת קבע (HK). זה לא Stripe Subscriptions, אבל זה עובד מצוין ל-SMB ישראלי. עשינו את זה לבד בעבר בהצלחה.

הדרך:

  • TOKEF — טוקן ייחודי לכל לקוח. שומרים ב-DB. כל קריאה ל-API של Tranzila עם הטוקן הזה = חיוב הכרטיס המקורי בלי לראות פרטים.
  • Cron חודשי שלנו → שולף את כל ה-tenants הפעילים → קריאה ל-Tranzila API לכל אחד.
  • Logic של retry, suspend, dunning — אצלנו ב-DB. שורות פשוטות בקוד.

אין סיבה להוסיף עוד שכבה (כמו Clerk Billing או Stripe) בשביל ניהול מנויים בסיסי. Tranzila מספיקה לבד.

10.3 חיוב חוזר חודשי

Cron daily @ 02:00 UTC
  ├─ SELECT tenants WHERE next_charge_at <= NOW() AND status = active
  ├─ FOR EACH tenant:
  │    ├─ POST Tranzila API with TOKEF + plan_price
  │    ├─ IF success → next_charge_at += 30 days, reset usage_meters
  │    └─ IF fail   → status = past_due, send email, retry @ +1, +3, +7 days
  └─ IF still failing after 7 days → suspend tenant (disable Twilio webhook)

10.4 חיוב Overage (תוספת דקות / הודעות)

בסוף החודש, אם הלקוח חרג ממכסת הדקות או הודעות:

חשבונית דיגיטלית — לא דרך Tranzila. מבוצע דרך Finbot (אינטגרציה נפרדת, מחוץ ל-scope של הטאב הזה).

10.5 אז מה לגבי Clerk?

Clerk הוא שירות auth+users מעולה. אנחנו יכולים להשתמש בו ל-auth (התחברות, הרשמה, Google OAuth, ניהול sessions, MFA) — וזה יחסוך לנו לבנות את כל מערכת ההזדהות מאפס.

אבל Clerk Billing מתבסס על Stripe, לא על Tranzila. אז:

  • ✅ Clerk ל-auth + ניהול משתמשים (אופציה רצינית)
  • ❌ Clerk Billing — לא רלוונטי, אנחנו עם Tranzila
  • ✅ Tranzila ל-תשלום + מנויים ישירות מול ה-API שלהם

שתי השכבות נפרדות וזה תקין: Clerk.userId → ה-Tenant אצלנו ב-DB → tenant.tranzila_tokef. אפשר גם בלי Clerk (לבנות auth לבד) — תלוי אם רוצים לחסוך 2-3 שבועות פיתוח של auth flows.

החלטה נדחית: בודקים את ה-pricing של Clerk לפי הצורך. ל-MVP אפשר אוף ה-shelf JWT auth.

10.6 PaymentProvider abstraction (לעתיד)

אם בעתיד נרצה Stripe ללקוחות בינלאומיים — נעצב מ-day 1 שכבת PaymentProvider מופשטת:

interface PaymentProvider {
  charge(token, amount): { success, transaction_id }
  createToken(card_data): { token }
  refund(transaction_id, amount?): { success }
}

class TranzilaProvider implements PaymentProvider { ... }
class StripeProvider implements PaymentProvider { ... }  // future

11. מבנה האתר השיווקי

10.1 דפי ליבה

Routeתפקידהערה
/דף הביתHero + Lost Revenue Calculator + 3 מוצרים
/secretaryמזכירה דיגיטליתדף נחיתה ייעודי
/messagingשירות הודעות חכםדף נחיתה ייעודי
/sales-agentסוכן מכירות AIדף נחיתה ייעודי
/try"דבר עם הסוכן עכשיו"WebRTC live demo, ללא הרשמה
/playbooksספריית פלייבוקים10+ תעשיות עם הקלטות
/playbooks/[industry]פלייבוק בודדעם דוגמאות שיחה + מחיר חבילה
/pricingתמחורTranzila checkout מובנה
/case-studiesמקרים אמיתייםעם מספרים: ROI, calls handled, conversions
/integrationsאינטגרציותHubSpot, monday, Google Calendar, ...
/apiתיעוד API+ MCP server + AI Context Pack
/blogתוכן SEOחסר אצל המתחרים
/about, /contactסטנדרט
/login, /signupאימותGoogle OAuth + Email/Password
/privacy, /termsמשפטיחובה

10.2 דשבורד הלקוח

Routeתפקיד
/dashboardKPIs: שיחות החודש, המרות, צריכת דקות, פגישות שנקבעו
/dashboard/onboardingWizard 12 שלבי URL→Agent (טאב 3)
/dashboard/agentsרשימת הסוכנים
/dashboard/agents/[id]עריכת agent — system_prompt + voice + tools
/dashboard/agents/[id]/testWebRTC live test לדפדפן
/dashboard/agents/[id]/refresh"רענן מהאתר" — סקרייפ מחדש
/dashboard/conversationsהיסטוריית שיחות חוצת-ערוצים
/dashboard/conversations/[id]שיחה בודדת: תמלול, audio player, פעולות שבוצעו
/dashboard/contactsCRM פנימי
/dashboard/campaignsקמפיינים יוצאים
/dashboard/integrationsחיבור CRM/Calendar/Webhooks
/dashboard/billingחבילה, חשבוניות, צריכה
/dashboard/api-keysניהול מפתחות API
/dashboard/settingsפרופיל, צוות, אבטחה

10.3 דף בית — סקציות מומלצות

  1. Hero — H1 ("השלוחה הדיגיטלית שלא תפסיק לעבוד") + Lost Revenue Calculator interactive
  2. 3 מוצרים — מזכירה / הודעות / מכירות
  3. "דבר עם הסוכן עכשיו" — WebRTC button → demo session
  4. How it works (URL→Agent) — אנימציה 4 שלבים
  5. פלייבוקים לפי תעשייה — 6 כרטיסים גדולים עם דוגמאות
  6. Social proof — לוגואים + ציטוטים + 3 הקלטות אמיתיות
  7. Pricing teaser — 3 חבילות + Trial
  8. FAQ — 10+ שאלות, לא 3 כמו AgenTeam
  9. CTA סופי — "התחל ב-15 דקות"

12. אסטרטגיית תמחור

חבילהמחיר חודשידקותSMS/WAמספריםסוכניםלקהל
Trial ₪0 (7 ימים) 30 50 מספר זמני 1 טעימה
Starter ₪249 120 200 1 1 עסק בודד
Business פופולרי ₪549 400 800 1 3 מספר תפקידים
Scale ₪1,290 1,200 3,000 3 10 SME עם מספר ענפים

* כל החבילות ממוקדות SOHO / SMB / SME. אין יעד-לקוח Enterprise בשלב הזה.

11.1 ההיגיון מול AgenTeam

חבילהAgenTeamVoice Centerהיתרון
Entry₪200 / 60min₪249 / 120min + 200 SMSפי-2 דקות + הודעות
Mid₪450 / 180min₪549 / 400min + 800 SMS + 3 agentsפי-2 דקות + הודעות + multi-agent
Top₪700 / 300min₪1,290 / 1,200min + 3,000 SMSחבילה גדולה ל-SME שלהם אין

11.2 חיוב Overage

11.3 הנחות

11.4 עלויות תשתית פר לקוח (אומדן גס + מה זה עולה ללקוח)

פריט עלות לנו מה זה ללקוח (בחבילת Business)
Twilio number ~$1/חודש כלול במחיר החבילה
Twilio minutes ~$0.01/דקה 400 דקות כלולות; מעבר → ~₪0.50/דקה ללקוח
xAI Grok Voice ~$0.05/דקה כלול (חלק מהשירות)
SMS / WhatsApp ~$0.04/הודעה 800 הודעות כלולות; מעבר → ~₪0.15/הודעה ללקוח
Hosting + DB pro-rata זניח כלול
Tranzila עמלות סליקה ~1.5-2.5% מכל חיוב מוטמע במחיר החבילה
סה"כ עלות תשתית ~$30-40 ללקוח/חודש חבילה ב-₪549

* האומדנים צריכים אימות מול מחירונים עדכניים. תשואה גולמית סבירה אחרי עלויות תשתית — לפני שיווק, פיתוח, ותמיכה.

13. מסלול בנייה — לפי 3 רולים במקביל

הבנייה מתחלקת ל-3 מסלולים מקבילים. Track A (בקאנד+תשלום) נבנה ע"י איש אחד. Track B (סוכן קולי) ע"י 1-2 אנשים. Track C (UI/UX) ע"י איש אחד. הם נפגשים בחוזי API מוסכמים. כל track יש לו Phase 1/2/3 משלו.

חוזי API משותפים (כל הצוותים מסכימים מראש)

  • Database schema — מוגדר ב-OpenAPI/SQL לפני שמתחילים. מצורף ב-טאב 8.
  • Auth tokens — JWT עם tenant_id + user_id. אותו פורמט בכל מקום.
  • Webhooks ל-CRM — JSON envelope קבוע: {event, tenant_id, timestamp, payload}
  • Tenant config endpointGET /api/internal/tenants/:id/agent-config מחזיר את כל מה שצריך לטעון סוכן (system_prompt, voice, tools).

🅰️ Track A — Backend + Payments + Onboarding (איש אחד)

Phase A1 — Core Backend

  • Database schema (Postgres + Supabase)
  • Auth: Email/Password + Google OAuth
  • Tenant model + JWT
  • Tranzila integration: iFrame checkout + webhook + טוקן ל-recurring
  • Cron חודשי לחיוב חוזר

Phase A2 — Onboarding Service

  • Scrape cascade: Firecrawl → CloakBrowser → Playwright
  • PDF/Word ingestion: Claude Opus 4.7 vision → markdown
  • LLM extraction (Sonnet 4.6) → JSON
  • LLM compose (Opus 4.7) → system_prompt
  • Twilio API: subaccount create, number search, number purchase, webhook bind

Phase A3 — Public API + Integrations

  • API מתועד (כמו AgenTeam) + AI Context Pack
  • Webhooks ל-CRMs (HubSpot, monday)
  • חשבוניות (Green Invoice/iCount)
  • Overage billing (חישוב + חיוב נוסף בסוף חודש)

🅱️ Track B — Voice Agent (1-2 אנשים)

Phase B1 — Multi-Tenant Wrap

  • הרחבה של voice-agent-grok הקיים
  • Resolver: tenant_id ← phone number (ממופה דרך Twilio webhook)
  • Config loader: שולף system_prompt + voice + tools מ-DB
  • RAG הסרה (לא צריך)
  • שמירת תמלול + audio ל-Supabase Storage

Phase B2 — Tools + Playbooks

  • Tool: take_message (למוצר Messaging — לוקח פרטים, שולח SMS/אימייל לבעלים)
  • Tool: book_appointment (Google Calendar)
  • Tool: send_sms (Twilio Messaging)
  • Tool: escalate_to_human (מעביר למספר הנציג)
  • Tool: end_call
  • תמיכה רב-לשונית: he / en / ar / ru (מה ש-Grok תומך)

Phase B3 — Outbound + Scheduler

  • Outbound caller (Twilio outbound + Pipecat)
  • Cron scheduler: תזכורות 24h/1h, retries לשיחות שלא נענו
  • Cascade קוסט-ערוצים: לא ענה לקול → SMS → WhatsApp
  • Call analytics: outcome detection, duration stats

🅲 Track C — UI/UX (איש אחד)

Phase C1 — Marketing Site

  • Next.js: Home + 4 דפי מוצר + Pricing + Contact + Legal
  • "מחשבון פניות אבודות" אינטראקטיבי ב-Hero
  • SEO + JSON-LD + sitemap
  • RTL מלא + responsive

Phase C2 — Onboarding Wizard

  • Wizard מודרך (URL/PDF/Word → אישור → choose playbook → choose voice)
  • Loading screen חכם תוך כדי scrape (מה קורה ברקע)
  • Preview של ה-extracted JSON בטופס נערך
  • "דבר עם הסוכן עכשיו" — WebRTC לפני תשלום
  • Tranzila iFrame embed

Phase C3 — Tenant Dashboard

  • רשימת שיחות + תמלול + audio player
  • Contact list (CRM-לייט)
  • הגדרות סוכן (עריכת system_prompt, voice, tools)
  • Billing page (חבילה, חשבוניות, צריכה)
  • Settings (פרופיל, צוות, integrations)

סדר תלויות (מי מחכה למי)

  • C1 (Marketing site) יכול להיבנות מ-day-1 במקביל לכולם — לא תלוי בכלום.
  • B1 (Multi-tenant wrap) דורש את DB schema מ-A1 → תלות קלה.
  • C2 (Wizard) דורש את ה-onboarding endpoints מ-A2 → תלוי ב-A2.
  • C3 (Dashboard) דורש את ה-CRUD מ-A1+A2 ואת ה-call data מ-B1+B2.
  • B3 (Outbound) אחרון — דורש הכל לעבוד תחילה.

14. שאלות פתוחות + החלטות שנסגרו

✅ נסגרו

נושאהחלטה
מודלים ל-prompt generationClaude Opus 4.7 primary, GPT-5.4 / Grok 4 כ-fallback. אין Gemini בכלל.
קריאת PDF/Wordאותם מודלים — Claude Opus 4.7 (vision) או GPT-5.4 (vision). לא Gemini.
Voice realtime primaryxAI Grok Voice (אומת בעברית)
Voice realtime fallbackOpenAI Realtime (אם Grok חורק או downtime)
RAGאין. הכל ב-system_prompt. אם לקוח Enterprise יבקש — בנייה ידנית ע"י המתכנת.
FirecrawlOK להתחיל עם חינמי (500 calls/חודש), משדרגים ב-need basis.
שמירת אודיוSupabase Storage. הודעת "שיחה מוקלטת" בתחילת שיחה (חוק הגנת פרטיות).
Data Residencyלא רלוונטי כרגע — ישראל/EU בעתיד.
White-labelלא עכשיו — פוקוס SOHO/SMB ישירות.
WebRTC demo costעל חשבוננו. rate limiting פר-IP.
שם הסוכןהלקוח בוחר באונבורדינג. ברירת מחדל: "תמיר" / "נועה" / "אלמוג".
Hostingשרת שלנו. החלטה ספציפית (Hetzner/AWS/וכו') — לא רלוונטי לאפיון.
שפותעברית + ערבית + רוסית + אנגלית — לפי מה ש-Grok תומך. עברית primary.

⚠️ שאלות פתוחות רציניות

1. PBX / Multi-line customers (שאלה רצינית)

מה עושים עם לקוח עם 4-12 קווים נכנסים (מרפאה גדולה, סוכנות נדל"ן)? Twilio תומך SIP Trunking אבל זה דורש:

  • או BYOC (Bring Your Own Carrier) — הלקוח מעביר את כל הקווים שלו ל-Twilio (מורכב, כרוך בהעברת מספרים)
  • או SIP Trunk הדדי — חיבור Twilio ל-3CX/Asterisk של הלקוח (דורש קונפיגורציה ידנית)
  • או Forwarding — הלקוח מגדיר העברת שיחה ממרכזיה לקיימת למספר Twilio שלנו (פשוט, אבל מחייב ניתוב לוגי בצד שלנו)

המלצה ל-MVP: תמיכה רק ב-forwarding (פשוט). PBX/SIP יבוא בשלב מאוחר כשנגדיר קהל יעד SME ספציפי.

2. תמחור - האם ₪2 לדקה overage יעבוד?

הלקוח חושש שאף אחד לא ישלם ₪2/דקה. AgenTeam ב-Pro עומדים על ~₪2.33/דקה — אבל הם עוסקים בעיקר במכירה אנושית, לא self-serve. ל-self-serve העיניים של הלקוח על המחיר חדות יותר. צריך:

  • אולי חבילות גדולות יותר במחירים אחידים (1,500₪ ל-700 דקות במקום overage)
  • שקיפות: התראה ב-80% צריכה
  • אופציה לקנות "block" של 500 דקות תוך-חודשי ב-₪900 (₪1.8/דקה — זול יותר מ-overage רגיל)

3. שם מותג + דומיין

"Voice Center" זה codename. צריך לבחור שם שיווקי. אופציות: Sokenet, AgentLine, Voxa, Mishrad, Helper.co.il, Snahala, Voicy. זמינות .co.il / .com / .ai חייבת להיבדק + סימני מסחר.

4. "עורך סוכן ויזואלי" — מה זה אומר?

התכוונתי ל-workflow editor דמוי Make/n8n — drag&drop של בלוקים: "if customer says X → call tool Y → say Z". זה scope גדול. החלופה הפשוטה ל-MVP: טופס פשוט עם רשימת tools פעילים (checkboxes) + textarea אחד ל-custom instructions. שווה לדון אם בכלל נחוץ.

5. WhatsApp Business — תהליך הצטרפות

Twilio WhatsApp דורש אישור Meta (1-7 ימים, ידני) פר-לקוח. זה ייצור חוויה לא חלקה במהלך onboarding. אופציות: (א) להציע WhatsApp כ"upgrade" בנפרד אחרי שהלקוח כבר משלם; (ב) להשתמש ב-shared sender של Twilio (לא ממותג של הלקוח).

15. Latency & Redis — הסבר בגובה העיניים

טאב זה נכתב למי שלא מתכנת — מסביר למה השרת חייב להגיב מהר בשיחה קולית, מה התפקיד של Redis, ומה ההבדל בינה לבין מסד הנתונים הראשי.

למה Latency נמוך זה קריטי בשיחה קולית?

בשיחת טלפון, שתיקה ארוכה היא אסון. אדם שמתקשר מצפה לשמוע תשובה תוך 800ms-1.2 שניות אחרי שסיים לדבר. מעבר ל-2 שניות → תחושת "המערכת לא עובדת", המתקשר חוזר על עצמו, או שואל "הלו?" — והסוכן עונה תוך כדי. תוצאה: שיחה הופכת לבלגן.

בצ׳אט-טקסטואלי אנשים סובלניים יותר — שניה-שתיים של "מקליד..." זה בסדר. בקול, אין מקום לטעויות.

תקציב הזמן של הסוכן (סך הכל ~1 שנייה)

שלבזמן
המתקשר סיים לדבר → STT מעבד~150ms
זיהוי המתקשר + טעינת ההקשר~80ms ← Redis קריטי כאן
LLM חושב ומחזיר תשובה~500ms
TTS מתחיל לדבר (streaming)~150ms
סה"כ עד שהמתקשר שומע~880ms

אם שלב הזיהוי לוקח 200ms במקום 80 — סך הכל מגיע ל-1s+, מורגש. אם הוא לוקח 500ms (DB lookup רגיל בלי cache) — נכנסים לאזור "זה לא עובד".

הסתכלות High-Level על הארכיטקטורה

📞 מתקשר │ ▼ ┌────────────────────────┐ │ Twilio (טלפוניה) │ └───────────┬────────────┘ │ webhook ▼ ┌────────────────────────┐ │ Voice Center Server │ │ │ │ ┌──────────────────┐ │ │ │ שיחה חיה │ │ │ │ (Pipecat+Grok) │ │ │ └────┬─────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────┐ ┌────────────────┐ │ │ Redis │ │ Postgres │ │ │ (פתק) │ │ (ארון תיוק) │ │ │ ~5ms │ │ ~100ms+ │ │ └─────────┘ └────────────────┘ │ ▲ ▲ │ │ │ │ │ load context │ store call when done │ │ each call │ └────────────────────────────────────┘

Redis ו-Postgres — האנלוגיה של המשרד

📦 Postgres — ארון התיוק

כל פרטי הלקוחות, השיחות, ההיסטוריה. מסודר, אמין, נשמר לנצח. אבל לפתוח תיק בארון לוקח זמן — חיפוש, שליפה, פתיחה. כל פעם שצריך משהו, הולכים לארון.

זה ה-DB הראשי שלנו. מתארחים ב-Supabase.

📋 Redis — הפתק על השולחן

ליד היד. תוך פחות משנייה. לא בשביל לשמור לנצח — בשביל "ביד". רושמים עליו את הדברים שצריך כרגע ומיד.

זיכרון בזיכרון (RAM) — מהיר אקסטרים, אבל אם מכבים — נמחק.

תרחיש: מה קורה כשמישהו מתקשר

בלי Redis

  1. אדם מחייג למוסך
  2. השרת רץ לארון התיוק → "מי זה? מה ההיסטוריה?" → 200ms
  3. אדם שומע שתיקה ארוכה עד שהסוכן עונה
  4. תחושת "זה לא עובד טוב"

עם Redis

  1. אדם מחייג למוסך
  2. השרת מסתכל על הפתק → "אה, זה דני, היה כאן שלשום עם הסוברו" → 2ms
  3. הסוכן עונה מיד: "שלום דני, הסוברו עוד מטרידה?"
  4. תחושת קסם

3 השימושים של Redis אצלנו

1. זיכרון מהיר (Cache)

פרטי לקוחות שהתקשרו לאחרונה, שעות פתיחה של עסקים, הגדרות סוכן (system_prompt + voice) — דברים שהשרת משתמש בהם בכל שיחה. במקום ללכת לארון בכל פעם, יש "העתק" על הפתק.

2. רשימת משימות (Queue)

כשבעל עסק לוחץ "סרוק את האתר שלי" — הסקרייפ לא קורה מיד. הוא לוקח 30-60 שניות. השרת לא יכול להחזיק את המסך תקוע — אז הוא רושם על פתק: "צריך לסרוק את XYZ" וממשיך לטפל בלקוח. עובד אחר במשרד (background worker) בודק את הפתקים ועובד עליהם ברקע.

דוגמאות: סקרייפ אתרים, תמלולים אחרי שיחה, סנכרון עם CRM, שליחת תזכורות בעוד 24 שעות.

3. ספירה (Rate Limiting)

"כמה שיחות עשה הלקוח הזה החודש?" — אם נצטרך לספור בכל פעם בארון התיוק, זה לוקח זמן. הפתק מחזיק מונה שמתעדכן תוך שנייה. גם הגנה: אם מישהו מנסה לנצל לרעה את ה-API שלנו — הפתק סופר כמה בקשות בדקה ומפסיק אותו.

איפה מתארחים

אופציהלמי מתאים
Upstash (מומלץ) שירות ענן — נרשמים, מקבלים כתובת + סיסמה, מדביקים בקוד. 5 דקות, חינם להתחלה (10K commands ביום).
Railway Redis אם הכל בלאו הכי על Railway. ~$5/חודש.
שרת שלנו דורש ניהול, גיבויים, מוניטור. לא מומלץ בהתחלה.

האם חיוני מיום-1?

טכנית — לא הכרחי לחלוטין. אפשר להתחיל בלי, המוצר יעבוד.

מעשית — כדאי מאוד מההתחלה:

  • תוך שבועיים, כשיש 50+ שיחות במקביל, אנשים ירגישו ש"זה איטי" — ויעופו
  • BullMQ (לעבודות ברקע — תזכורות, סקרייפ, סנכרון) דורש Redis כתשתית
  • Upstash זה 5 דקות הקמה וחינמי בשלב הראשון — אין סיבה אמיתית לוותר

ההמלצה: Upstash מיום-1, פשוט.

RAG ו-Redis — איך זה משתלב?

RAG ו-Redis הם שני דברים שונים לחלוטין. אבל הם משתלבים יפה. RAG עוזר ל-LLM למצוא מידע רלוונטי. Redis עוזר ל-RAG לרוץ מהר. הם לא מתחרים — הם משלימים.

3 כלים, 3 מטרות שונות

כלימה הוא עושהאנלוגיה
Postgresאחסון מסודר לנצח📦 ארון תיוק
Redisזיכרון מהיר לדברים שצריך עכשיו📋 פתק על השולחן
Vector DBחיפוש "מה דומה לשאלה הזו?" — לב ה-RAG📚 ספרן חכם שמוצא פרק רלוונטי

ה-Vector DB יכול להיות pgvector (תוסף של Postgres — הכי נפוץ ל-MVP), או שירות נפרד כמו Pinecone / Weaviate. Redis היא לא Vector DB (אם כי קיים Redis Stack שמשלב את שניהם).

איך RAG עובד בשיחה אמיתית (בלי Redis)

1. לקוח שואל "כמה עולה ערעור?"
        ↓
2. ה-LLM שולח את השאלה ל-Retriever
        ↓
3. Retriever מחשב embedding לשאלה (~300ms)
        ↓
4. מחפש ב-Vector DB chunks דומים (~100ms)
        ↓
5. מקבל top-5 פרקים רלוונטיים
        ↓
6. שולח ל-LLM: [שאלה + 5 פרקים] → תשובה
        ↓
7. הסוכן עונה

סה"כ ~400ms על שלבי RAG. בלי Redis — בכל שיחה.

4 דרכים לשלב Redis ב-RAG

1. קאש על שאלות חוזרות (הפשוט והאפקטיבי ביותר)

"מה שעות הפתיחה?" — לקוחות שואלים 20 פעם בשבוע. שאלה זהה → Redis מחזיר תשובה מוכנה ב-2ms. חוסך גם embedding, גם חיפוש, גם קריאה ל-LLM.

שמירה: מפתח = hash של השאלה. ערך = התשובה המוכנה. TTL שעה-יום.

2. קאש על embeddings

אותה מילה/ביטוי חוזרים בהרבה שאלות שונות. במקום לחשב embedding מאפס בכל פעם — שולפים מ-Redis.

שמירה: מפתח = hash של הטקסט. ערך = הוקטור (1536 מספרים).

3. קאש על תוצאות retrieval

שאלות דומות אך לא זהות ("כמה עולה ערעור?" / "מה המחיר של ערעור?") → אחרי החיפוש הראשון, שומרים את ה-top-5 chunks. חיפוש semantic זה השלב הכבד אחרי ה-LLM, וקאש כאן משמעותי.

4. Redis בתור Vector DB עצמה (מתקדם)

Redis Stack כולל RediSearch + Vector Similarity Search — אפשר לעשות RAG שלם בתוכה. רלוונטי כשיש אלפי שאילתות בדקה, או כשרוצים hosting אחד פחות. ל-MVP זה מיותר — pgvector מספיק.

הסטאק המומלץ עם הכל ביחד

┌──────────────────────────────────────────────┐
│  שאלה מהמתקשר                                │
│              ↓                                │
│  1. בדוק Redis ── יש תשובה מוכנה? ── יש → החזר│
│              ↓ אין                            │
│  2. embedding ── יש בקאש? ── יש → דלג         │
│              ↓ אין                            │
│  3. pgvector חיפוש → top-5 chunks             │
│              ↓                                │
│  4. שמור תוצאות ב-Redis (TTL שעה)             │
│              ↓                                │
│  5. שלח ל-Grok עם הקונטקסט                    │
│              ↓                                │
│  6. שמור תשובה סופית ב-Redis (TTL 5 דקות)     │
└──────────────────────────────────────────────┘

איזה דפוס מתי?

נפח שיחותהמלצה
פחות מ-10 במקבילpgvector בלבד. אל תקאש כלום. פשוט.
10-100 במקבילpgvector + Redis לקאש שאלות חוזרות (דפוס #1 בלבד)
100+ במקבילכל 4 הדפוסים. אולי גם לעבור ל-Redis Stack כ-Vector DB
ל-Voice Center: ב-MVP אין RAG בכלל (system_prompt דחוס מכיל הכל). כשנוסיף RAG בעתיד ללקוחות גדולים — נתחיל מ-pgvector + דפוס #1 (קאש שאלות חוזרות), ונתקדם מעלה רק אם הנפח דורש.

למה לא Cloudflare KV?

שאלה לגיטימית — Cloudflare KV הוא ה-key-value store של Cloudflare. אבל הוא לא תחליף ל-Redis. הסיבות:

ממדCloudflare KVRedis (Upstash/Railway)
Latency קריאה10-50ms1-5ms
עקביותEventually consistent (~60s propagation)Strong (מיידי)
Atomic INCR (לספירה)
Queue / BullMQ
Pub/Sub
TTL
חינמי100K reads/יום500K commands/חודש (Upstash)

4 סיבות שזה לא יעבוד

  1. Latency גבוה מדי — 10-50ms פר קריאה זה לא מתאים לשיחה קולית (חייבים מתחת ל-10ms)
  2. BullMQ דורש Redis אמיתי — ה-Queue layer של עבודות ברקע (סקרייפ, תזכורות, סנכרון) לא יעבוד על KV. נצטרך לכתוב queue משלנו = חודש עבודה.
  3. Rate Limiting נשבר — בלי INCR אטומי, שני workers יכולים לקרוא+לכתוב במקביל ולסטות מהמספר הנכון.
  4. הסרבר רץ ב-Railway/Fly, לא ב-CF Workers — היתרון של KV הוא קרבה ל-Workers. אם השרת שלנו לא ב-CF — אנחנו מאבדים את היתרון.

מתי כן Cloudflare KV?

  • Feature flags גלובליים
  • Config סטטי שמשתנה לעיתים רחוקות
  • Session tokens (אם השרת רץ ב-CF Workers — שזה לא המקרה שלנו)

אם בעתיד נשכתב הכל ל-Cloudflare Workers + Durable Objects, יש שיחה אחרת. ל-MVP — לא רלוונטי.

Upstash vs Railway — איפה לארח את Redis?

שני האפשרויות העיקריות. שניהם טובים. הנה ההשוואה אחרי בדיקה מעודכנת (מאי 2026):

Upstash Redis (Serverless)

  • API תואם Redis לחלוטין (drop-in)
  • חינמי: 500K commands/חודש + 256MB (עודכן ב-2025)
  • Pay-as-you-go מעבר לחינמי: $0.20 ל-100K commands
  • אזורים גלובליים — קרבה גיאוגרפית טובה
  • אין שרת לנהל, אין גיבויים, אין מוניטור
  • 5 דקות הקמה (לוחצים Create → מקבלים URL + סיסמה)
  • אינטגרציות רשמיות ל-Vercel / Cloudflare / Railway

מתי: רוב המקרים. במיוחד כשהשירותים מפוזרים בין ספקים.

Railway Redis (Self-managed addon)

  • One-click — נכנסים לפרויקט Railway → "Add Service" → Redis
  • תמחור usage-based: ~$0.014/GB-hour RAM + $0.25/GB-חודש storage
  • תוכנית Hobby (₪19/$5 חודש) — $5 קרדיט שמכסה Redis קטן בקלות
  • אותו cluster כמו השרת — latency פנימי נמוך מאוד
  • אין free tier ייעודי — אבל הקרדיט של Hobby עוטף את זה
  • לא serverless — תמיד פועל, גם בלי traffic

מתי: אם השרת ראשי בלאו הכי ב-Railway, רוצים stack מאוחד אחד.

ההמלצה הסופית

Upstash Redis — בעיקר בגלל:

  1. החינמי גמיש יותר: 500K commands בחודש זה ~16K ביום. ב-MVP זה יותר ממספיק לעשרות לקוחות הראשונים בלי לשלם בכלל.
  2. בלי vendor lock-in: אם נעבור מ-Railway ל-Fly.io או לאחר — Upstash נשארת אותו דבר. Railway Redis קשור לפלטפורמה.
  3. Serverless = שקט נפשי: אין מה לנהל, אין מה לעדכן. בעיה? הם פותרים.
  4. אינטגרציה מעולה עם Cloudflare: גם אם נשתמש ב-CF Workers בחלק מהזרימות בעתיד, Upstash עובד באופן רשמי איתם.

Railway Redis הוא ברירת מחדל סבירה אם הכל ממילא רץ ב-Railway. רגע ההחלטה: אם השרת הראשי שם, הקרדיט של ה-Hobby plan ($5 שלא תנצל ממילא) מכסה Redis קטן בלי תשלום נוסף — וזה גם הגיוני.

אסור: Cloudflare KV ל-Voice Center. הוא לא תחליף ל-Redis במקרה שלנו.

16. Twilio Concurrency — שיחות מקבילות, PBX, ו-SIP Trunk

הטאב הזה עונה על השאלה הקריטית: אם 10 שיחות מגיעות בו-זמנית למספר אחד שקנינו ב-Twilio, מה קורה? האם הסוכן עונה לכולן? או רק לאחת? וגם את התרחיש ההפוך — 10 יוצאות במקביל.

1. שיחות נכנסות — האם מספר אחד מטפל ב-N שיחות במקביל?

כן. ללא הגבלה פר-מספר.

מספר טלפון ב-Twilio הוא לא "קו" במובן המסורתי. הוא identifier ש-Twilio משתמשת בו כדי לנתב שיחות. כל שיחה נכנסת יוצרת session נפרד: webhook נפרד, WebSocket נפרד, instance נפרד של הסוכן בצד שלנו. שיחה לא חוסמת שיחה.

דוגמה ממקרה אמיתי: מרפאה עם 5 קווים פיזיים → המרכזיה שלהם (3CX/Asterisk/Bezeq) מפנה את כולם למספר Twilio אחד שלנו → 5 לקוחות יכולים לחייג במקביל, כל אחד מקבל סוכן שלו, אין חוסם.

מה כן יכול להגביל?

מקורהגבלהטיפול
Twilio account-level concurrency Trial: 1. Paid default: ~100 שיחות במקביל בכל החשבון פותחים תיקט ל-Twilio להעלאה, עד אלפים
קיבולת השרת שלנו תלוי ב-vCPU/RAM. Pipecat WS לוקח ~100MB RAM פר שיחה scale horizontal — עוד workers, או larger VM
קיבולת ה-LLM (Grok) Rate limit פר API key — נמדד ב-tokens/min multiple keys, או upgrade plan
PSTN carrier בצד הלקוח המרכזיה של הלקוח אולי לא מעבירה 50 שיחות במקביל לא בעיה שלנו — של ספק הטלפוניה שלהם

2. שיחות יוצאות — האם מספר אחד יכול לחייג 10 במקביל?

כן. אותו עקרון. נשלחות 10 קריאות API POST /Calls במקביל, כל אחת משתמשת באותו From number, וכולן רצות בו-זמנית. כל אחת היא session נפרד.

שמיים: 10 קמפיינים יוצאים מאותו מספר, 10 instances של הסוכן רצים במקביל, כל אחד שיחה שונה.

מה כן עלול לחורק?

3. מתי צריך SIP Trunk?

SIP Trunk זה פרוטוקול שמחבר מערכות טלפוניה דרך IP. בהקשר שלנו, יש כמה תרחישים:

🔹 תרחיש A: לקוח עם PBX קיים (3CX / Asterisk / Bezeq Centrex)

הלקוח כבר משלם על מרכזיה והוא לא רוצה להחליף אותה. רוצה רק חלק מהשיחות לעבור לסוכן AI.

הפתרון הפשוט (Forwarding):

  • הלקוח מגדיר במרכזיה: "אם אף אחד לא ענה תוך 3 צלצולים → העבר למספר Twilio שלנו"
  • או: "כל השיחות אחרי שעות העבודה → העבר ל-Twilio"
  • או: "בחר 1 לדבר עם סוכן AI → העבר ל-Twilio"

אין צורך ב-SIP Trunk. זה רק call forwarding רגיל בצד הלקוח. עובד לכל גודל.

🔹 תרחיש B: לקוח רוצה להחליף מרכזיה לגמרי

לקוח עם 20 עובדים שמתעב את ה-3CX, רוצה ש-Voice Center יהיה המרכזיה החדשה — כולל ניתוב לעובדים פנימיים.

הפתרון (BYOC / SIP Trunk):

  • מעבירים את המספרים הקיימים ל-Twilio (number porting — 2-4 שבועות)
  • או מחברים SIP Trunk מ-Twilio לקיים
  • בונים IVR + ניתוב פנימי

זה לא MVP. זה מוצר נפרד שיכול לבוא הרבה יותר מאוחר.

🔹 תרחיש C: נפחי שיחות עצומים (100+ במקביל)

קמפיין מכירות אגרסיבי, מוקד שירות גדול. ה-account concurrency limit של Twilio מתחיל להפריע.

הפתרון:

  • SIP Trunk עם הקצאת "channels" קבועים (10 / 50 / 100 / 500)
  • מבטיח קיבולת מוסכמת
  • תמחור מבוסס channel + שיחה, לא רק שיחה

גם זה לא MVP. רלוונטי כשיש לקוח קונקרטי שצריך את זה.

4. השורה התחתונה ל-Voice Center

ב-MVP אנחנו לא נוגעים ב-SIP Trunk בכלל.

  • כל לקוח מקבל מספר Twilio רגיל
  • הוא מגדיר במרכזיה שלו forwarding למספר שלנו (לשעות, לאחר שעות, או תמיד — ההחלטה שלו)
  • Twilio מטפל ב-שיחות מקבילות אוטומטית, ללא הגבלה ברמת המספר
  • אם נגיע ל-100+ שיחות במקביל בחשבון — נפנה ל-Twilio להעלאת ה-cap

SIP Trunk וניהול מרכזיה הם מוצר נפרד שאפשר להציע אחר כך — לאחר ש-MVP אמיתי באוויר ויש לקוחות שמבקשים שיחזירו את כל ה-PBX שלהם.

5. תשובה לשאלות הספציפיות

השאלההתשובה
הלקוח יש 8 קווים שמופנים לקו אחד שלנו. Twilio יענה לכולם במקביל? כן. אם 8 חייגו בו-זמנית — 8 instances של הסוכן רצים במקביל, כל אחד שיחה נפרדת.
אפשר להפעיל 10 סוכנים יוצאים על קו אחד במקביל? כן. מספר אחד יכול לבצע 10 שיחות יוצאות מקבילות. ה-API לא מגביל את זה.
אז מתי בכל זאת נדרש SIP Trunk? רק כש: (א) הלקוח רוצה להעביר את כל מרכזייתו אלינו, או (ב) יש לו 100+ שיחות במקביל באופן קבוע. שני התרחישים לא רלוונטיים ל-MVP.
מספר Twilio מטפל בכל פעם בשיחה אחת? לא. זו תפיסה שגויה ממרכזיות מסורתיות. ב-VoIP/Twilio, מספר הוא ID לניתוב — לא "קו" פיזי.