Nu construiți, integrați – Un ghid pentru integrarea CRM

Publicat: 2022-03-11

Să presupunem că lucrați pentru un startup care vinde roboți în toate industriile. Primiți comenzi de la o varietate de clienți, iar o echipă de operațiuni evaluează comenzile și lucrează cu furnizori terți pentru a obține clienților dvs. robotul potrivit.

Construirea MVP-ului a fost stresantă, dar și foarte distractivă. Investitorii tăi sunt încântați și te umplu cu bani. Începe următoarea fază. Aveți nevoie de mai multă vizibilitate asupra profitabilității și doriți să achiziționați clienți mai mari care au nevoie de facturare mai sofisticată. În același timp, aveți o foaie de parcurs de produs destul de sofisticată pentru a permite vânzările de roboți cu marjă mai mare. Resursele sunt limitate, dar trebuie totuși să vă asigurați că mențineți compania în funcțiune.

Așa cum se predică adesea pentru companiile mai mici, concentrarea asupra lucrurilor la care ești bun este o regulă de bază excelentă. Dar cum rămâne cu toate domeniile care mențin operațiunile de zi cu zi ale companiei tale? Cu siguranță nu doriți să construiți un sistem de management al relațiilor cu clienții (CRM) sau un sistem contabil. La urma urmei, există o mulțime de produse care rezolvă toate problemele. Dar cum vor funcționa aceste sisteme împreună cu sistemul dvs. de comenzi existent?

Aici este utilă integrarea cu terțe părți. Deci, haideți să ne aruncăm și să vedem dacă putem evita unele capcane comune.

Integrare CRM

Indiferent dacă faceți vânzări low-touch (marketing de conținut, reclame pe rețelele sociale sau buletine informative) sau vânzări cu atingere ridicată (apeluri la rece, participarea la conferințe sau urmărirea clienților existenți prin telefon), un sistem CRM vă poate oferi o mulțime de vizibilitate cu privire la modul în care vă descurcați cu clienții existenți și cât de mult succes aveți în convingerea clienților noi.

Adesea, selecția unui sistem CRM este lăsată în mare parte departamentului de vânzări și marketing. În general, nu este nimic rău în asta. La urma urmei, acești oameni știu cel mai bine cum să crească veniturile și au nevoie de cel mai bun suport disponibil. Dar chiar și cel mai bun software nu valorează nimic dacă nu funcționează corect împreună cu sistemul dvs. de comandă robot.

Includeți departamentul dvs. de tehnologie în decizie

Fie că este vorba de CTO sau de un inginer dedicat, ține-i la curent de la început. Este foarte probabil să vă ofere mai multe informații despre modul în care cele două sisteme vor funcționa împreună în viitor.

Și un cuvânt pentru ingineri: păstrați o minte deschisă față de soluțiile terțe. Este ușor să le respingi pentru că API-ul lor nu este cel mai bun sau interfața lor de utilizare este urâtă. Cu toate acestea, poate fi foarte satisfăcător să găsești soluții elegante în jurul sistemelor existente.

Cu toate acestea, există câteva subiecte despre care pot fi benefice de discutat înainte de a lua o decizie. Subiecte generale precum „Avem nevoie de asta? trebuie abordate. Dar este, de asemenea, o idee bună să aveți deja o idee despre domeniul de aplicare. Este nevoie de o sincronizare bidirecțională sau sistemul terț va urma doar sistemul de comandă? Odată ce domeniul de aplicare este îndepărtat, trebuie să existe și o discuție tehnică despre detaliile de implementare, cum ar fi webhook-urile sau evaluarea limitelor API.

Aveți nevoie de o integrare personalizată?

Când vine vorba de integrare, nu este surprinzător că există deja platforme existente care promit să rezolve unele dintre problemele pe care probabil le veți întâlni. În prezent, Zapier și IFTTT sunt cele mai promițătoare.

În funcție de problema pe care încercați să o rezolvați, este posibil ca sistemul dvs. de comandă robot să nu fie implicat în integrare. Să presupunem că vă gestionați abonații la buletin informativ cu un sistem CRM, cum ar fi Salesforce sau HubSpot și că doriți doar o modalitate mai convenabilă de a-i contacta printr-un furnizor de servicii de e-mail, cum ar fi Mailchimp, Zapier are o mulțime de integrări existente pentru a vă ajuta în acest sens. Din acest punct, alegerea unui furnizor care are un conector Zapier este o cale bună de urmat.

Și chiar dacă vine vorba de integrarea datelor personalizate (roboți comandați și prețul acestora), Zapier Webhooks poate acționa ca intermediar pentru integrarea dvs.

