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 Geo-Political Risk Workbook The LCG Geo-Political Risk Workbook from Leadership Capital G is a strategic tool designed to help leaders anticipate and navigate complex global challenges. By integrating actionable insights with practical frameworks, this workbook empowers executives to make informed decisions in an ever-evolving geopolitical landscape. Tailored for leadership development, it aligns with Leadership Capital G’s commitment to unlocking leadership potential through cutting-edge resources. Equip your organization with the foresight and agility needed to thrive amid uncertainty using the LCG Geo-Political Risk Workbook. bottom of page