Modulkatalog/sales-outreach
Modul, Ekonomi och sälj

Sales-outreach

Prospects in, voice-validerat outreach ut. ICP-segmenterat.

11/11
Tester godkända
7
Block per bundle
Ed25519
Signering
Produktion
Status
Ladda ner exempel-bundleVerifiera bundleBoka demo
Vad modulen gör

sales-outreach

Vad modulen gör

sales-outreach tar emot en prospekt-record (firmografi plus intent-signaler) och en kampanj-profil och levererar tre saker i ett enda anrop: en ICP-fit-bedömning på skalan 0 till 100, ett personaliserat utkast till första-touch i rätt kanal och språk, samt en uppföljnings-kadens på fem touches över 30 dagar. Allt produceras med röst-profil-validering, cliche-skydd och ett kryptografiskt signerat audit-bundle som dokumenterar varje steg från input till färdigt utkast.

Modulen är byggd för svenska B2B-säljteam som kör outbound mot SME-segmentet. Den fungerar lika bra som batch-jobb mot en lista med 500 prospekts som live-widget när en SDR sitter och bygger en lista i Apollo eller HubSpot.

Hur den fungerar

sales-outreach ärver från BaseModule och kör en deterministisk pipeline. För varje körning skapas en audit-trail med sju block i ordning: input_received, context_loaded (outreach-policy injiceras), agent_call (modellanrop med röst-injicerad system-prompt, standard är claude-haiku-4-5), output_generated (rå modellrespons med längd och svarstid), voice_validated (skanning mot banlistor i röst-profilen), output_validated (modulens egen kvalitetsgate) och audit_sealed. Varje block länkas via prev_hash och signeras med Ed25519. Hela kedjan kan verifieras offline med verifyBundle() från lib/audit-chain.mjs.

ICP-scoring följer en explicit viktning: bransch-match mot kampanjens icp.industries ger 30 poäng, storleksmatch (anställdantal inom min_employees till max_employees) ger 25, buying-signals (recent_hires, funding, press, intent-score, triggers) ger 25 och kontaktsenioritet ger upp till 20 (exec 20, senior 15, mid 8, junior 2). Summan kappas till 0-100. Score under 50 ger automatiskt rekommendation att inte outreacha.

Blockerings-villkor körs alltid före utkast-genereringen. Om kontakten eller företaget matchar do_not_contact_list (email-likhet eller domain-match), eller om signalerna indikerar att företaget är en churned customer eller direkt konkurrent, sätts OM_BLOCKERAT_AVBRYT: ja och utkastet hoppas över. Modellen returnerar då (avbrutet) för utkast och kadens-rader, men ICP-score, motivering och intern notering levereras fortfarande.

Input-schema

Modulen kräver tre toppnivå-objekt och två arrays. Företaget kräver name, domain, industry, employee_count och country. Org-nummer och estimerad omsättning är valfria. Kontakten kräver name, title, email (RFC-likt validerat) och seniority (junior/mid/senior/exec). LinkedIn och avdelning är valfria. Signaler kräver recent_hires som array (kan vara tom), recent_press_mentions som tal, intent_score_0_100 mellan 0 och 100. Senaste funding och senaste engagemang är valfria.

Kampanjen kräver campaign_id, ett icp-objekt med alla fem fält, ett sender-objekt med name, email och voice_profile_id (samt title och linkedin för signatur), och ett offer-objekt med headline, value_prop och desired_outcome. channel_preferences måste vara en icke-tom array av godkända kanaler. do_not_contact_list är valfri. language måste vara sv eller en.

Output-format

Utdata är strikt strukturerad text som parsas till ett typat objekt. Sektioner i ordning: ICP_FIT_SCORE, ICP_FIT_MOTIVERING, BLOCKERANDE_PROBLEM, OM_BLOCKERAT_AVBRYT, REKOMMENDERAD_KANAL, KANALMOTIVERING, REKOMMENDERAD_TIMING, FORSTA_TOUCH_UTKAST (med tre under-sektioner: AMNE_RAD, KROPP, SIGNATUR), REFERENCE_TILL_SIGNAL, UPPFOLJNINGS_KADANS (exakt fem rader, DAG 1 till DAG 30), KVALITETS_GATES_AVKLARADE (fem punkter), ESKALERING_TILL_AE och INTERN_NOTERING.

Parsat resultat blir tillgängligt via result.validateCheck.parsed och innehåller fält som icpFitScore (number), recommendedChannel (string), subject och body (strings), cadence (array av fem strängar), qualityGates (array), escalateToAe (boolean) och internalNote (string).

Cliche-skydd

