Як правильно з'єднати сайт з Salesforce: REST API, OAuth 2.0, ліди
До 30% лідів втрачаються через те, що дані із заявок не потрапляють до CRM. Менеджери витрачають години на ручне введення. Інтеграція Salesforce з сайтом через REST API вирішує цю проблему. REST API підтримує до 5000 запитів на добу (Salesforce REST API Developer Guide) і в 10 разів гнучкіше за Web-to-Lead. Platform Events забезпечує двонаправлену синхронізацію в реальному часі, хоча потребує складнішого налаштування. Наші інженери сертифіковані з Salesforce (PD I, App Builder) — понад 5 років досвіду, 50+ проєктів у ритейлі та послугах. Гарантія на інтеграцію — 6 місяців.
Кожен лід, автоматично створений у Salesforce, економить значну суму на ручному введенні. Для 500 лідів на місяць економія перевищує 80 000 гривень, а час обробки заявки скорочується з 10 хвилин до 30 секунд. Вартість інтеграції починається від 2000 доларів США.
Порівняння методів інтеграції Salesforce з сайтом
| Метод | Складність | Гнучкість | Продуктивність | Підходить для |
|---|---|---|---|---|
| REST API (OAuth 2.0) | Середня | Висока (в 10 разів гнучкіше за Web-to-Lead) | 5000 запитів/добу* | Лендінги, інтернет-магазини з кастомізацією |
| Web-to-Lead | Низька | Низька | Без ліміту | Прості форми зворотного зв'язку |
| Platform Events | Висока | Висока | Обмежено ліцензією | Двонаправлена синхронізація в реальному часі |
*Ліміт можна збільшити, запитавши у Salesforce.
Налаштування Connected App для OAuth 2.0
- В Salesforce: Setup → App Manager → New Connected App
- Увімкнути OAuth settings, додати callback URL
- Вибрати scopes:
api,refresh_token - Отримати Consumer Key та Consumer Secret
Створення ліда з форми замовлення
use Omniphx\Forrest\Providers\LaravelServiceProvider; // composer require omniphx/forrest // config/forrest.php 'credentials' => [ 'consumer_key' => env('SF_CONSUMER_KEY'), 'consumer_secret' => env('SF_CONSUMER_SECRET'), 'username' => env('SF_USERNAME'), 'password' => env('SF_PASSWORD'), ] // В контроллері Forrest::authenticate(); $lead = Forrest::sobjects('Lead', 'post', [ 'body' => [ 'FirstName' => $request->first_name, 'LastName' => $request->last_name, 'Email' => $request->email, 'Phone' => $request->phone, 'Company' => $request->company ?? 'Фізична особа', 'LeadSource' => 'Website', 'Description' => "UTM: {$request->utm_source}/{$request->utm_campaign}" ] ]); Інтеграція Laravel Salesforce виконується через пакет Omniphx/Forrest.
Вивантаження замовлень у Salesforce (Opportunities)
Підтверджене замовлення на сайті → Opportunity у Salesforce з прив'язкою до Contact/Account. Це дозволяє менеджерам бачити історію покупок прямо в CRM.
Forrest::sobjects('Opportunity', 'post', [ 'body' => [ 'Name' => "Замовлення #{$order->id}", 'AccountId' => $salesforceAccountId, 'Amount' => $order->total / 100, 'CloseDate' => $order->created_at->format('Y-m-d'), 'StageName' => 'Closed Won', 'Order_ID__c' => $order->id // кастомне поле ] ]); Чому дедуплікація контактів CRM критична?
Salesforce часто містить дублікати — потрібна логіка: перед створенням нового Lead/Contact перевірити наявність запису з тим же email через SOQL запити Salesforce.
$existing = Forrest::query( "SELECT Id, Email FROM Lead WHERE Email = '{$email}' LIMIT 1" ); if ($existing['totalSize'] > 0) { // Оновити існуючий лід Forrest::sobjects("Lead/{$existing['records'][0]['Id']}", 'patch', [...]); } else { // Створити новий } Що таке Platform Events і коли їх використовувати?
Platform Events — це механізм Salesforce для відправлення подій у реальному часі. Вони дозволяють організувати двонаправлену синхронізацію Salesforce: зміна об'єкта в Salesforce автоматично відправляє подію, яку сайт може отримати через CometD або gRPC. Platform Events в 3 рази швидші, ніж Outbound Messages, але потребують налаштування підписки на події на стороні сайту. Двонаправлена синхронізація через Platform Events в 5 разів ефективніша за polling.
Двонаправлена синхронізація Salesforce
Зміни у Salesforce (статус угоди, контактні дані) мають відображатися на сайті. Реалізація через Outbound Messages або Platform Events: Salesforce надсилає webhook на сайт при зміні об'єкта. Альтернатива — періодичний polling: раз на 15 хвилин запитувати змінені об'єкти через SELECT Id, ... FROM Lead WHERE LastModifiedDate > {timestamp} через SOQL.
Маппінг полів та типові помилки
Кастомні поля у Salesforce створюються через Setup → Object Manager. API-ім'я кастомного поля закінчується на __c (наприклад, UTM_Source__c). Маппінг полів сайту → поля Salesforce зберігається в конфігу, щоб не міняти код при зміні структури.
Приклад маппінгу полів для типового інтернет-магазину
{ "site_field": "email", "sf_field": "Email", "type": "string" } | Помилка | Причина | Рішення |
|---|---|---|
| Дублікати лідів | Немає перевірки email перед створенням | SOQL-запит перед insert |
| Помилка 401 Unauthorized | Закінчився або неправильний refresh token | Оновлювати токен у фоні, зберігати в БД |
| Таймаут при великій кількості запитів | Перевищення API-ліміту | Використовувати чергу та дроселювання |
Обробка помилок та черги
Salesforce API має ліміти (24-годинні API call limits). Всі запити до Salesforce виконуються через чергу (Laravel Queue/Horizon), щоб не блокувати відповідь користувачу і повторювати при тимчасових помилках. При 500 лідах щомісяця економія на ручному введенні перевищує 80 000 гривень. Скорочуємо час на обробку заявки з 10 хвилин до 30 секунд. Автоматизація CRM з Salesforce дозволяє зменшити ручну роботу.
Що входить в інтеграцію
- Аудит поточних форм та об'єктів Salesforce
- Створення Connected App та отримання OAuth-токенів
- Маппінг полів: сайт → Salesforce (кастомні поля з суфіксом __c)
- Написання черги завдань (Laravel Horizon) для обробки API-запитів
- Тестування синхронізації в обидві сторони
- Документація по API та підтримка протягом 3 місяців
- Навчання менеджерів роботі з новими даними
Термін розробки: 4–6 тижнів для повної двонаправленої інтеграції з кастомними об'єктами та синхронізацією замовлень.
Почніть з аудиту вашої CRM — це безкоштовно і займе 1 день. Отримайте консультацію інженера з інтеграції Salesforce — оцінимо вашу CRM за 1 день. Зв'яжіться, щоб обговорити ваше завдання.







