דלג לתוכן הראשי
חזרה לסקירת התוסףתיעוד

CloseUp-CRM Lead Bridge — תיעוד

כל מה שצריך כדי להתקין, להגדיר, לאבטח ולפתור תקלות בתוסף.

סקירה

CloseUp-CRM Lead Bridge הוא תוסף וורדפרס שלוכד כל שליחת טופס באתר שלכם ומזרים אותה ל-CloseUp CRM בזמן אמת — בלי לשנות דבר בטפסים הקיימים. הוא נבנה למשווקים, סוכנויות וצוותי מכירות שכבר אוספים לידים דרך תוספי טפסים פופולריים בוורדפרס ורוצים שהלידים האלה יגיעו ל-CRM מיידית, באמינות ועם ייחוס שיווקי מלא.

מבחינה ארכיטקטונית, התוסף מתחבר לאירוע ההשלמה של כל מנוע טפסים נתמך, קורא את השדות שנשלחו, מזהה אוטומטית את השם, האימייל והטלפון של איש הקשר, מעשיר את הרשומה בפרמטרי UTM והקשר דפדפן/מכשיר, שומר אותה אופציונלית בטבלה מקומית, ומעביר payload חתום בפורמט JSON לנקודת הקצה של ה-Webhook שהגדרתם מעל HTTPS — הכל בנתיב לא-חוסם כך שהמבקר אף פעם לא ממתין.

דרישות

  • WordPress 5.6 ומעלה.
  • PHP 7.2 ומעלה.
  • נקודת קצה Webhook ב-HTTPS שמסוגלת לקבל בקשת POST עם גוף JSON.
  • חשבון CloseUp CRM לקבלת הלידים הנכנסים ולעבודה עליהם.

התקנה

  1. בפאנל הניהול של וורדפרס, עברו אל תוספים ← הוסף חדש ← העלה תוסף ובחרו את קובץ ה-ZIP של CloseUp-CRM Lead Bridge.
  2. לחצו על התקן עכשיו ואז הפעל.
בעת ההפעלה התוסף יוצר אוטומטית את טבלת מסד הנתונים wp_cll_leads — אין שלבים ידניים במסד הנתונים. הוא גם בודק בעצמו קבצים חסרים וגרסת PHP לא נתמכת, ומציג התראת ניהול ברורה במקום להיכשל בשקט.