Pe de altă parte, dacă deja trimiteți date către o terță parte, de ce să nu le trimiteți direct în sistemul CRM? Cu cât doriți să sincronizați mai multe date, cu atât mai utilă va fi o integrare directă.

Ceea ce mă duce la următorul meu punct.

Aveți nevoie de sincronizare bidirecțională?

De obicei, o integrare începe cu o cerință simplă, cum ar fi Putem introduce toți clienții noștri în sistemul nostru CRM? , în mod obișnuit combinat cu valorile comenzilor individuale de roboți, facilitând utilizarea instrumentelor de segmentare a clienților.

Cu toate acestea, mai devreme sau mai târziu, s-ar putea ca oamenii să dorească să folosească instrumentele de gestionare a contactelor pe care le oferă de obicei o suită CRM. Acestea includ funcții precum deduplicarea, modificarea detaliilor de contact cu datele de pe rețelele sociale, normalizarea adreselor de expediere sau pur și simplu ștergerea persoanelor de contact vechi.

Schimbarea contactelor într-un sistem CRM va însemna cel mai probabil că va trebui să modificați detaliile de contact într-un alt sistem, adică modificările trebuie să fie efectuate în ambele sensuri.

Efortul de implementare pentru aceasta depășește cu mult o simplă sincronizare unidirecțională, așa că acesta este un punct excelent pentru a vă gândi la modul în care doriți să utilizați un nou sistem strategic.

Cum veți fi notificat cu privire la modificările din CRM?

Dacă decideți să aveți o sincronizare în două sensuri, există o întrebare următoare: De unde știți că ceva s-a schimbat în partea CRM?

Majoritatea furnizorilor de sistem au instrumente pentru acest lucru, dar cel mai bun pentru modificări imediate este webhook-urile - în esență, un sistem de notificare HTTP care poate fi configurat pentru a vă informa despre modificările relevante (pentru unele sisteme, chiar și pe bază de câmp cu câmp) .

Ghid pentru integrarea CRM

Dacă sistemul nu oferă webhook-uri, cel puțin verificați dacă puteți obține o listă cu toate entitățile care au fost actualizate recent. În acest fel, nu trebuie să parcurgeți toate contactele și ofertele doar pentru a vă actualiza propriile date. Dar vă rugăm să rețineți că va trebui să interogați sistemul la intervale regulate.

În acest caz, sistemul dvs. de comenzi s-ar modifica și va crea în continuare date printr-un apel API în sistemul CRM. Dar toate modificările din sistemul CRM ar fi interogate într-un interval definit.

Ghid pentru integrarea CRM

Ceea ce este de remarcat este faptul că actualizările vor fi limitate la acest interval și pot duce la o inconsecvență temporară a datelor. De exemplu, atunci când sincronizați doar o dată pe zi de la sistemul dvs. CRM la sistemul dvs. de comenzi, datele pe care le căutați în sistemul dvs. de comenzi pot avea o vechime de până la 24 de ore.

În funcție de caracteristicile oferite de sistem, sarcina de integrare poate varia în complexitate și timp de implementare. Asigurați-vă că verificați din timp ce oferă sistemul și verificați planul pe care intenționați să îl cumpărați. De exemplu, unele sisteme CRM oferă webhook-uri în nivelurile mai bine plătite.

Un exemplu aici este CRM HubSpot, care oferă webhook-uri în general, dar caracteristica webhook este disponibilă numai în pachetul Enterprise. Instrumentele de contabilitate Zoho Books vor oferi cinci fluxuri de lucru automate (care includ webhook-uri) la nivelul lor cel mai de jos.

Datele dvs. sunt în stare bună?

Când vine vorba de crearea seturi de date într-un sistem extern, este bine să știi cum arată datele în propriul tău sistem. Din fericire, nu există prea multe moduri diferite de a prezenta contacte și oferte, dar un câmp care provoacă întotdeauna probleme este câmpul de e-mail.

Diferite sisteme au idei diferite despre ce este o adresă de e-mail validă și iată o alertă de spoiler - clienții dvs. s-ar putea să vă fi furnizat adrese de e-mail nevalide de tot felul. Multe sisteme CRM vor respinge crearea unui contact cu o adresă de e-mail nevalidă (și, desigur, furnizorul CRM definește ce este valid și ce nu).

Sfat: dacă este posibil, sincronizați numai adresele de e-mail confirmate cu CRM. Acest lucru vă va scuti de multă durere pe termen lung.

Limitări API

În cele din urmă, limitările API sunt ceva care trebuie abordat cât mai curând posibil.

