Розробка форми заявки з інтеграцією в CRM
Форма заявки на сайті, дані якої автоматично попадають в CRM — стандартна задача для лідогенеруючих сайтів. Менеджер отримує сповіщення, заявка з'являється у воронці, історія переписки зберігається. Без ручного переносу даних.
Популярні CRM та способи інтеграції
| CRM | Способ інтеграції | Складність |
|---|---|---|
| amoCRM | REST API + webhooks | Середня |
| Бітрікс24 | REST API / Open Channel | Висока |
| HubSpot | Forms API / Contacts API | Низька |
| Salesforce | REST API / Lead об'єкт | Висока |
| Pipedrive | REST API | Низька |
Інтеграція з amoCRM
class AmoCrmService
{
private string $subdomain;
private string $accessToken;
public function createLead(array $formData): int
{
$resp = Http::withToken($this->accessToken)
->post("https://{$this->subdomain}.amocrm.ru/api/v4/leads", [
[
'name' => "Заявка з сайту: {$formData['name']}",
'status_id' => config('amocrm.initial_status_id'),
'pipeline_id' => config('amocrm.pipeline_id'),
'_embedded' => [
'contacts' => [[
'name' => $formData['name'],
'custom_fields_values' => [
['field_code' => 'EMAIL', 'values' => [['value' => $formData['email']]]],
['field_code' => 'PHONE', 'values' => [['value' => $formData['phone'], 'enum_code' => 'WORK']]],
],
]],
],
'custom_fields_values' => [
['field_id' => config('amocrm.source_field_id'), 'values' => [['value' => 'Сайт']]],
['field_id' => config('amocrm.comment_field_id'), 'values' => [['value' => $formData['message']]]],
],
]
]);
return $resp->json('_embedded.leads.0.id');
}
}
OAuth2 токени amoCRM
amoCRM використовує OAuth2 з refresh_token. Токени потрібно оновлювати кожні 24 години:
class AmoCrmTokenManager
{
public function getValidToken(): string
{
$stored = Cache::get('amocrm_access_token');
if ($stored) return $stored;
// Оновлюємо через refresh_token
$resp = Http::post("https://{$this->subdomain}.amocrm.ru/oauth2/access_token", [
'client_id' => config('amocrm.client_id'),
'client_secret' => config('amocrm.client_secret'),
'grant_type' => 'refresh_token',
'refresh_token' => decrypt(Setting::get('amocrm_refresh_token')),
'redirect_uri' => config('amocrm.redirect_uri'),
]);
$tokens = $resp->json();
Cache::put('amocrm_access_token', $tokens['access_token'], 82800); // 23 години
Setting::set('amocrm_refresh_token', encrypt($tokens['refresh_token']));
return $tokens['access_token'];
}
}
UTM-метки в заявці
Джерело трафіку фіксується в куках при першому візиті та передається з формою:
// Зберігаємо UTM при першому візиті
const utmParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
const params = new URLSearchParams(window.location.search);
utmParams.forEach(param => {
if (params.has(param)) {
document.cookie = `${param}=${params.get(param)};path=/;max-age=2592000`;
}
});
// При відправці форми додаємо UTM
function getUtmData() {
return Object.fromEntries(
utmParams.map(p => [p, getCookie(p) || '']).filter(([, v]) => v)
);
}
Терміни
Форма заявки з інтеграцією в одну CRM через API: 3–5 робочих днів.







