אתם מריצים מודעות אבל לא רואים אילו ערוצים מביאים מכירות. לידים הולכים לאיבוד, והתקציב מתבזבז. Roistat הוא כלי אנליטיקה מקצה-לקצה שמקשר בין עלויות הפרסום ללידים ולשיחות בפועל. אבל בלי אינטגרציה נכונה, הערך שלו יורד. אנו מתמחים באינטגרציה של Roistat—במהלך השנים הקמנו אנליטיקה לעשרות חברות, מחנויות מקוונות ועד שירותי B2B. המהנדסים שלנו עם 5 שנות ניסיון מגדירים את Roistat כך שכל טופס, שיחה וצ'אט מיוחסים כראוי. אנו מבטיחים שקיפות קמפיינים וצמיחה ב-ROI.
בעיות שאנו פותרים
-
אובדן ביקור בעת שליחת טופס. טעות נפוצה היא לא להעביר את
roistat_visitלשרת. ללא זה, Roistat לא יכול לייחס את הליד למקור התנועה. אנו מתקנים זאת על ידי הוספת שדה נסתר ולוגיקה בצד השרת. -
מעקב שיחות לא תקין ב-SPA. ב-React או Vue, סקריפט החלפת המספרים עשוי לא לעבוד אחרי רינדור דינמי. אנו מאתחלים את
roistat('replacePhones')במחזור החיים המתאים. - שגיאות בשליחת לידים דרך API. פורמט נתונים שגוי או שדות חובה חסרים (לדוגמה,
visit) גורמים לאובדן. אנו מאמתים נתונים בצד השרת.
איך אנחנו עושים את זה
נבחן מקרה אינטגרציה עם Laravel 11. אנו יוצרים מחלקת שירות RoistatService שמכילה את שליחת הלידים ל-API.
class RoistatService {
private string $projectId;
private string $apiUrl = 'https://cloud.roistat.com/api/proxy/1.0/project/lead/create';
public function __construct() {
$this->projectId = config('services.roistat.project_id');
}
public function sendLead(array $fields, string $visitId): bool {
$payload = [
'projectId' => $this->projectId,
'visit' => $visitId,
'fields' => array_map(
fn($name, $value) => ['name' => $name, 'value' => $value],
array_keys($fields),
array_values($fields)
),
];
$response = Http::timeout(5)->post($this->apiUrl, $payload);
return $response->ok() && $response->json('status') === 'ok';
}
}בקונטרולר, אנו קוראים לשירות הזה אחרי שמירת הליד. גישה זו מבטיחה שכל ליד מלווה ב-class RoistatService { private string $projectId; private string $apiUrl = 'https://cloud.roistat.com/api/proxy/1.0/project/lead/create'; public function __construct() { $this->projectId = config('services.roistat.project_id'); } public function sendLead(array $fields, string $visitId): bool { $payload = [ 'projectId' => $this->projectId, 'visit' => $visitId, 'fields' => array_map( fn($name, $value) => ['name' => $name, 'value' => $value], array_keys($fields), array_values($fields) ), ]; $response = Http::timeout(5)->post($this->apiUrl, $payload); return $response->ok() && $response->json('status') === 'ok'; } } נכון.
עבור הפרונטאנד, אנו משתמשים בשדה נסתר שממולא לפני שליחת הטופס:
document.querySelectorAll('form').forEach(form => {
form.addEventListener('submit', () => {
let input = form.querySelector('[name="roistat_visit"]');
if (!input) {
input = document.createElement('input');
input.type = 'hidden';
input.name = 'roistat_visit';
form.appendChild(input);
}
input.value = getCookie('roistat_visit') ?? '';
});
});
function getCookie(name) {
const m = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));
return m ? decodeURIComponent(m[1]) : null;
}זוהי שיטה סטנדרטית ואמינה שיישמנו ביותר מ-50 פרויקטים.
תהליך העבודה
- ניתוח — אנו חוקרים את האתר, הטפסים ומערכת הניהול שלכם. אנו מזהים נקודות אינטגרציה.
- התקנת קוד מעקב — אנו מוסיפים את הסקריפט הבסיסי של Roistat ל-
visitId(דרך GTM או ישירות). - הגדרת העברת ביקורים — אנו מיישמים את השדה הנסתר בכל הטפסים שבהם נדרש ייחוס.
- אינטגרציית API — אנו מחברים שליחת לידים מהשרת באמצעות הסטאק שלכם (PHP, Python, Node.js).
- מעקב שיחות — אנו מגדירים החלפת מספרים, תוך התחשבות בדינמיקה של SPA.
- בדיקות — אנו מוודאים שכל ליד ושיחה מופיעים בדוחות עם המקור הנכון.
לוח זמנים ומה כלול
אינטגרציה בסיסית (קוד מעקב + טפסים) — 2–4 שעות. חיבור API בשרת מותאם אישית — עוד 2–3 שעות. מחזור מלא עם מעקב שיחות ובדיקות — 6–8 שעות. העלות מחושבת באופן אישי.
כתוצאה מכך, אתם מקבלים:
- תיעוד אינטגרציה
- גישה לדוחות Roistat
- הדרכת עובדים על עבודה עם המערכת
- שבועיים של תמיכה טכנית לאחר ההשקה
השוואת שיטות אינטגרציה
| שיטה | מורכבות | זמן | אמינות |
|---|---|---|---|
| קוד מעקב בסיסי + העברה ידנית | נמוכה | 2 שעות | בינונית |
| GTM + שדה נסתר | בינונית | 3 שעות | גבוהה |
| אינטגרציית API מלאה בשרת | גבוהה | 6 שעות | מקסימלית |
אינטגרציית API אמינה פי 3 מהעברת עוגיות ידנית: היא לא תלויה במטמון ועובדת נכון עם כל מסגרת עבודה.
איך להימנע מטעויות נפוצות?
טעויות נפוצות והפתרונות שלהן
| טעות | פתרון |
|---|---|
document.querySelectorAll('form').forEach(form => { form.addEventListener('submit', () => { let input = form.querySelector('[name="roistat_visit"]'); if (!input) { input = document.createElement('input'); input.type = 'hidden'; input.name = 'roistat_visit'; form.appendChild(input); } input.value = getCookie('roistat_visit') ?? ''; }); }); function getCookie(name) { const m = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)')); return m ? decodeURIComponent(m[1]) : null; } שגוי בקוד המעקב |
בדקו את מזהה הפרויקט בהגדרות Roistat |
<head> חסר בנתוני הטופס |
הוסיפו שדה נסתר ומלאו אותו לפני השליחה |
| התעלמות מ-CORS עבור בקשות API | הגדירו CORS בשרת עבור cloud.roistat.com |
| מעקב שיחות לא עובד ב-SPA | קראו ל-projectId אחרי הרינדור |
למה חשוב להגדיר מעקב שיחות ב-SPA?
ב-React או Vue, מספרי טלפון עשויים לא להיות ב-HTML הראשוני—הם מרונדרים אחרי שסקריפט Roistat נטען. בלי קריאה נוספת ל-roistat_visit, המספרים נשארים מקוריים, ושיחות לא מיוחסות. אנו מוסיפים קריאה זו ב-roistat('replacePhones') או roistat('replacePhones') כדי להבטיח שהכל עובד.
אימות אינטגרציה
- ודאו ש-
useEffectנמצא בעוגיות (DevTools → Application). - שלחו טופס בדיקה—הליד אמור להופיע ב-Roistat עם מקור התנועה.
- בדקו שמספרי הטלפון באתר מוחלפים במספרים דינמיים.
לפי התיעוד הרשמי של Roistat, אינטגרציה נכונה מפחיתה את העלות לליד ב-20–40% ומגדילה את ה-ROI ב-30%.
למה לבחור בנו?
למהנדסים שלנו יש 5+ שנות ניסיון באנליטיקת ווב והם ביצעו מעל 100 אינטגרציות מוצלחות. אנו מבטיחים ייחוס נכון של כל נקודות המגע וצמיחה ב-ROI. צרו קשר לייעוץ—אנו ננתח את האתר שלכם ונציע את הפתרון האופטימלי.







