Zadarma API CRM

Droga klienta do zakupu lub kontaktu z firmą najczęściej zaczyna się od prostego formularza na stronie internetowej. Aby jednak to zgłoszenie szybko zamieniło się w udaną transakcję, samo zbieranie danych nie wystarczy – kluczem jest to, gdzie one trafiają i jak są przetwarzane.

Fundamentem sprawnej obsługi klienta jest system CRM. To właśnie on porządkuje bazę kontaktów, automatyzuje zadania i dba o to, by żadne zapytanie nie umknęło uwadze zespołu. O tym, jakie problemy operacyjne można rozwiązać za pomocą systemu CRM przeczytasz tutaj.

Samo posiadanie systemu to jednak dopiero połowa sukcesu. Musi on jeszcze dobrze współdziałać z innymi narzędziami oraz kanałami komunikacji, z których korzystasz, np. ze stroną internetową. Bezpośrednia integracja formularza z systemem CRM za pomocą API to standard nowoczesnego biznesu. Pozwala ona maksymalnie przyspieszyć obsługę zgłoszeń, zachować pełen kontekst zapytania i odciążyć pracowników od rutynowej pracy.

W tym artykule przejdziemy przez całą ścieżkę wdrożenia takiego rozwiązania. Zobaczysz, jak przekazywać do CRM kluczowe dane, które realnie ułatwią codzienną pracę działom sprzedaży i supportu.

Po co firmom integracja formularza leads z CRM

Zanim przejdziemy do kodu, spójrzmy na to z perspektywy biznesu. Co tak naprawdę zyskujesz, wdrażając tę integrację?

  • Szybkie przekazywanie danych: Dane pojawiają się w systemie od razu po kliknięciu przycisku „Wyślij”. Klient nie zdąży jeszcze zamknąć karty przeglądarki, a Twój zespół już otrzyma powiadomienie i będzie mógł zacząć działać.
  • Eliminacja błędów: Ręczne przepisywanie danych to prosta droga do katastrofy. Każda literówka w mailu lub pominięta cyfra w numerze telefonu oznaczają utracony kontakt. Przeoczony mail w spamie to być może stracona sprzedaż. API działa bezbłędnie i przesyła 100% danych zawsze do CRM.
  • Pełny kontekst: Zwykły e-mail zawiera tylko to, co klient wpisał sam. Integracja formularza zgłoszeniowego przez API pozwala „podpiąć” pod zgłoszenie ukryte dane, które dają Twojemu zespołowi więcej informacji.
  • Segmentację za pomocą tagów: Skrypt może automatycznie dodać tag informujący, na której stronie klient wypełnił formularz. Jak to sprawdza się w pracy: lead z formularza na stronie „Błąd płatności" można automatycznie przypisać pracowniku z działu technicznego, natomiast zgłoszenie ze strony “Cennik” - do działu sprzedaży.

Skoro wiemy już, jakie korzyści przynosi to rozwiązanie dla biznesu, czas przełożyć teorię na praktykę i wdrożyć je na Twojej stronie. Zobaczmy, jak wygląda kompletna implementacja tego procesu krok po kroku.

Ile kosztuje wdrożenie integracji formularza ze strony z CRM

Teamsale CRM działa razem z wirtualną centralą telefoniczną Zadarma — obie usługi są bezpłatne. Warunkiem utrzymania aktywnego konta jest doładowywanie salda przynajmniej raz na 3 miesiące. Saldo możesz przeznaczyć na dowolne usługi: połączenia wychodzące, numery wirtualne czy dodatkowe funkcje centrali PBX.

Jeśli chcesz korzystać z pełnych możliwości platformy, możesz podłączyć pakiet taryfowy, który obejmuje minuty na połączenia wychodzące, numery wirtualne, analitykę mowy z AI, większą ilość stanowisk w CRM itp. Bardziej szczegółowo opowiadamy, jaką taryfę wybrać w tym artykule.

Krok 1: Ustawienia w panelu klienta Zadarma

W zakładce Ustawienia - Integracje i API sprawdzamy, czy integracja z Teamsale CRM jest skonfigurowana. W tej samej zakładce przechodzimy do sekcji Klucze i API i pobieramy klucze (key oraz secret). Będą one później potrzebne do uwierzytelniania każdego żądania do API.

Krok 2: Skrypt PHP

Na trasowaniu https://my.site.com/zcrm_leads tworzymy skrypt wysyłający dane z formularza do CRM za pośrednictwem interfejsu API (ten przykład jest w języku PHP). W polach UserKey i Secret musisz ustawić swój klucz i hasło uzyskane w kroku 1.

<?php
$postData = $_POST;
if ($postData) {
   if (isset($postData['phones'], $postData['phones'][0], $postData['phones'][0]['phone'])) {
       $postData['phones'][0]['type'] = 'work';
   }
   if (isset($postData['contacts'], $postData['contacts'][0], $postData['contacts'][0]['value'])) {
       $postData['contacts'][0]['type'] = 'email_work';
   }
   $params = ['lead' => $postData];
   $params['lead']['lead_source'] = 'form';

   $leadData = makePostRequest('/v1/zcrm/leads', $params);
   if (isset($leadData['status'], $leadData['data'], $leadData['data']['id'])
       && $leadData['status'] === 'success'
       && (isset($postData['comment']) && !empty($postData['comment']))
   ) {
       //Jeśli klient został utworzony, zostaw notatkę tekstową w kanale
       $addFeedMethod = sprintf('/v1/zcrm/customers/%s/feed', $leadData['data']['id']);
       $messageData = ['content' => $postData['comment']];
       makePostRequest($addFeedMethod, $messageData);
   }

   var_dump($leadData);
}
exit();

