Dieses Dokument beschreibt den minimalen, aber vollstaendigen Integrations-Workflow zwischen Leadharvester und QC Text Builder.
Ziel:
http://localhost:8080GET /api/templatesGET /api/templates/{id}POST /api/drafts/intakeLeadharvester ruft zuerst die verfuegbaren Templates ab:
Request
GET /api/templates
Beispiel lokal
http://localhost:8080/api/templates
Response-Struktur
{
"count": 1,
"templates": [
{
"id": 1408367,
"name": "Mono QC 1- DE",
"description": "",
"locale": "DE",
"thumbnailUrl": "https://rai.monosolutions.com//thumbnails/01408367/1408367.jpeg",
"templatePreviewUrl": "https://u1408367.tool-apdialog.at",
"type": "ai",
"paletteReady": true,
"rawTemplateJson": {},
"isAiTemplate": true,
"isOnboarded": true,
"manifestStatus": "reviewed",
"lastDiscoveredAt": "2026-03-27T10:00:00Z"
}
]
}
idnamethumbnailUrltemplatePreviewUrlthumbnailUrl: kleine Vorschau fuer Template-KartentemplatePreviewUrl: Vollansicht / Live-Preview des Templatesid: wird spaeter als templateId an den Draft-Intake uebergebenLeadharvester sollte die Template-Auswahl mindestens so darstellen:
{
"templateId": 1408367,
"label": "Mono QC 1- DE",
"thumbnail": "https://rai.monosolutions.com//thumbnails/01408367/1408367.jpeg",
"previewUrl": "https://u1408367.tool-apdialog.at"
}
Nach der Auswahl muss Leadharvester mindestens diese Werte intern weitertragen:
{
"selectedTemplateId": 1408367,
"selectedTemplateName": "Mono QC 1- DE"
}
Leadharvester sammelt anschliessend die Nutzdaten fuer den Draft.
globalData){
"companyName": "Dönerbude",
"username": "jansvabenik",
"email": "jan.svabenik@apdialog.com",
"phone": "+41 79 123 45 67",
"businessType": "Imbiss",
"descriptionShort": "Frische Döner und schnelle Mittagsgerichte.",
"descriptionLong": "Dönerbude bietet frisch zubereitete Spezialitäten, schnelle Bedienung und unkomplizierten Genuss für den Alltag.",
"mission": "Frisches, gutes Essen schnell und unkompliziert anbieten.",
"addressLine1": "Bahnhofstrasse 12",
"addressCity": "Zürich",
"addressZIP": "8001",
"addressCountry": "Schweiz"
}
{
"websiteUrl": "https://example.com",
"websiteSummary": "Frische Döner und schnelle Mittagsgerichte für Kundschaft in der Schweiz.",
"businessType": "Imbiss",
"localeStyle": "de-CH",
"marketStyle": "Schweiz",
"addressMode": "du",
"contentTone": "locker",
"promptInstructions": "Kurz, appetitlich und glaubwürdig formulieren."
}
Wenn Template + Stammdaten + Kontext feststehen, gibt Leadharvester die Daten per Intake zurueck an QC Text Builder.
POST /api/drafts/intake
Content-Type: application/json
{
"draftId": "string, optional",
"source": "string, required",
"requestName": "string, required",
"templateId": 0,
"globalData": {},
"notes": "string, optional",
"websiteUrl": "string, optional",
"websiteSummary": "string, optional",
"businessType": "string, optional",
"localeStyle": "string, optional",
"marketStyle": "string, optional",
"addressMode": "string, optional",
"contentTone": "string, optional",
"promptInstructions": "string, optional",
"styleProfile": {
"localeStyle": "string, optional",
"marketStyle": "string, optional",
"addressMode": "string, optional",
"contentTone": "string, optional",
"promptInstructions": "string, optional"
}
}
{
"source": "leadharvester",
"requestName": "Dönerbude Intake 2026-03-27",
"templateId": 1408367,
"globalData": {
"companyName": "Dönerbude",
"username": "jansvabenik",
"email": "jan.svabenik@apdialog.com",
"phone": "+41 79 123 45 67",
"businessType": "Imbiss",
"descriptionShort": "Frische Döner und schnelle Mittagsgerichte.",
"descriptionLong": "Dönerbude bietet frisch zubereitete Spezialitäten, schnelle Bedienung und unkomplizierten Genuss für den Alltag.",
"mission": "Frisches, gutes Essen schnell und unkompliziert anbieten.",
"addressLine1": "Bahnhofstrasse 12",
"addressCity": "Zürich",
"addressZIP": "8001",
"addressCountry": "Schweiz"
},
"notes": "Import aus Leadharvester",
"websiteUrl": "https://example.com",
"websiteSummary": "Frische Döner und schnelle Mittagsgerichte für Kundschaft in der Schweiz.",
"businessType": "Imbiss",
"localeStyle": "de-CH",
"marketStyle": "Schweiz",
"addressMode": "du",
"contentTone": "locker",
"promptInstructions": "Kurz, appetitlich und glaubwürdig formulieren.",
"styleProfile": {
"localeStyle": "de-CH",
"marketStyle": "Schweiz",
"addressMode": "du",
"contentTone": "locker",
"promptInstructions": "Kurz, appetitlich und glaubwürdig formulieren."
}
}
QC Text Builder macht beim Intake aktuell Folgendes:
draftId fehlt oder leer ist, wird ein neuer Draft erzeugt.draftId gesetzt ist, wird ein bestehender Draft aktualisiert.draft gespeichert.fieldValues werden beim Intake leer initialisiert.globalData fehlt, wird automatisch {} verwendet.businessType gesetzt ist und globalData.businessType leer ist, wird businessType in globalData gespiegelt.styleProfile gesetzt ist, wird dieses bevorzugt; fehlende Felder darin werden aus den flachen Stilfeldern ergaenzt.Der Draft-Intake liefert den gespeicherten Draft zurueck.
{
"id": "1774540501012861000",
"templateId": 1408367,
"source": "leadharvester",
"requestName": "Dönerbude Intake 2026-03-27",
"status": "draft",
"createdAt": "2026-03-27T12:00:00Z",
"updatedAt": "2026-03-27T12:00:00Z"
}
Mindestens:
{
"qcDraftId": "1774540501012861000",
"qcTemplateId": 1408367,
"qcDraftStatus": "draft"
}
Diese qcDraftId ist wichtig, damit Leadharvester denselben Draft spaeter erneut aktualisieren oder weiterverfolgen kann.
{
"steps": [
"GET /api/templates",
"Template in Leadharvester anzeigen (name + thumbnailUrl + templatePreviewUrl)",
"templateId aus der Auswahl merken",
"Lead-/Stammdaten in Leadharvester sammeln",
"POST /api/drafts/intake mit templateId + globalData + Kontext",
"draft id aus der Response speichern"
]
}
templateId immer aus der aktuellen Template-Liste verwenden.thumbnailUrl ist fuer kleine Vorschauen gedacht.templatePreviewUrl ist fuer die Vollansicht / Preview gedacht.draftId speichern.draftId sollte bei spaeteren Updates wiederverwendet werden.Templates holen
GET /api/templatesDraft anlegen/aktualisieren
POST /api/drafts/intakePflicht fuer Leadharvester
templateId speicherndraftId aus Response speichern