התחלה מהירה (5 דק')

  1. הפעילו את התוסף.
  2. פתחו את CloseUp-CRM ← הגדרות בפאנל הניהול.
  3. הדביקו את כתובת ה-Webhook ואת ה-API Key (ואם אתם משתמשים באימות חתימה, גם את ה-Webhook Secret).
  4. שלחו טופס כלשהו באתר.
  5. ראו את הליד מופיע תחת CloseUp-CRM ← Leads — ומועבר ל-CRM שלכם בזמן אמת.

מדריך הגדרות

כל שדה במסך CloseUp-CRM ← הגדרות:

הגדרהמה היא עושה
Webhook URLנקודת הקצה ב-HTTPS שאליה נשלחים הלידים שנלכדו. חובה לצורך העברה.
Webhook Secretחותם את גוף הבקשה ב-HMAC-SHA256. החתימה נשלחת כ-X-CLL-Signature: sha256=<hmac> (לצד Authorization: Bearer <secret>). ה-secret עצמו לעולם אינו נשלח כטקסט גולמי בגוף — הוא משמש רק כדי להוכיח את האותנטיות והשלמות של ה-payload.
API Keyמפתח משותף פשוט הנשלח כטקסט גולמי תחת כותרת, כדי שנקודת הקצה תוכל לאמת את הקורא. בניגוד ל-secret, ערך זה מועבר כפי שהוא.
API Key Headerשם הכותרת שתחתיה נשלח ה-API key. ברירת מחדל X-API-Key.
מיפוי שדותמזהי שדות שם / טלפון / אימייל אופציונליים לכל טופס. השאירו ריק לשימוש בזיהוי חכם.
מנועי טפסיםהפעלה או כיבוי של לכידה לכל ספק. כל אחד מציג סטטוס מזוהה / לא מזוהה חי לתוספים המותקנים באתר.
שמירת לידיםקובע האם לידים שנלכדו נשמרים בטבלה המקומית wp_cll_leads.
איסוף IPקובע האם כתובת ה-IP של המבקר נרשמת. כבוי כברירת מחדל לצורך ידידותיות ל-GDPR.

Secret מול API key, בשורה אחת: ה-secret מוכיח שהגוף לא שונה (הוא לעולם לא נשלח גולמי); ה-API key הוא סיסמה משותפת גולמית שמזהה את הקורא.

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

Lead Bridge מתחבר לכל מנוע דרך הוק ההשלמה המקורי שלו, כך שהטפסים מתנהגים בדיוק כמו קודם.

תוסף טפסיםהוק מנוצלהערות
Contact Form 7wpcf7_mail_sentקורא את נתוני השליחה לאחר ש-CF7 שולח את המייל שלו. המיילים, ההפניות והודעות התודה המקוריות נשארות ללא שינוי.
Elementor / Elementor Proelementor_pro/forms/new_recordמתחבר לרשומת טופס ה-Pro בעת שליחה. עובד עם טפסים מרובי-שלבים וטפסי פופאפ.
ACF Formsacf/save_postלוכד שליחות טפסי Advanced Custom Fields מצד הלקוח בעת השמירה.
Formidable Formsfrm_after_create_entryמופעל לאחר שהרשומה נשמרה, כך שהליד נלכד עם ערכי השדות הסופיים.
Fluent Formsfluentform/submission_insertedקורא את השליחה שנוספה; נתמכים גם טפסים שיחתיים ופריסות מרובות-עמודות.
Frontend Admin by DynamiAppsfea/form/submitלוכד שליחות פוסט/פרופיל מצד הלקוח שנוצרות דרך טפסי DynamiApps Frontend Admin.

כיצד פועלת לכידת הלידים

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

זיהוי אוטומטי. התוסף בוחן את השדות שנשלחו ומשווה אותם למאגר דפוסים נפוצים כדי לזהות את השם, האימייל והטלפון — גם כשהשדות נקראים your-name, fname, email_address או tel. אימייל מזוהה גם לפי צורת הערך כגיבוי, וטלפון לפי דפוסי ספרות. אם הגדרתם מיפוי שדות מפורש לטופס, המיפוי גובר על הזיהוי האוטומטי.

העשרה והעברה. איש הקשר שזוהה משולב עם ייחוס שיווקי (מעוגייה מהצד הראשון) והקשר דפדפן/מכשיר, נכתב אופציונלית למאגר המקומי, ומועבר ל-Webhook שלכם כ-POST חתום בפורמט JSON — הכל בנתיב רקע לא-חוסם.

מבנה ה-Webhook payload

כל ליד שנלכד מועבר כ-POST בודד עם גוף ה-JSON הבא. השדות יציבים ובטוחים למיפוי ישיר ב-CRM שלכם.

lead.captured payload
{
  "event": "lead.captured",
  "lead": {
    "name": "Dana Cohen",
    "email": "dana.cohen@example.com",
    "phone": "+972-52-555-0142"
  },
  "form": {
    "provider": "contact-form-7",
    "form_id": "412",
    "name": "Homepage — Request a demo",
    "fields": {
      "your-name": "Dana Cohen",
      "email_address": "dana.cohen@example.com",
      "tel": "+972-52-555-0142",
      "company": "Northwind Ltd.",
      "message": "Interested in the Pro plan."
    }
  },
  "attribution": {
    "utm_source": "google",
    "utm_medium": "cpc",
    "utm_campaign": "spring_demo",
    "utm_term": "wordpress crm",
    "utm_content": "hero_cta",
    "gclid": "Cj0KCQiA1234EXAMPLE",
    "fbclid": null
  },
  "enrichment": {
    "browser": "Chrome 126",
    "os": "macOS 14",
    "device": "desktop",
    "language": "en-US",
    "referrer": "https://www.google.com/",
    "page_url": "https://example.com/?utm_source=google&utm_medium=cpc"
  },
  "meta": {
    "lead_id": "9f8b7c6d-5e4a-4b3c-2d1e-0f9a8b7c6d5e",
    "source_url": "https://example.com/contact/",
    "site": "https://example.com",
    "plugin_version": "1.1.0",
    "is_test": false,
    "timestamp": "2026-07-22T09:14:07Z"
  }
}

וזו בקשת ה-HTTP המדויקת, כולל כל הכותרות:

POST /webhooks/leads
POST /webhooks/leads HTTP/1.1
Host: crm.example.com
Content-Type: application/json
User-Agent: CloseUp-CRM-Lead-Bridge/1.1.0
X-CLL-Signature: sha256=9b2e1f0a7c... (HMAC-SHA256 of the raw body)
X-API-Key: your-shared-api-key
Authorization: Bearer your-webhook-secret

{ ...the JSON body shown above... }

אבטחה

Lead Bridge חותם כל גוף בקשה ב-HMAC-SHA256 עם ה-Webhook secret שלכם ושולח את התוצאה כ-X-CLL-Signature: sha256=<hmac>. בנקודת הקצה שלכם, חשבו מחדש את ה-HMAC על גוף הבקשה הגולמי עם אותו secret משותף והשוו אותו לכותרת בזמן קבוע. אם הם תואמים, ה-payload אותנטי ולא שונה.

PHP — אימות החתימה:

verify.php
<?php
// Read the RAW body exactly as received — do not decode + re-encode.
$rawBody   = file_get_contents('php://input');
$secret    = getenv('CLL_WEBHOOK_SECRET');
$header    = $_SERVER['HTTP_X_CLL_SIGNATURE'] ?? '';       // "sha256=<hmac>"
$expected  = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);