Presupunând că există un API (care este, practic, un must-have pentru orice integrare), este benefic să ne uităm la limitările API-ului. Majoritatea startup-urilor pot face față limitelor API de bază ale majorității sistemelor CRM. De exemplu, HubSpot oferă 250.000 de apeluri API pe o perioadă de 24 de ore, chiar și în nivelul lor gratuit. Pe de altă parte, limitează și apelurile la 10 pe secundă (100 dacă utilizați OAuth). Liderul de piață Salesforce permite doar 100.000 la fiecare 24 de ore, dar oferă să cumpere mai multe.

De cele mai multe ori, vă veți încadra cu ușurință în aceste limitări, dar există un lucru de luat în considerare: cum rămâne cu alergarea inițială? La început, veți trimite o mulțime de contacte și oferte către CRM-ul dvs. (și posibil de mai multe ori dacă există probleme). Drept urmare, este posibil să atingeți limita zilnică API.

Pentru a reduce acest lucru, puteți testa cu un set mic de date și puteți crește încet numărul pe parcursul implementării pentru a rămâne în limita API-ului. Pentru migrarea inițială, planificați-o pe mai multe zile sau într-un weekend. Alternativ, contactați furnizorul și spuneți-i intențiile dvs. Când vă aflați în faza de evaluare (și nu ați plătit încă pentru sistem), ei ar putea fi dispuși să vă mărească puțin alocația API.

Implementarea CRM

Să spunem că sunteți cu toții de acord. Ați ales un instrument CRM excelent, iar inginerii sunt încrezători că poate fi integrat destul de ușor. Ați decis să-l definiți pentru a trimite doar datele clienților și a acceptat comenzile de robot. Prin urmare, sincronizarea în două sensuri nu este necesară, iar modificările adresei vor fi gestionate doar în propriul sistem de comenzi.

Mai sunt câteva bune practici de urmat în faza de implementare.

Încercați totul într-un mediu de testare

În cele mai multe cazuri, sistemul CRM va fi utilizat numai după ce integrarea dvs. este finalizată și gata de utilizare. Pentru acest caz de utilizare, poate părea atrăgător să folosiți doar sistemul de producție în timpul dezvoltării. La urma urmei, nu există date de producție pe care le-ați putea afecta. Odată finalizată dezvoltarea, veți elimina pur și simplu toate datele de testare pe care le-ați creat, veți rula o migrare inițială și veți îndrepta sistemul de comenzi către acest mediu.

Există câteva probleme cu această abordare:

  1. Doar dai cu piciorul cu piciorul pe drum. Chiar dacă lansarea se desfășoară fără probleme, mai devreme sau mai târziu, va exista o solicitare de funcționare pentru a schimba o parte a integrării. Având în vedere că cererea de caracteristici este suficient de mare, probabil că veți avea nevoie de o altă fază de testare. În acest moment, un sistem de testare separat este inevitabil; în caz contrar, s-ar putea să încurci datele de producție. Deci, de ce să așteptați cu configurarea până vi se cere să implementați prima caracteristică?

  2. Ajungi cu o configurație dezordonată. Este foarte probabil ca sistemul dumneavoastră CRM să aibă nevoie de o configurație care să se potrivească nevoilor sistemului dumneavoastră de comenzi. Este posibil ca numele de stare să fie nevoie să fie ajustate, câmpurile personalizate trebuie de obicei create și așa mai departe. Deoarece majoritatea dezvoltatorilor vor trebui să se obișnuiască cu sistemul CRM, se va adăuga o configurație care nu este necesară pe termen lung. În realitate, această configurație neutilizată nu este eliminată mai târziu și ar putea chiar să rămână în CRM pentru totdeauna. Forțând pasul suplimentar de replicare a configurației de la sistemul de testare la producție, cel mai probabil veți ajunge cu o configurație mai subțire pe sistemul dvs. de producție.

    Trebuie remarcat că acest lucru poate juca și în dezavantajul dvs. dacă uitați să copiați configurația din test în sistemul dvs. de producție și veți ajunge cu erori de producție.

    Deși există unele sisteme CRM care vă vor ajuta să comparați și să copiați elementele de configurare, în general, va fi util să vă notați configurațiile pentru a nu uita elementele esențiale. Majoritatea CRM-urilor oferă un API pentru configurația lor, astfel încât este posibil să se automatizeze acest pas.

  3. Aveți un risc mai mare de a polua datele de producție. Imaginați-vă pentru o secundă doi dezvoltatori care lucrează la o integrare. Aveți deja un sistem de organizare a sistemului de comandă robot. Această punere în scenă este conectată și la CRM-ul dvs. Odată ce integrarea dvs. este expediată, va trebui să vă amintiți să deconectați toate cele trei sisteme sau, altfel, s-ar putea să creați date de testare pe CRM-ul dvs. (acum) de producție.

