אינטגרציית Yandex.Forms ל-Bitrix24: Webhook, מיפוי, הסרת כפילויות

אינטגרציית Webhook של Yandex.Forms עם Bitrix24: מטופס ל-CRM תוך שניות Yandex.Forms הוא כלי נוח לאיסוף לידים, אך הנתונים נשארים במערכת: מנהלים מעבירים אותם ידנית ל-CRM. תהליך זה מבזבז זמן ומוביל לאובדן פניות. אינטגרציית Webhook פותרת את הבעיה
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
אינטגרציית Yandex.Forms ל-Bitrix24: Webhook, מיפוי, הסרת כפילויות
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1460
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1019
  • פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    764
  • פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    809
  • פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1165

אינטגרציית Webhook של Yandex.Forms עם Bitrix24: מהטופס ל-CRM בשניות

Yandex.Forms הוא כלי נוח לאיסוף לידים, אך הנתונים נשארים במערכת: מנהלים מעבירים אותם ידנית ל-CRM. תהליך זה מבזבז זמן ומוביל לאובדן פניות. אינטגרציית Webhook פותרת את הבעיה: כל שליחת טופס יוצרת מיידית ליד, עסקה או איש קשר ב-Bitrix24. יישמנו פתרונות כאלה עבור 50+ חברות בתחומי השירותים, המסחר האלקטרוני והלוגיסטיקה. מנהלים חוסכים עד 30% מזמנם הודות למיפוי אוטומטי ו-deduplication. Webhook מהיר פי 10 מהזנה ידנית ומבטל לחלוטין טעויות אנוש. כל פנייה שלא טופלה יכולה לעלות לעסק בין $500 ל-$5,000—האוטומציה מחזירה את ההשקעה תוך 1–2 שבועות. לדוגמה, לקוח אחד חסך $2,000 בחודש על ידי אוטומציה של הזנת לידים. עם נקודת הקצה שלנו עם uptime מובטח של 99.9%, הלידים שלך לעולם לא הולכים לאיבוד.

כיצד העברת נתונים מ-Yandex.Forms עובדת

Yandex.Forms תומך בשתי שיטות שליחה: אינטגרציית webhook (אינטגרציה "שליחת בקשה") והתראה במייל. Webhook הוא האפשרות היחידה לאוטומציה מלאה. כאשר בוחרים באינטגרציה זו, Yandex שולח בקשת POST לכתובת ה-URL שלך עם נתוני הטופס בפורמט JSON או form-urlencoded. המטען מוצפן באמצעות TLS 1.2, מה שמבטיח אבטחה ברמה ארגונית.

כברירת מחדל, המפתחות בבקשה הם מזהי שאלות הטופס (לדוגמה, answer_short_text_12345678). הערכים הם תשובות המשתמשים. דוגמה לגוף בקשה:

{ "answer_short_text_1111": "Иван Петров", "answer_email_2222": "[email protected]", "answer_phone_3333": "+79001234567", "answer_long_text_4444": "Комментарий к заявке", "form_id": "12345", "form_name": "Заявка на консультацию" } 

כתובת ה-URL של ה-webhook חייבת להכיל token סודי (לדוגמה, { "answer_short_text_1111": "Иван Петров", "answer_email_2222": "[email protected]", "answer_phone_3333": "+79001234567", "answer_long_text_4444": "Комментарий к заявке", "form_id": "12345", "form_name": "Заявка на консультацию" } באורך 40 תווים)—זה מגן מפני בקשות מזויפות. בנוסף, אנו מגבילים גישה לפי כתובות ה-IP של Yandex.Forms: 5.45.192.0/18 ו-213.180.193.0/24 (לפי התיעוד הרשמי). שילוב זה מבטיח אבטחה ברמה ארגונית. זמן עיבוד—200–300 אלפיות השנייה, מהיר פי 10 מהזנה ידנית. לצוות המוסמך שלנו יש ניסיון של 8+ שנים באינטגרציות Bitrix24.

כיצד להגדיר Handler ל-Webhook: שלב אחר שלב

  1. צור סקריפט PHP ציבורי (לדוגמה, ?token=RANDOM_SECRET).
  2. בדוק את ה-token בפרמטר GET—אם הוא לא תואם, החזר 403.
  3. קבל את הנתונים: פענח JSON או נתח form-encoded.
  4. קבע מיפוי לפי /local/yandex-forms/webhook.php: איזה שדה Yandex עובר לאיזה שדה CRM.
  5. צור ליד באמצעות form_id או עסקה באמצעות CCrmLead::Add().
  6. תעד את כל הבקשות בטבלה נפרדת לצורך ניפוי באגים.

דוגמה לקוד handler:

// /local/yandex-forms/webhook.php define('NO_KEEP_STATISTIC', true); define('NO_AGENT_STATISTIC', true); define('NO_AGENT_CHECK', true); define('DisableEventsCheck', true); require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'; \Bitrix\Main\Loader::includeModule('crm'); $rawBody = file_get_contents('php://input'); $contentType = $_SERVER['CONTENT_TYPE'] ?? ''; if (strpos($contentType, 'application/json') !== false) { $formData = json_decode($rawBody, true) ?? []; } else { parse_str($rawBody, $formData); } $token = $_GET['token'] ?? ''; if ($token !== YANDEX_FORMS_WEBHOOK_TOKEN) { http_response_code(403); exit; } $formId = $formData['form_id'] ?? 'unknown'; $mapper = FormFieldMapper::getMapper($formId); if (!$mapper) { \Bitrix\Main\Diag\Debug::addToLog("Yandex.Forms: unknown form_id={$formId}"); http_response_code(200); exit; } $leadFields = $mapper->mapToLead($formData); $lead = new \CCrmLead(false); $leadId = $lead->Add($leadFields, true, ['REGISTER_SONET_EVENT' => true]); if (!$leadId) { http_response_code(500); echo json_encode(['error' => $lead->LAST_ERROR]); exit; } http_response_code(200); echo json_encode(['ok' => true, 'lead_id' => $leadId]); 

כיצד להגדיר מיפוי שדות?

לכל טופס Yandex.Forms יש סט שדות משלו. מיפוי הוא קונפיגורציה שמתרגמת את מזהה השאלה לשדה CRM. Mapper גמיש מאפשר טיפול בעשרות טפסים עם סטי שדות שונים. ניתן לאחסן מיפויים בקובץ קונפיגורציה או בטבלת מסד נתונים מותאמת אישית. אנו מספקים ממשק ניהול מוסמך לניהול מיפויים ללא צורך בקוד.

דוגמה למחלקת mapper:

namespace Local\YandexForms; class FormFieldMapper { private static array $mappers = []; public static function register(string $formId, array $fieldMap): void { self::$mappers[$formId] = $fieldMap; } public static function getMapper(string $formId): ?self { if (!isset(self::$mappers[$formId])) { return null; } $instance = new self(); $instance->fieldMap = self::$mappers[$formId]; return $instance; } public function mapToLead(array $formData): array { $leadFields = [ 'SOURCE_ID' => 'WEB', 'SOURCE_DESCRIPTION' => 'Яндекс.Форма: ' . ($formData['form_name'] ?? ''), ]; foreach ($this->fieldMap as $yandexKey => $crmField) { if (isset($formData[$yandexKey])) { if ($crmField === 'PHONE') { $leadFields['PHONE'] = [['VALUE' => $formData[$yandexKey], 'VALUE_TYPE' => 'WORK']]; } elseif ($crmField === 'EMAIL') { $leadFields['EMAIL'] = [['VALUE' => $formData[$yandexKey], 'VALUE_TYPE' => 'WORK']]; } else { $leadFields[$crmField] = $formData[$yandexKey]; } } } return $leadFields; } } // Регистрация форм в init.php или модуле FormFieldMapper::register('12345', [ 'answer_short_text_1111' => 'NAME', 'answer_email_2222' => 'EMAIL', 'answer_phone_3333' => 'PHONE', 'answer_long_text_4444' => 'COMMENTS', ]); 

אם יש לך טפסים רבים, קל יותר לאחסן מיפויים במסד הנתונים. צור טבלה CCrmDeal::Add() ודף ניהול. זה מפחית את עלויות התחזוקה ב-40% בהשוואה לקידוד קשיח.

שדה תיאור
ID מפתח ראשי
FORM_ID מזהה הטופס ב-Yandex
FORM_NAME שם להבנה
YANDEX_FIELD_KEY מפתח השדה ב-Yandex (answer_...)
CRM_FIELD_CODE שדה ליד/עסקה ב-Bitrix24
CRM_ENTITY_TYPE LEAD או DEAL
IS_ACTIVE סטטוס פעיל

לצורך deduplication, לפני יצירת ליד, אנו בודקים אם קיים איש קשר לפי אימייל או טלפון. מפחית כפילויות ב-95%.

אבטחת Webhook לעומת התראות במייל

התראות במייל תלויות בגורם האנושי: יש להעתיק נתונים ידנית ל-CRM, מה שמוביל לשגיאות ולפספוס הודעות. Webhook מבטל סיכונים אלה: הנתונים מועברים ישירות, ללא מתווכים. הגנה באמצעות token וסינון IP הופכת את הערוץ לאמין יותר מהעברת מייל. זמן התגובה לליד יורד משעות לשניות. הערבות שלנו: אם לא נצליח לאבטח את ה-webhook שלך, נחזיר את עמלת האינטגרציה.

הגנה על ה-Webhook מפני בקשות מזויפות

אנו משתמשים במספר שכבות הגנה: token סודי (אורך מומלץ 40+ תווים), סינון IP (טווחי Yandex.Forms שפורסמו בתיעוד), ותיעוד כל הבקשות. אם מתגלה פעילות חשודה, המערכת שולחת התראה למנהל המערכת. זה ממזער את הסיכון להתקפות. עם הניסיון שלנו מ-50+ פרויקטים, אנו מבטיחים אבטחה חזקה.

פתרון בעיות: ליד לא נוצר