if (!hash_equals($expected, $header)) {
    http_response_code(401);
    exit('Invalid signature');
}

// Optional: also require the raw API key.
$apiKey = $_SERVER['HTTP_X_API_KEY'] ?? '';
if (!hash_equals(getenv('CLL_API_KEY'), $apiKey)) {
    http_response_code(401);
    exit('Invalid API key');
}

$payload = json_decode($rawBody, true);
// ... handle $payload['lead'] ...

Node.js (Express) — אימות החתימה:

verify.mjs
import crypto from 'node:crypto';
import express from 'express';

const app = express();

// Capture the RAW body — signature must be checked against the exact bytes.
app.post(
  '/webhooks/leads',
  express.raw({ type: 'application/json' }),
  (req, res) => {
    const raw = req.body; // Buffer
    const expected =
      'sha256=' +
      crypto
        .createHmac('sha256', process.env.CLL_WEBHOOK_SECRET)
        .update(raw)
        .digest('hex');

    const got = req.get('X-CLL-Signature') || '';
    const ok =
      expected.length === got.length &&
      crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(got));

    if (!ok) return res.status(401).send('Invalid signature');

    if (req.get('X-API-Key') !== process.env.CLL_API_KEY) {
      return res.status(401).send('Invalid API key');
    }

    const payload = JSON.parse(raw.toString('utf8'));
    // ... handle payload.lead ...
    res.sendStatus(200);
  },
);

Python (Flask) — אימות החתימה:

verify.py
import hmac, hashlib, os
from flask import Flask, request, abort

app = Flask(__name__)

@app.post("/webhooks/leads")
def leads():
    raw = request.get_data()  # RAW bytes — do not use request.json here
    secret = os.environ["CLL_WEBHOOK_SECRET"].encode()
    expected = "sha256=" + hmac.new(secret, raw, hashlib.sha256).hexdigest()

    got = request.headers.get("X-CLL-Signature", "")
    if not hmac.compare_digest(expected, got):
        abort(401, "Invalid signature")

    if not hmac.compare_digest(
        os.environ["CLL_API_KEY"], request.headers.get("X-API-Key", "")
    ):
        abort(401, "Invalid API key")

    payload = request.get_json()
    # ... handle payload["lead"] ...
    return "", 200
בנוסף לחתימה, אפשר לדרוש את ה-API key הגולמי. קראו אותו מהכותרת שהוגדרה (ברירת מחדל X-API-Key) והשוו אותו לערך השמור לפני שאתם סומכים על הבקשה. השתמשו בחתימה כדי להבטיח שלמות וב-API key כדי להבטיח זהות.

בדיקות

ה-כלי בדיקה המובנה מאפשר להוכיח לכידה והעברה בלי לגעת בטפסים החיים:

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

כל שליחת בדיקה מסומנת ב-is_test: true ב-payload ובמאגר המקומי, כך שקל לסנן אותה מדוחות אמיתיים.

לידים וייצוא

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

ייצאו את כל המאגר בכל עת ל-CSV, XML או JSON. לידים שנוצרו על ידי כלי הבדיקה נושאים את הדגל is_test כך שתוכלו לכלול או להחריג אותם מהייצוא ומהדוחות.