Toate aceste probleme pot fi evitate prin dezvoltarea împotriva unui sistem de testare de la început. Producția este introdusă doar la sfârșit, chiar înainte ca totul să intre live. În acest fel, ajungeți la o configurație curată, nu riscați să uitați să deconectați sistemele locale și aveți un avertisment atunci când implementați noi funcții.

Definiți ID-ul pentru entitățile care se potrivesc

Acum, să începem să scriem codul de integrare real. Să luăm exemplul sincronizării contactelor cu un sistem CRM. Probabil, va trebui să creați contacte noi și să actualizați contactele existente. Pentru a distinge o creare de o actualizare, trebuie să legați cele două entități. În acest fel, puteți verifica dacă contactul din sistemul dvs. există pe sistemul extern.

Deși pare atrăgător să folosiți doar adresa de e-mail (la urma urmei, este un identificator obișnuit pentru o înregistrare de contact), există o soluție mai generală - pentru fiecare înregistrare, vă sincronizați cu un sistem extern de reținere și ID în propria bază de date.

Deci, modificați tabelul de contacte cu o coloană numită crm_id sau external_id . Această abordare are câteva avantaje:

  • Deoarece este un ID, acesta nu se va schimba (spre deosebire de o adresă de e-mail sau un număr de telefon).
  • Puteți vedea dacă trebuie să creați sau să actualizați entitatea fără a efectua mai întâi un apel API (dacă câmpul de ID extern este gol, puteți presupune că contactul nu există).

Inainte de:

Clienți
BigInt id
Şir Nume
Şir e-mail

După:

Clienți
BigInt id
Şir Nume
Şir e-mail
Şir hubspot_id

De exemplu, să presupunem că sunteți un dezvoltator Ruby on Rails care lucrează la o aplicație care trebuie să sincronizeze clienții existenți și noi cu HubSpot.

Un exemplu de cod simplificat ar putea arăta astfel:

 class HubspotSync def sync(customer) hubspot_return = if customer.hubspot_id.present? update(customer, customer.hubspot_id) else create(customer) end customer.update(hubspot_id: hubspot_return['companyId']) end private def create(customer) response = HTTParpty.post("https://api.hubapi.com/companies/v2/companies", map(company)) handle_response(response) end def update(customer, hubspot_id) response = HTTParpty.put("https://api.hubapi.com/companies/v2/companies/#{hubspot_id}", map(company)) handle_response(response) end def handle_response(response) raise RuntimeError, "Unexpected Status code: #{response.code}" if response.code >= 500 JSON.parse(response.body) end def map(company) # mapping code goes here { properties: [ name: 'name', value: company.name ] } end end

Observați cum profităm de salvarea ID-ului companiei care este returnat de la companyId . Nu numai că ne ajută să stabilim dacă vrem să actualizăm sau să creăm o companie pe HubSpot, dar putem vedea și în tabelul bazei de date ce entități sunt deja sincronizate cu HubSpot și care încă lipsesc.

Când vine vorba de cartografierea câmpurilor, mergeți la stil liber

Am văzut proiecte în care implementarea este precedată de crearea unei foi de calcul Excel gigant care definește ce coloane merg unde în sistemul CRM, cu adnotări despre cum ar trebui să fie transformate datele.

În realitate, există doar câteva moduri de a reprezenta contacte și oferte. Așa că, în loc să petreceți mult timp gândindu-vă la modul exact în care doriți să mapați, de ce să nu începeți cu un experiment? Oferă dezvoltatorului puțin spațiu pentru a-și da seama de mapare, dar și păstrează legătura, astfel încât întrebările să poată apărea devreme.

Cel puțin pentru câmpurile generale de contact (nume, adresă de email, număr de telefon, adresă), maparea va fi foarte simplă, iar transformările sunt de obicei banale.

Când vine vorba de maparea stării pentru oferte, un pic mai multă comunicare este utilă (uneori, prima stare se numește open , alteori new , iar uneori, modelul de stare nu se potrivește 100%, așa că va trebui să grupați stările împreună. ). În loc să veniți cu soluția perfectă, uitați-vă la datele dvs. actuale și vedeți cum s-ar potrivi cel mai bine în modelul de date al CRM. La urma urmei, ești o companie agilă, nu?

