Salesforcen tekninen integraatio-opas
Salesforce-ylläpitäjille, tietoturva-arvioijille ja IT:lle — miten Revial todentaa, mitä se lukee ja kirjoittaa, tarvittavat oikeudet, API-kulutus, virhetilanteet ja auditointi.
Tämä opas kuvaa, mitä Revial tekee Salesforce-organisaatiossasi, jotta voit hyväksyä, määrittää ja myöhemmin auditoida integraation. Yhdistäminen vaihe vaiheelta: Yhdistetään Revial Salesforceen. Jokainen luettava ja kirjoitettava kenttä: Mitä Revial synkronoi Salesforcen kanssa.
1. Mitä hyväksyt
Revial yhdistyy OAuth-asiakkaana Salesforce REST API v60.0:n ja SOQL:n kautta. Valtuutus tehdään OAuth 2.0 -valtuutuskoodilla ja PKCE:llä (S256), ja sen suorittaa yksi käyttäjistäsi selaimessa.
| Ominaisuus | Arvo |
|---|---|
| Pääsymalli | Vain delegoitu — Revial toimii valtuuttaneena käyttäjänä |
| OAuth-scopet | api, refresh_token, openid |
| Vaaditut ylläpito-oikeudet | Ei mitään — ei System Administratoria, ei "Modify All Data" -oikeutta, ei JWT bearer- tai client credentials -pääsyä |
| Tuetut organisaatiot | Tuotanto ja sandbox |
Koska pääsy on delegoitu, objektioikeudet, kenttätason suojaus, jakosäännöt ja tietueiden omistajuus pätevät sellaisinaan. Tietueet, joita yhdistävä käyttäjä ei näe, eivät päädy Revialiin.
2. Mitä ylläpitäjäsi tarvitsee tehdä
Useimmissa organisaatioissa ei mitään — lisensoitu käyttäjä napsauttaa Yhdistä Salesforceen, kirjautuu ja sallii pääsyn. Ylläpitäjää tarvitaan, kun:
| Tilanne | Mitä tehdä |
|---|---|
| Organisaatiosi rajoittaa, mitä yhdistettyjä sovelluksia käyttäjät voivat valtuuttaa | Hyväksy Revial kohdassa Setup → Connected Apps OAuth Usage |
| Organisaatiosi rajoittaa API-pääsyä IP-osoitteen mukaan | Löysennä rajoitusta yhdistävälle käyttäjälle tai pyydä Revialin tuelta lähtevät osoitteet |
| Haluat erillisen integraatiokäyttäjän | Luo se (luku 4) ja anna sen tehdä yhdistäminen |
| Haluat yhdistää sandboxin | Käytä sandboxin omaa My Domain -osoitetta (luku 3) |
| Haluat Revialin kirjoittavan kenttiin | Myönnä kenttätason Edit-oikeus ja mäppää kentät Revialissa |
| Haluat tapaamisten tulokset mukautettuun objektiin | Toimita objektin ja kenttien API-nimet Revialille (liite A) |
Asennettavaa pakettia, käyttöönotettavaa metadataa tai Apex-koodia ei ole.
3. Todennus ja tunnistemalli
| Ominaisuus | Arvo |
|---|---|
| Valtuutuspäätepiste | https://{loginHost}/services/oauth2/authorize (kirjautumisnäkymä näytetään aina) |
| Tunnistepäätepiste | https://{loginHost}/services/oauth2/token |
| Kirjautumisosoite | login.salesforce.com tuotannolle tai sandboxin oma osoite |
| Grant-tyypit | authorization_code (yhdistäminen), refresh_token (päivitys) |
| Asiakastunnukset | Revialin palvelimella, ei koskaan selaimessa |
| Tarkistus yhdistämisen jälkeen | GET {instanceUrl}/services/oauth2/userinfo |
| Pääsytunnisteen elinikä | Oletetaan 2 tunniksi issued_at-hetkestä; päivitetään, kun jäljellä on alle 35 minuuttia |
Kirjautumisosoite. Vain Salesforcen ylläpitämät verkkotunnukset hyväksytään (salesforce.com, force.com, salesforce.mil, cloudforce.com, sfcrmapps.cn); muut hylätään eikä niitä korvata oletuksella. Yhdistämisen yhteydessä valittu osoite tallennetaan ja sitä käytetään jokaisessa päivityksessä, joten sandbox-yhteys toimii myös ensimmäisen tunnisteen vanhenemisen jälkeen. Käytä sandboxin omaa osoitetta — yleinen test.salesforce.com hyväksytään, mutta se voi ohjata kirjautuneen käyttäjän toiseen organisaatioon. Palautetun instanssiosoitteen on oltava HTTPS-osoite *.salesforce.com- tai *.force.com-verkkotunnuksessa.
Tunnisteiden säilytys. Yksi yhteys Revial-organisaatiota ja palveluntarjoajaa kohden. Pääsy- ja päivitystunnisteet salataan levossa (AES-256-GCM). Revial tallentaa myös instanssin URL-osoitteen, yhdistävän käyttäjän tunnuksen, sähköpostin ja nimen userinfo-vastauksesta, kirjautumisosoitteen ja yhteyskohtaiset asetukset.
Päivitys. Enintään kolme yritystä lyhyellä viiveellä. invalid_grant- tai 401-vastauksella yhteys merkitään uudelleentodennusta vaativaksi ja organisaation ylläpitäjä saa sovelluksen sisäisen ilmoituksen — Revial lopettaa sen sijaan, että yrittäisi organisaatiotasi vastaan uudelleen. Jos Salesforce palauttaa uuden päivitystunnisteen (kierrätys), se tallennetaan ja vanha hylätään.
Kuka voi yhdistää Revialin puolella. Organisaation omistaja tai ylläpitäjä tilauksella, joka sisältää CRM-integraation. Kulkua rajoitetaan pyyntömäärän mukaan, ja se on suojattu kertakäyttöisellä state-arvolla ja palvelimella säilytettävällä PKCE-verifierillä, jotka ovat voimassa viisi minuuttia. Kun Salesforce-yhteys on yhdistettynä, toinen hylätään; virhetilassa oleva yhteys päivitetään paikallaan ja se säilyttää asetuksensa.
4. Yhdistävä käyttäjä ja tarvittavat oikeudet
Kaikki tapahtuu yhden yhdistävän käyttäjän nimissä. Suosittelemme erillistä, lisensoitua integraatiokäyttäjää — se säilyy henkilöstömuutoksissa ja pitää tietueiden omistajuuden ennustettavana. Tavallinen myyntiprofiili antaa yleensä tarvittavat oikeudet.
| Revialin tarvitsee… | Oikeus |
|---|---|
| Käyttää API:a | API Enabled |
| Lukea Accounts, Contacts, Leads, Opportunities | Read |
| Lukea Events, Tasks, EmailMessage, Notes | Read |
| Lukea OpportunityStage, OpportunityContactRole | Read |
| Kirjata tapaamisten yhteenvedot | Create (Task) |
| Kirjoittaa mäpättyihin kenttiin (Account, Contact, Opportunity) | Kenttätason Edit kyseisiin kenttiin |
| Käyntiraportit (liite A, jos käytössä) | Create ja kenttätason Edit objektiin; Edit asetettaviin Event-kenttiin; Read (User) |
| Poistaa tietueita, muuttaa metadataa, ylläpitää | Ei tarvita |
Taulukko on oletus, ei minimi. Jos Task-luontioikeutta ei anneta, yhteenvetoja ei kirjata; jos kenttätason Edit-oikeutta ei anneta, mäpättyjä kenttiä ei kirjoiteta.
Puuttuvat oikeudet. 403 INSUFFICIENT_ACCESS Event-, Task- tai EmailMessage-objektissa ohittaa kyseisen objektin, viimeistelee muun synkronoinnin ja merkitsee yhteyden huomiota vaativaksi. 403 asiakkaissa, kontakteissa, liideissä, myyntimahdollisuuksissa tai muistiinpanoissa kaataa kyseisen osan synkronoinnista. Jos kenttätason suojaus piilottaa jonkin Revialin valinnaisista kentistä (kuten AnnualRevenue, Phone tai Title), Revial jättää kentän pois ja yrittää uudelleen; piilotettu pakollinen kenttä kaataa kyselyn.
5. Mitä Revial lukee
Asiakkaat, kontaktit, konvertoimattomat liidit (IsConverted = false), myyntimahdollisuudet, aktiiviset OpportunityStage-tietueet, OpportunityContactRole, Eventit, Taskit (paitsi TaskSubtype Email ja ListEmail), EmailMessage mukaan lukien koko TextBody ja EmailMessageRelation sekä klassiset muistiinpanot. Kyselyt käyttävät eksplisiittisiä kenttälistoja ja seuraavat nextRecordsUrl-sivutusta. Koko kenttälista: Mitä Revial synkronoi Salesforcen kanssa.
Synkronoinnin ulkopuolella Revial voi lukea myös käyttäjän (User) sähköpostin perusteella, myyntimahdollisuuden tai kontaktin AccountId-kentän, Eventit ja EventRelationin (vain käyntiraportit) sekä objektien describe-metadatan kenttien mäppäysnäkymää varten.
Revial ei lue Caseja, kampanjoita, Chatteria, Files- tai ContentDocument-tietueita, Lightning-muistiinpanoja, tietuetyyppejä eikä kenttähistoriaa.
6. Mitä Revial kirjoittaa
Tietueet luodaan kutsulla POST /sobjects/{Object}/ ja päivitetään kutsulla PATCH /sobjects/{Object}/{id}.
| Toiminto | Tiedot |
|---|---|
| Tapaamisen yhteenveto | Luo Task: Subject, Description (pelkkä teksti), Status Completed, Priority Normal, WhoId kontakti, WhatId myyntimahdollisuus tai asiakas. Ei ActivityDate- eikä OwnerId-kenttää |
| Mäpätyt kentät | Päivittää tunnistetun asiakkaan, kontaktin tai myyntimahdollisuuden — vain mäppäämäsi kentät |
| Käyntiraportti (liite A) | Luo määritetyn objektin; päivittää tunnistetun Eventin määritetyt kentät |
Yhteenvedot ovat Taskeja eivätkä muistiinpanoja, koska valmiiksi merkitty Task näkyy aktiviteettiaikajanalla, jota myyjät seuraavat. Revial ei koskaan poista tietueita eikä muuta metadataa.
7. Kenttien mäppäykset
Ylläpitäjät mäppäävät Revialin yhteenvetokenttiä ja mukautettuja poimintakenttiä asiakkaan, kontaktin ja myyntimahdollisuuden kenttiin kohdassa Organisaatio → CRM-asetukset → Ominaisuuksien yhdistäminen. Kenttiä, joilla on jo arvo, ei muuteta, ellei mäppäystä ole asetettu ylikirjoittamaan. Päivitykset lähetetään yhtenä PATCH-eränä; jos se hylätään, jokaista kenttää yritetään erikseen ja virheet raportoidaan kenttäkohtaisesti.
Vaiheet normalisoidaan avainsanojen perusteella (kvalifiointi, tarvekartoitus, tarjous, neuvottelu); voitettu ja hävitty päätellään kentistä IsClosed ja IsWon, ja muut vaiheet ovat "muu".
8. Synkronoinnin tahti ja API-kulutus
Revialin kutsut lasketaan organisaatiosi päivittäiseen API-pyyntökiintiöön.
- Ensimmäinen synkronointi — täysi haku objekteittain, uusimmat ensin, enintään 50 000 tietuetta objektia kohden. Myyntimahdollisuudet rajataan avoimiin ja viimeisten 12 kuukauden aikana muokattuihin.
- Seuraavat synkronoinnit — noin tunnin välein,
WHERE LastModifiedDate > {watermark}nousevassa järjestyksessä, joten kuorma seuraa muuttuneita tietueita eikä organisaation kokoa. - Järjestys — asiakkaat → kontaktit → liidit → vaiheet → myyntimahdollisuudet → aktiviteetit → muistiinpanot, kukin omana ajonaan; tilapäinen virhe yritetään uudelleen seuraavalla ajolla.
OpportunityContactRole- ja EmailMessageRelation-haut tehdään 200 tunnisteen erissä. Datakutsujen aikakatkaisu on 30 sekuntia.
Poistoja ei tunnisteta. LastModifiedDate-suodatus ei palauta poistettuja tietueita, eikä Revial täsmäytä niitä: Salesforcessa poistettu tietue jää Revialin kopioon, kunnes katkaiset yhteyden.
Tietueraja. Jos objektilla on yhdellä ajolla yli 50 000 muuttunutta tietuetta, loput ohitetaan eikä niitä haeta myöhemmin.
9. Tapaamisten yhdistäminen CRM-tietueisiin
Kun tapaaminen linkitetään Salesforcen tietueisiin, Revial kokeilee järjestyksessä ja ensimmäinen osuma voittaa:
- Suora — tapaamiseen jo liitetyt tietuetunnukset.
- Pysyvä — avoin myyntimahdollisuus, johon tapaaminen on jo linkitetty.
- Sähköposti — osallistujien sähköpostit → kontaktit → niiden myyntimahdollisuudet, pisteytettyinä.
- Verkkotunnus — yritys verkkosivun tai sähköpostin verkkotunnuksen perusteella (ei myyntimahdollisuutta).
- Yrityksen nimi — nimen perusteella (ei myyntimahdollisuutta).
Pisteytys suosii avoimia diilejä, osallistujaa ensisijaisena kontaktina, muita osallistujia diilissä, otsikon samankaltaisuutta, pidemmälle edenneitä vaiheita ja tuoretta aktiviteettia. Suljetut myyntimahdollisuudet jätetään pois. Ilmaisten sähköpostipalveluiden verkkotunnukset (Gmail, Outlook ym.) ohitetaan yritystunnistuksessa, joten tapaaminen, jossa on vain henkilökohtaisia osoitteita, ei välttämättä linkity asiakkaaseen.
10. Tietoturva, rajat ja virhetilanteet
- API-versio: REST ja SOQL v60.0.
- Aikakatkaisut: 30 sekuntia datakutsua kohden.
- Vähimmät oikeudet: kolme scopea, ei ylläpito-oikeuksia, ei sovelluskohtaista pääsyä.
- Salaisuudet: asiakastunnukset vain palvelimella; tunnisteet salattu levossa.
- Osittaiset oikeudet: katso luku 4.
- Sivutuksen turvallisuus: objektikohtainen 50 000 tietueen katto ajoa kohden.
- Datan säilytys: Revial tallentaa synkronoidut tietueet ja jokaisen raa'an API-vastauksen. Ne poistetaan, kun katkaiset yhteyden.
11. Auditointi ja yhteyden katkaiseminen
Näin näet, mitä Revial on tehnyt organisaatiossasi:
- Setup → Connected Apps OAuth Usage — Revialin sovellus, sen valtuuttaneet käyttäjät ja käyttäjäkohtainen peruutus.
- Setup → Login History — suodata yhdistävän käyttäjän mukaan.
- API-käyttö — kohdista pyyntömäärä yhdistävälle käyttäjälle.
- Revialin kirjoittamat tietueet — yhdistävän käyttäjän luomat valmiit Taskit (ja käyntiraportit, jos määritetty).
Yhteyden katkaiseminen:
- Revialissa — Katkaise yhteys Salesforce-kortissa. Revial poistaa synkronoidun kopionsa ja tallennetut tunnisteet. Se ei kutsu Salesforcen peruutuspäätepistettä.
- Salesforcessa — peruuta sovellus kohdassa Connected Apps OAuth Usage tai poista yhdistävä käyttäjä käytöstä. Revial saa
invalid_grant-vastauksen, merkitsee yhteyden ja lopettaa.
Kumpikaan ei poista Taskeja tai tietueita, jotka Revial on jo kirjoittanut.
12. Vianmääritys
| Oire | Todennäköinen syy | Korjaus |
|---|---|---|
| "This app is blocked" | Organisaatio rajoittaa yhdistettyjä sovelluksia | Hyväksy Revial kohdassa Connected Apps OAuth Usage |
| Yhdistetty, mutta synkronointi on tyhjä | Käyttäjä ei näe tietueita | Laajenna käyttäjän roolia tai jakoa, tai yhdistä laajemmalla näkyvyydellä |
| Sähköposteja, Eventejä tai Taskeja puuttuu | 403 kyseisessä objektissa | Myönnä Read-oikeus |
| Mäpätty kenttä ei päivity koskaan | Kenttätason Edit puuttuu | Myönnä Edit; Revial raportoi kenttäkohtaiset virheet |
| Sandbox yhdistyi tuotantoon | Käytettiin yleistä test.salesforce.com-osoitetta | Katkaise yhteys ja yhdistä sandboxin omalla osoitteella |
| Ilmoitus "CRM: Authentication expired" | Tunniste peruutettu, käyttäjä poistettu käytöstä tai salasana nollattu | Katkaise yhteys ja yhdistä uudelleen |
| API-käytön piikki | Ensimmäinen täysi synkronointi | Odotettua kerran; myöhemmät synkronoinnit seuraavat vain muutoksia |
| Tapaaminen ei linkity asiakkaaseen | Vain ilmaisten sähköpostipalveluiden osallistujia | Odotettua — niitä ei käytetä tunnistukseen |
Liite A — Käyntiraportit (mukautettu objekti)
Jotkin organisaatiot kirjaavat tapaamisten tulokset mukautettuun objektiin, kuten Visit_Report__c, joka linkitetään kalenterin Eventiin. Revial tukee tätä yhteyskohtaisella määrityksellä, jonka Revial tekee — organisaatiossasi ei tarvita koodimuutoksia.
Mitä toimitat:
| Asetus | Merkitys |
|---|---|
objectName | Objektin API-nimi (pakollinen) |
notesField | Kenttä, johon tapaamisen muistiinpanot kirjoitetaan (pakollinen) |
accountField | Lookup- tai master-detail-kenttä asiakkaaseen (pakollinen) |
eventLookupField | Event-kenttä, joka asetetaan osoittamaan raporttiin (pakollinen) |
opportunityField, contactField, subjectField, visitDateField, needsReviewField, dealerCustomerField | Raportin valinnaiset kentät |
visitReportOwnerField, eventOwnerField | Valinnaiset omistajakentät, jotka asetetaan myyjäksi |
eventStakeholderField | Valinnainen sidosryhmävalintalista Eventissä |
fieldMap | Tapaamisesta koottavat lisäarvot |
matchStrategy.startWindowMinutes | ± minuutit Eventin tunnistamiseen alkamisajan perusteella (oletus 60) |
Miten kirjoitus toimii:
- Eventin tunnistus — Event, joka alkaa aikaikkunan sisällä ja on linkitetty tapaamiselle tunnistettuun kontaktiin (myös EventRelationin kautta); lähin alkamisaika voittaa. Myyjän valitsema Event käytetään suoraan.
- Asiakkaan selvitys — myyjän valinta, muuten Eventin
WhatId, jos se on asiakas, muuten kyseisen myyntimahdollisuuden asiakas, muuten Eventin kontaktin asiakas. - Tietueen luonti määritetyillä kentillä.
- Eventin päivitys — takaisinlinkkikenttä ja, jos määritetty, omistaja- ja sidosryhmäkentät. Omistajakentän asettaminen voi vaihtaa Eventin omistajan.
Revial ei koskaan luo Eventiä. Erilliset tulokset raportoidaan: no_contacts_resolved (yksikään osallistuja ei vastannut kontaktia — tarkista CRM-synkronointi), no_event_matched (aikaikkunassa ei ollut Eventiä — tarkista kalenterisynkronointi), no_account_on_event ja linkFailed (raportti luotiin, Eventin päivitys epäonnistui — myönnä Edit Event-kenttään ja korjaa linkki käsin). Luotua raporttia ei koskaan peruta.
Mitä Revial synkronoi Salesforcen kanssa
Salesforce-ylläpitäjällesi ja sille, joka arvioi integraation tietojen käyttöoikeudet — jokainen Salesforce-kenttä, jonka Revial lukee, kaikki mitä se kirjoittaa takaisin ja tunnetut puutteet.
Yhdistetään Revial Microsoft Dynamics 365:een
Instanssin URL-osoitteen löytäminen, yhdistäminen Microsoft-kirjautumisella tai Entra-palvelutilillä sekä ylläpitäjän suostumus, jonka IT-ylläpitäjäsi saattaa joutua antamaan.