ייחוס שיווקי

בביקור הראשון, Lead Bridge לוכד את ההקשר השיווקי — utm_source, utm_medium, utm_campaign, utm_term, utm_content, וכן gclid ו-fbclid — מכתובת ה-URL ושומר אותו בעוגיית צד ראשון. כשהמבקר שולח טופס מאוחר יותר, הייחוס השמור מצורף לליד ומועבר ב-payload בתוך אובייקט ה-attribution, כך שאתם שומרים על המקור המקורי גם לאורך מספר צפיות בדפים.

פתרון תקלות

לידים לא מגיעים

  • האם כתובת ה-Webhook מוגדרת ונכונה?
  • האם נקודת הקצה מוגשת מעל HTTPS ונגישה מהשרת שלכם?
  • האם מתג מנוע הטפסים מופעל עבור התוסף שאתם בודקים, והוא מוצג כ-מזוהה?
  • האם חומת אש או תוסף אבטחה חוסם בקשות יוצאות מוורדפרס?

לא ניתן להפעיל

  • העלו מחדש את ה-ZIP המלא — העלאה חלקית עלולה להשאיר קבצים חסרים.
  • ודאו שהשרת מריץ PHP 7.2+; התוסף מציג התראה ברורה כשלא.

אי-התאמת חתימה

  • אמתו מול הגוף הגולמי — אל תקודדו מחדש או תעצבו את ה-JSON לפני החישוב, כי זה משנה את הבתים ושובר את ה-HMAC.
  • ודאו ששני הצדדים משתמשים ב-אותו Webhook secret.

שאלות נפוצות

תשובות מורחבות לשאלות הנפוצות ביותר.

האם זה ישנה או ישבור את הטפסים הקיימים שלי?

לא. הלכידה שקטה ולא-חוסמת. המיילים, ההפניות והודעות התודה הקיימות ממשיכות לעבוד בדיוק כמו קודם, והמבקר אף פעם לא ממתין לבקשה שלנו.

האם צריך לשנות שמות או להגדיר מחדש את שדות הטופס?

לא. זיהוי חכם מוצא שם, אימייל וטלפון גם עם שמות שדות מוזרים כמו your-name, fname, email_address או tel. מיפוי שדות ידני זמין אם רוצים שליטה מפורשת.

אילו תוספי טפסים נתמכים?

Contact Form 7, Elementor / Elementor Pro, ACF Forms, Formidable Forms, Fluent Forms ו-Frontend Admin by DynamiApps — ועוד נוספים לאורך זמן, הניתנים להגדרה בפאנל הניהול.

כיצד ה-Webhooks מאובטחים?

גוף הבקשה חתום ב-HMAC-SHA256 עם ה-Webhook secret שלכם ונשלח כ-X-CLL-Signature: sha256=. אפשר גם לדרוש API key משותף שנשלח כטקסט גולמי תחת כותרת הניתנת להגדרה (ברירת מחדל X-API-Key).

האם זה ידידותי ל-GDPR?

כן. איסוף כתובת ה-IP של המבקר אופציונלי וכבוי אלא אם תפעילו אותו, ואתם שולטים האם לשמור לידים מקומית בכלל.

האם צריך ליצור טבלה במסד הנתונים?

לא. ההפעלה יוצרת אוטומטית את טבלת wp_cll_leads. אם חסרים קבצים או שגרסת ה-PHP ישנה מדי, התוסף מציג התראה ברורה במקום להיכשל בשקט.

יומן שינויים

היסטוריית הגרסאות של התוסף. ניתן להגדרה מפאנל הניהול.

v1.1.0יולי 2026
  • נוסף Frontend Admin by DynamiApps כמנוע טפסים נתמך.
  • כלי בדיקה מובנה חדש: יצירת טפסי דמו אמיתיים עם שמות שדות אקראיים בתוך כל תוסף טפסים מותקן.
  • זיהוי השדות החכם מזהה כעת יותר דפוסים נפוצים של שם, אימייל וטלפון.
  • העברת ה-Webhook שולחת כעת גם את חתימת הגוף HMAC-SHA256 (X-CLL-Signature) וגם כותרת API-key הניתנת להגדרה.
  • מאגר הלידים המקומי מקבל ייצוא ל-CSV, XML ו-JSON בתוספת תצוגת ליד בודד.