În exemplul de mai sus, puteți vedea o metodă de hartă care convertește modelul nostru Rails într-un hash obișnuit, care este înțeles de HubSpot. Pentru acest caz particular de utilizare, singurul element sincronizat este numele. Pentru o utilizare mai avansată, probabil că doriți să includeți mai multe câmpuri, dar pentru un rezultat excelent, începeți cu o presupunere educată și comunicați des cu partea de afaceri pentru detalii.

Luați în considerare reîncercări

Să coborâm la nivelul mai tehnic: implementarea sincronizării efective între sistemul dvs. și CRM. Este aproape un dat că integrarea va avea loc printr-o conexiune HTTP. Majoritatea sistemelor oferă un API HTTP și toate limbajele de programare vă vor permite să efectuați apeluri HTTP foarte ușor.

Din păcate, indiferent câți bani cheltuiți pe un sistem CRM, în cele din urmă, acesta nu va fi accesibil. Acest lucru se va întâmpla la un moment dat și nu poți face nimic în acest sens. Deci, ați putea la fel de bine să luați în considerare acest lucru atunci când vă dezvoltați integrarea.

În practică, acest lucru înseamnă că, ori de câte ori apelați un API, asigurați-vă că apelul este reîncercat în cazul unei probleme (codul de stare 500 din cealaltă parte). Implementarea reîncercărilor este ceva care este de obicei furnizat de bibliotecile terțe din limba pe care o alegeți.

Ghid pentru integrarea CRM

Pe lângă faptul că reîncercați, vă recomandăm să vă înregistrați exact ce sa întâmplat. Primirea unei notificări despre o eroare care este deja rezolvată la prima reîncercare poate fi frustrantă.

Deci, în loc să trimiteți spam pe canalul dvs. de erori cu problemele rezolvate, înregistrați toate înștiințările cu numărul de reîncercări pentru a vă da o idee despre cât de fiabil este sistemul - un sistem pentru care tocmai ați plătit mulți bani.

Dacă luăm ca exemplu clasa pe care am creat-o și rămânem în contextul Ruby on Rails, putem pur și simplu să includem apelul într-un ActiveJob și să fim destul de siguri că apelul va reuși în cele din urmă. Metoda handle_response va genera o eroare în cazul unui cod de stare neașteptat, iar ActiveJob va încerca o reîncercare cu o retragere exponențială. Pentru o soluție mai avansată, ar trebui să luați în considerare și codurile de stare 4xx, astfel încât să fie împiedicată o reîncercare și să fie afișat un mesaj de eroare.

 class HubspotSyncJob < ApplicationJob def perform(customer) HubspotSync.new.sync(customer) end End

Asigurați-vă că sistemul este folosit cu adevărat

OK, să presupunem că ai expediat totul. Ești foarte mândru de munca ta, iar sistemul este activ. Acum ce? Acesta este doar începutul. Pentru că indiferent de câte teste ai face, vor exista întotdeauna erori și modificări solicitate.

Problema este că nu veți afla despre acestea decât dacă vă folosiți sistemul. Și acest lucru se întâmplă din tot felul de motive – departamentul de vânzări este în prezent prea ocupat pentru a începe să-l folosească, strategia a fost schimbată sau chiar sisteme noi sunt deja evaluate.

Așadar, pentru a evita potențialele probleme pe termen lung, asigurați-vă că ați eliminat toate obstacolele care au împiedicat utilizarea sistemului în producție. Comunicați des între echipe pentru a alinia noile cerințe. Și dacă aflați că sistemul pur și simplu nu va funcționa pentru dvs., dezactivați integrarea. Sună dur și poate fi foarte frustrant, dar este mai puțin frustrant decât a trebui să remediați întotdeauna problemele de inconsecvență a datelor și să rezolvați soluțiile.

Încheierea

În cele din urmă, un proiect de integrare este un proiect al naibii și există o mulțime de lucruri care pot merge prost. Nu este foarte popular printre ingineri din mai multe motive, dar poate fi satisfăcător să vezi că o implementare are un impact pozitiv asupra productivității oamenilor care stau lângă tine.

Deci, pentru ingineri, încercați să înțelegeți nevoile unui sistem extern, cum ar fi un CRM sau un sistem de facturare, punând întrebări concrete, cum ar fi: Cum vă va ușura acest produs viața? Te-ai gândit la concurenți? De ce nu funcționează?

Pentru toți ceilalți implicați — introduceți inginerii cât mai devreme posibil, aveți încredere în ei când indică linii roșii și nu optați pentru un plan ieftin când puteți vedea că implementarea integrării va îngreuna mult în Pe termen lung.