function makePostRequest($method, $params)
{
   // userKey и secret zamienić na swoje dane z Panelu klienta
   $userKey = '';
   $secret = '';
   $apiUrl = 'https://api.zadarma.com';

   ksort($params);

   $paramsStr = makeParamsStr($params);
   $sign = makeSign($paramsStr, $method, $secret);

   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $apiUrl . $method);
   curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
   curl_setopt($curl, CURLOPT_POST, true);
   curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $paramsStr);
   curl_setopt($curl, CURLOPT_HTTPHEADER, [
       'Authorization: ' . $userKey . ':' . $sign
   ]);

   $response = curl_exec($curl);
   $error = curl_error($curl);

   curl_close($curl);

   if ($error) {
       return null;
   } else {
       return json_decode($response, true);
   }
}

/**
* @param array $params
* @return string
*/
function makeParamsStr($params)
{
   return http_build_query($params, null, '&', PHP_QUERY_RFC1738);
}

/**
* @param string $paramsStr
* @param string $method
* @param string $secret
*
* @return string
*/
function makeSign($paramsStr, $method, $secret)
{
   return base64_encode(
       hash_hmac(
           'sha1',
           $method . $paramsStr . md5($paramsStr),
           $secret
       )
   );
}

Krok 3: Formularz HTML

W kodzie swojej witryny dodaj formularz, aby uzyskać lead i wysłać go do interfejsu API. Ukryte pola są wymagane.

<form method="POST" action="/zcrm_leads">
   <label for="name">Name:
   <br>
   <input type="text" id="name" name="name" value="">
   <br>
   <label for="comment">Comment:</label><br>
   <input type="text" id="comment" name="comment" value="">
   <br>
   <label for="phone">Phone:</label><br>
   <input type="text" id="phone" name="phones[0][phone]" value="">
   <br>
   <label for="phone">Email:</label><br>
   <input type="text" id="email" name="contacts[0][value]" value="">
   <br>
   <br>
   <input type="submit" value="Submit">
</form>

Przykład jest napisany w HTML bez elementów i bibliotek. Zalecamy ustawienie swoich stylów. Można także zaktualizować formularz lub skrypt w dowolny sposób, aby wprowadzić inne dane lub w innej sekcji (na przykład kontakty lub zadania). W tej zakładce można zapoznać się z pełną listą możliwości (metod) integracji API CRM.

Krok 4: Ustawienia zaawansowane

Podstawowy formularz przesyła imię, telefon, email i komentarz. Ale API CRM obsługuje znacznie więcej danych, które warto zbierać od razu.

Informacje marketingowe

Jeśli Twoja strona przekazuje parametry UTM w URL, możesz je wyciągnąć za pomocą JavaScript i przekazać w ukrytym polu formularza do CRM.

Tagi

Tagi pozwalają automatycznie kategoryzować leady na podstawie strony, z której pochodzi formularz. Możesz przesyłać je jako ukryte pola w HTML lub ustawić po stronie PHP.

Dodatkowe właściwości

Jeśli formularz zawiera specyficzne dla Twojego biznesu pola - np. preferowany termin kontaktu, wybrany model produktu, itp. - możesz je przekazać w parametrze custom_properties.

Krok 5: Co po wypełnieniu formularza?

Formularz w tej postaci jest w pełni funkcjonalny. Przed wdrożeniem na produkcję warto jednak zadbać o kilka rzeczy:

  • Ochrona przed spamem: zalecamy dodanie testu weryfikacyjnego, np. bezpłatnej reCAPTCHA
  • Walidacja po stronie serwera: Sprawdzaj po stronie PHP, czy wymagane pola nie są puste i czy telefon/email mają poprawny format zanim wyślesz dane do API.
  • Obsługa błędów: Skrypt w tej chwili zwraca var_dump($leadData). W produkcji zastąp to logiką przekierowania użytkownika na stronę z podziękowaniem (po sukcesie) lub komunikatem błędu (po niepowodzeniu).

Podsumowanie

Formularz to najprostszy punkt wejścia do CRM, ale ten sam schemat - PHP po stronie serwera oraz żądanie do API - działa tak samo dla bota, zamówień w sklepie internetowym czy każdego innego kanału. Otwarte API CRM Zadarmy nie ogranicza liczby ani typu integracji.

Jeśli chcesz rozbudować to rozwiązanie, pełna lista metod API dostępna jest na naszej stronie w zakładce Wsparcie - API.

FAQ

Jak automatycznie dodawać leady z formularza do CRM?

Najskuteczniejszym sposobem jest integracja przez API: formularz przesyła dane do skryptu po stronie serwera (np. PHP), który buduje podpisany request i wywołuje endpoint CRM. Dane trafiają do systemu natychmiast po wysłaniu formularza.

Czy można połączyć formularz kontaktowy na stronie z CRM bez wtyczek?

Tak. Wystarczy skrypt (PHP, Python, Node.js) i dostęp do API Twojego systemu CRM. Nie są potrzebne żadne platformy pośredniczące — formularz HTML wysyła dane POST bezpośrednio do Twojego skryptu, który przekazuje je do CRM.

Jak zabezpieczyć klucze API przy integracji formularza?

Uwierzytelnianie musi odbywać się wyłącznie po stronie serwera. Klucze (key, secret) przechowuj w skrypcie PHP lub zmiennych środowiskowych serwera — nigdy w kodzie JavaScript widocznym w przeglądarce.

Czy CRM musi być płatny, żeby obsługiwać API?

Nie. Teamsale CRM Zadarma udostępnia pełne API bezpłatnie. Dostęp do integracji nie wymaga płatnego planu — wystarczy aktywne konto z doładowanym saldem.