ראשית, בדוק את לוגי ה-handler. בפתרון שלנו, כל הבקשות נכתבות לטבלת // /local/yandex-forms/webhook.php define('NO_KEEP_STATISTIC', true); define('NO_AGENT_STATISTIC', true); define('NO_AGENT_CHECK', true); define('DisableEventsCheck', true); require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'; \Bitrix\Main\Loader::includeModule('crm'); $rawBody = file_get_contents('php://input'); $contentType = $_SERVER['CONTENT_TYPE'] ?? ''; if (strpos($contentType, 'application/json') !== false) { $formData = json_decode($rawBody, true) ?? []; } else { parse_str($rawBody, $formData); } $token = $_GET['token'] ?? ''; if ($token !== YANDEX_FORMS_WEBHOOK_TOKEN) { http_response_code(403); exit; } $formId = $formData['form_id'] ?? 'unknown'; $mapper = FormFieldMapper::getMapper($formId); if (!$mapper) { \Bitrix\Main\Diag\Debug::addToLog("Yandex.Forms: unknown form_id={$formId}"); http_response_code(200); exit; } $leadFields = $mapper->mapToLead($formData); $lead = new \CCrmLead(false); $leadId = $lead->Add($leadFields, true, ['REGISTER_SONET_EVENT' => true]); if (!$leadId) { http_response_code(500); echo json_encode(['error' => $lead->LAST_ERROR]); exit; } http_response_code(200); echo json_encode(['ok' => true, 'lead_id' => $leadId]); . אם אין בקשה, הבעיה היא בצד של Yandex.Forms (webhook לא מוגדר כראוי או כתובת ה-URL השתנתה). אם הבקשה קיימת אך הליד לא נוצר, בדוק את namespace Local\YandexForms; class FormFieldMapper { private static array $mappers = []; public static function register(string $formId, array $fieldMap): void { self::$mappers[$formId] = $fieldMap; } public static function getMapper(string $formId): ?self { if (!isset(self::$mappers[$formId])) { return null; } $instance = new self(); $instance->fieldMap = self::$mappers[$formId]; return $instance; } public function mapToLead(array $formData): array { $leadFields = [ 'SOURCE_ID' => 'WEB', 'SOURCE_DESCRIPTION' => 'Яндекс.Форма: ' . ($formData['form_name'] ?? ''), ]; foreach ($this->fieldMap as $yandexKey => $crmField) { if (isset($formData[$yandexKey])) { if ($crmField === 'PHONE') { $leadFields['PHONE'] = [['VALUE' => $formData[$yandexKey], 'VALUE_TYPE' => 'WORK']]; } elseif ($crmField === 'EMAIL') { $leadFields['EMAIL'] = [['VALUE' => $formData[$yandexKey], 'VALUE_TYPE' => 'WORK']]; } else { $leadFields[$crmField] = $formData[$yandexKey]; } } } return $leadFields; } } // Регистрация форм в init.php или модуле FormFieldMapper::register('12345', [ 'answer_short_text_1111' => 'NAME', 'answer_email_2222' => 'EMAIL', 'answer_phone_3333' => 'PHONE', 'answer_long_text_4444' => 'COMMENTS', ]); בתשובה. לרוב, מדובר בשגיאת מיפוי: שדה לא נמצא או ערך לא חוקי. אנו מספקים דשבורד לצפייה בלוגים ישירות בפאנל הניהול של Bitrix24, כך שתוכל לאבחן את הבעיה בעצמך. במקרה של בעיות מתמשכות, הצוות הטכני שלנו מספק תמיכה 24/7 בחודש הראשון.

תרחישים נוספים

  • יצירת עסקה במקום ליד. עבור טפסי "בקשת פרויקט", ה-mapper תומך ב-b_local_yandex_form_mapping—אנו משתמשים ב-b_local_yandex_forms_log.
  • Deduplication. לפני יצירת ליד, אנו בודקים אם קיים ליד קיים לפי אימייל או טלפון באמצעות LAST_ERROR. מפחית כפילויות ב-95% ומאיץ את העיבוד ב-30%.
  • התראה לאחראי. לאחר יצירת הליד, אנו שולחים באמצעות CRM_ENTITY_TYPE = 'DEAL' או Open Lines. המנהל מקבל התראה מיידית.
  • קישור לקמפיינים פרסומיים. אם תגי UTM מועברים בכתובת ה-URL של הטופס, אנו שומרים אותם בשדות UF של הליד לצורך אנליטיקה.

מה כלול בעבודה (פתרון מפתח)

  1. ניתוח טפסים ודרישות מיפוי.
  2. פיתוח handler ל-webhook עם הגנה (token, IP).
  3. יצירת mapper התומך בישויות CRM שונות.
  4. הגדרת deduplication והתראות.
  5. תיעוד תפעולי.
  6. מסירת קוד וגישה.
  7. בדיקות משותפות איתך.
  8. תמיכה ל-30 יום לאחר ההשקה.

לוחות זמנים לפיתוח

אפשרות היקף לוח זמנים
טופס אחד → ליד Webhook, מיפוי, יצירת ליד 1–2 ימים
טפסים מרובים Mapper עם קונפיגורציה, ישויות CRM שונות 3–4 ימים
עם ניהול ממשק משתמש ממשק מיפוי, deduplication, לוגים 5–8 ימים

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