Modulen kör en explicit cliche-detektor på subject plus body som auto-rejectar 15 vanliga AI-tells. Exempel på blockerade fraser: just bumped into, bara kollade upp dig, quick question for you, snabb fraga till dig, curious if you, nyfiken pa om du, hope this finds you well, hoppas du har det bra, 20 min pa din kalender, 20 min on your cal, love to pick your brain, let me know your thoughts. Träff ger violation av typen forbidden_cliche med fras-citat och bundlet flaggas som violations_logged. Detektorn är substring-baserad och case-insensitive.

I första-touch-kroppen krävs att minst en konkret signal används som personalization-anchor och att den anges separat i REFERENCE_TILL_SIGNAL. Det här är skillnaden mellan en mall som råkar nämna ett företag och faktisk personalisering, och det går att verifiera i efterhand mot prospekt-signalerna.

Integrationsguide

Modulen är ett standard ES-modul med default-export.

import SalesOutreach from "kapaciti-modules/modules/sales-outreach.mjs";

const agent = new SalesOutreach();
const result = await agent.run(prospectInput, { writeBundle: "./bundles/prs-001.json" });

if (result.error === "usage_cap") {
  return; // retry senare
}

const { parsed } = result.validateCheck;
console.log(parsed.icpFitScore);        // 78
console.log(parsed.recommendedChannel); // "email"
console.log(parsed.subject);            // "Compliance-spar efter ..."
console.log(parsed.cadence);            // 5 strings

För batch-körning rekommenderas concurrency 4 till 8 mot Claude-subscription-cap. Audit-bundles bör skrivas till objekt-store (S3, Supabase storage) tillsammans med prospekt-id som key för senare verifikation.

Voice-profile

Standard är kapaciti (saklig svensk B2B-ton). Voice-profilen byts vid instansiering eller per körning via campaign.sender.voice_profile_id. Förbjudna ord i kapaciti-profilen inkluderar ensure, crucial, journey, delve, dive, navigate, sammanfattningsvis och TL;DR. Tankstreck blockeras separat (komma eller punkt används istället). Profil läggs till i lib/voice-profile.mjs för nya brands.

Test-coverage

Test-suiten i tests/sales-outreach.test.mjs täcker tolv testfall: validateInput avvisar saknad prospect.company, ogiltig senioritet och ogiltigt språk; validateInput accepterar ett giltigt prospekt; buildPrompt inkluderar ICP, sender, offer och signaler; validateOutput parsar välformad respons; parsern hanterar trasig input; cliche-detektorn fångar förbjudna öppningar; saknad kadens flaggas; för långt subject flaggas; end-to-end-körning producerar signerat bundle som verifierar och som bryts vid tamper. Testerna 7-9 anropar claude-CLI och tar omkring 50 sekunder.

Begränsningar

Modulen skickar inte mejl. Integration mot mail-gateway (Postmark, Resend, SendGrid) sker via wrapper. Modulen läser inte CRM, den behandlar varje prospekt isolerat och förutsätter att signaler och do-not-contact-listan kommer in i input. Cliche-detektorn är substring-baserad och fångar inte semantiska variationer som inte finns i listan. ICP-scoring är en deterministisk funktion av input, inte en lärd modell. Modulen verifierar inte att kontaktens email faktiskt är leverbar (bouncereturer hanteras downstream).

Roadmap

För v1.1 planeras semantisk cliche-detektor baserad på embeddings (fångar varianter som inte finns i listan), CRM-integration för att läsa konversationshistorik före utkast, multi-touch-orkestrering där modulen tar över hela kadensen, A/B-test-hooks på subject-rader, samt embeddable widget för att stödja SDR live i sin outreach-app. Senioritets-vägning ska bli konfigurerbar per kampanj utan instansierings-omstart.

Prova live

Kör sales-outreach i webbläsaren.

Justera input-objektet eller använd starter-värdena. När du trycker på Kör modulen anropas samma agent som i produktion. Audit-kedjan byggs framför dig och hela sessionen signeras med Ed25519 i samma format som exempel-bundlen ovan.

Input (sales-outreach schema)

JSON-payload som matchar modulens validateInput. Starter-värdena kommer från en riktig produktionskörning. Max 12 000 tecken.

Tecken: 1 914 / 12 000
Audit-kedja, live

Audit-kedjan visas här när scenariot körs

● Nyhetsbrev

EU AI Act, sandbox-status och svensk AI-infrastruktur.

En sammanfattning ungefär en gång i månaden. Vad förändrats i regelverket, vilka pilot-cases vi sett och vilka vendor-shifts som påverkar svenska bolag. Skickas av oss, inte av en automation som låtsas vara oss.

Uppgifterna används endast för nyhetsbrevet. Inga utskick utöver det utan separat samtycke. Avregistrera när som helst via länk i mailet.