import { ok, badRequest, serverError } from "wix-http-functions";
import wixCrmBackend from "wix-crm-backend";
// CRM label keys — must match labels created in Wix CRM dashboard
const CRM_LABELS = {
base: "custom.lcg-lead",
resilience: "custom.lcg-resilience",
ai: "custom.lcg-ai-strategy",
};
// LinkedIn URL helpers
const liCompanyUrl = (slug) =>
slug ? `https://www.linkedin.com/company/${slug}` : "";
const liPersonUrl = (slug) =>
slug ? `https://www.linkedin.com/in/${slug}` : "";
// ─────────────────────────────────────────────────────────────────────────────
// POST /_functions/lcgLead
//
// Expected JSON payload from Clay / Zapier:
// {
// company: string (required)
// contactName: string
// contactTitle: string
// sector: string
// size: "Small" | "Mid Cap" | "Large Cap"
// hq: string
// linkedinUrl: string (full contact profile URL)
// liPersonSlug: string (e.g. "firstname-lastname")
// liCompanySlug: string (e.g. "company-name")
// email: string
// phone: string
// liSignals: string (comma-separated signal labels)
// score: number (0–100)
// focus: "resilience" | "ai" | "general"
// notes: string
// }
// ─────────────────────────────────────────────────────────────────────────────
export async function post_lcgLead(request) {
let body;
try {
body = await request.body.json();
} catch (e) {
return badRequest({ body: JSON.stringify({ error: "Invalid JSON body" }) });
}
const { company, contactName, contactTitle, sector, size, hq,
liPersonSlug, liCompanySlug, email, phone,
liSignals, score, focus, notes } = body;
if (!company) {
return badRequest({ body: JSON.stringify({ error: "company is required" }) });
}
// Build label list for CRM contact
const labelKeys = [CRM_LABELS.base];
if (focus === "resilience") labelKeys.push(CRM_LABELS.resilience);
if (focus === "ai") labelKeys.push(CRM_LABELS.ai);
// Build extended fields
const extendedFields = {
"custom.lcg-company": company,
"custom.lcg-title": contactTitle || "",
"custom.lcg-sector": sector || "",
"custom.lcg-size": size || "",
"custom.lcg-hq": hq || "",
"custom.lcg-li-person": liPersonUrl(liPersonSlug),
"custom.lcg-li-company": liCompanyUrl(liCompanySlug),
"custom.lcg-signals": liSignals || "",
"custom.lcg-score": String(score || 0),
"custom.lcg-focus": focus || "general",
"custom.lcg-notes": notes || "",
"custom.lcg-created": new Date().toISOString(),
};
try {
// Split name into first/last for CRM
const nameParts = (contactName || company).trim().split(" ");
const firstName = nameParts[0] || company;
const lastName = nameParts.slice(1).join(" ") || "";
// Create or update contact in Wix CRM
const contactInfo = {
name: { first: firstName, last: lastName },
emails: email ? [{ email, tag: "MAIN" }] : [],
phones: phone ? [{ phone, tag: "MAIN" }] : [],
labelKeys,
extendedFields,
};
await wixCrmBackend.contacts.createContact(contactInfo);
return ok({
body: JSON.stringify({
success: true,
message: `Lead created: ${contactName || company}`,
company,
score: score || 0,
}),
});
} catch (err) {
console.error("LCG CRM error:", err);
return serverError({
body: JSON.stringify({
error: "CRM write failed",
detail: err.message || String(err),
}),
});
}
}
top of page
LCG Cyber Security Workbook Cyber Security Workbook — Leadership Capital Group
Cyberkriminalitet koster den globale økonomi 10,5 billioner dollar årligt. Den gennemsnitlige pris for et databrud er 4,9 millioner dollar. Og trusselsniveauet mod danske virksomheder er det højeste, Center for Cybersikkerhed har registreret siden oprettelsen.
Cybersikkerhed er ikke et teknisk problem — det er et ledelses- og governanceproblem, og ansvaret lander på bestyrelsens bord.
Hvad du får:
Et strategisk framework der flytter cyber fra IT til bestyrelsesbordet Et risikoappetit-framework med tre definerede bestyrelsespositioner NIS2, DORA og GDPR compliance-oversigt med personlige ansvarsimplikationer En bestyrelses-niveau kriseorganisation og Day 0 krigsspilsscenarie En årlig cyber governance-kalender Virksomheder med en engageret bestyrelse er 3× mindre tilbøjelige til at lide et materielt brud og betaler 42% lavere forsikringspræmier.
📖 Läs hela den strategiska artikeln bottom of page