Dette er en kort historie om, hvordan SMOC.AI skiftede til Cloudflare for at bygge en personlig, automatiseret salgsagent-bot med lav latenstid og høj skalerbarhed.
SMOC.AIs salgsagent-bot spiller en vigtig rolle i vores kunders leadgenereringsstrategi. Hver måned gennemfører den hundredtusindvis af samtaler med besøgende på kundernes hjemmesider.

Botten stiller en række spørgsmål til den besøgende som en quiz. Den besøgende vælger mellem flere svarmuligheder ved at trykke på knapper. Det næste spørgsmål, botten stiller, afhænger af de tidligere svar. I slutningen af samtalen bliver den besøgende ofte bedt om at efterlade sine kontaktoplysninger for et personligt opfølgningstilbud.
Disse samtaler øger leadgenerering for vores kunder med 200-500 %.
Vores kunder elsker det, og glade kunder altid beder om mere. Nogle af vores mest populære funktionsønsker er:
- Kan I tilpasse samtalen til hver besøgende for at øge leadgenerering endnu mere?
- Vi vil gerne nå målgrupper uden for nettet (Discord / SnapChat osv.). Kan I få det til at virke der?
- Vi er i Asien – hvorfor tager det så lang tid at indlæse botten?
For 6 måneder siden kunne vi ikke opfylde nogen af disse funktionsønsker på grund af, hvordan vores system var bygget – som en traditionel 3-lags arkitektur med en Single Page Application (SPA) i JavaScript og et par dedikerede servere.

- Rails-webappen leverede HTML, CSS, SPA-kode og et flow-JSON til browseren
- SPA'en kommunikerede med en API-server over HTTP
- API-serveren modtog svarene og skrev dem til Postgres
- Postgres-databasen gemte alle svarene
SPA'en indlæste en rettet graf over alle mulige bot-beskeder (et flow) i hukommelsen ved samtalens start. Hver gang en besøgende trykkede på en knap, fulgte SPA'en en kant i grafen til det næste spørgsmål og viste det på skærmen.
Alle beslutninger om, hvad botten skulle sige næste, blev truffet i SPA'en, der kørte i browseren.

Bottens (ærte-)hjerne var bogstaveligt talt i browseren.
For at give hver besøgende en personlig oplevelse besluttede vi at bygge en maskinlæringsmodel til at afgøre, hvilken kant der var bedst at følge næste gang. Vi skulle gøre hjernen klogere og større. Det ville være meget nemmere at gennemføre, hvis vi flyttede samtalelogikken fra browseren til serveren.
Med al samtalelogikken på serveren ville det også være muligt at integrere vores samtalemotor med andre platforme som Discord og SnapChat.
Med samtalelogikken, der kører på en server, ville vi skulle skubbe bot-beskeder til klientenhederne. På nettet ville dette blive gjort via en WebSocket.
Vi skulle håndtere mindst 10.000 samtidige WebSockets til dagligt, og over 100.000 når vores kunder kører store reklamekampagner, der giver spidsbelastninger.

Denne form for samtidig I/O ville ikke fungere godt på de dedikerede EC2-servere, vi havde. Det ville blive én varm hjerne! Eller måske ti, men stadig varme. Vi havde brug for en arkitektur, der kunne skalere hurtigere og til lavere omkostninger.
Vi vidste allerede, at vores nuværende arkitektur kunne føre til skrivekø i Postgres-databasen, så vi ønskede også at undgå det.
Vores nye arkitektur skulle kunne håndtere massive belastninger, og den skulle også være tilgængelig globalt, så besøgende ikke skulle vente mere end 100 ms på, at botten blev indlæst. Med andre ord skulle den leve på kanten.
Da vi allerede brugte AWS, overvejede vi først at bruge lambdas. Lambdas er gode, men de understøtter ikke WebSocket-forbindelser, medmindre du hopper gennem ringe.
Vi besluttede at kigge nærmere på CloudFlare Durable Objects og indså hurtigt, at det ville være det perfekte match til vores behov. Hvis du ikke kender Durable Objects, kan du tænke på dem som langvarige lambdas med tilstand og en dedikeret WebSocket.
Det tog to ingeniører et par måneder at omskrive bot-motoren til denne arkitektur. Som en del af dette arbejde begyndte vi også at bruge Cloudflare KV til at gemme samtaledata i stedet for Postgres.

Hver gang en ny besøgende starter en samtale, opretter Cloudflare straks et nyt Durable Object til at håndtere samtalen. Vi behøver ikke længere bekymre os om skalering.
Indtil videre har Cloudflare-stakken været fantastisk at arbejde med. Den skalerer ikke bare ekstremt godt, den har også en fremragende udvikleroplevelse (DX), så vi kan bruge mere tid på at udvikle software og mindre tid på at administrere infrastruktur.
Vi har et sæt af hundredvis af automatiserede tests, der kører på omkring 2 sekunder, så det at iterere og eksperimentere er ekstremt hurtigt.
Med denne arkitektur på plads er vi godt positioneret til at begynde at bygge vores nye maskinlæringsmodel, som vi vil koble til alle disse små hjerner. Den vil bruge bayesiansk inferens til at vælge kanter i vores flowdiagrammer. Jeg fortæller mere om det i et kommende blogindlæg.
SMOC.AI ansætter. Vi leder efter fullstack-udviklere med ML-erfaring. Hvis du er interesseret i at høre mere, så send en e-mail til [email protected].