Concierge-Prozess bearbeiten: Account ← Zurück zur Übersicht 1. Identität Gruppenschlüssel (nur bei Neuanlage) Anzeigename Aktiv (wird beim Intent-Routing berücksichtigt) 2. Routing Auslöse-Schlagwörter (JSON-Array) ["account","accounts","customer","customers","client","clients","user","users","lead","leads","prospect","prospects","profile","signup","register","registration","konto","konten","kunde","kunden","klient","klienten","benutzer","benutzerkonto","profil","anmelden","registrieren","interessent","interessenten","kontakt","kontakte"] JSON-Array; Groß/Kleinschreibung egal. Keine Überschneidung mit anderen aktiven Gruppen. Erstellungsreihenfolge (Dienste) ["account"] JSON-Array der Service-Schlüssel in kanonischer Erstellungsreihenfolge. Pflichtfelder je Dienst (JSON-Objekt) {"account":["account_type","email","password","given_name","family_name","company"]} JSON-Objekt: Dienst → Liste von Pflichtfeldnamen (keine _id-Felder — Fremdschlüssel werden zur Planzeit aufgelöst). 3. Plan-Template (deklarativ) plan_template_json { "records": [ { "service": "account", "fields": { "account_type": { "from": "account_type", "default": "individual" }, "alias": { "from": "alias", "default": "" }, "given_name": { "from": "given_name", "default": "" }, "family_name": { "from": "family_name", "default": "" }, "company": { "from": "company", "default": "" }, "org_mode": { "from": "org_mode", "default": "none" }, "org_type": { "from": "org_type", "default": "business" }, "existing_business_alias": { "from": "existing_business_alias", "default": "" }, "email": { "from": "email", "default": "" }, "phone": { "from": "phone", "default": null }, "mobile": { "from": "mobile", "default": null }, "industry": { "from": "industry", "default": null }, "notes": { "from": "notes", "default": null }, "password": { "from": "password", "default": null }, "role": { "from": "role", "default": null }, "send_welcome_email": { "const": 1 }, "source": { "const": "concierge" }, "initiator_type": { "const": "admin" } } } ] } Erlaubte Operatoren: {"from": "feld"}, {"from": "feld", "default": wert}, {"const": wert}, {"ref": "dienst:index"}, {"derive": "slug", "from": "feld"}, {"cast": "float|int|string"}. Leer lassen = PHP-Fallback (nur für die eingebaute offering-Gruppe). 4. Feld-Schema (Formular-Felder) Live-Vorschau (aus den Feldern gerendert) Account type * individual business organization Given name * Family name * Company * Email * Password * Phone Mobile Org mode none existing new Org type business organization Existing business alias harald_engels_llc Role customer prospect Industry Notes Send welcome email Require verification fields_schema_json { "account": [ { "name": "account_type", "label_key": "txt_concierge_field_account_type", "type": "radio", "options": [ "individual", "business", "organization" ], "collect": "both", "required": true, "group": "account" }, { "name": "given_name", "label_key": "txt_concierge_field_given_name", "type": "text", "collect": "both", "required": true, "when": { "field": "account_type", "in": [ "individual" ] }, "group": "account" }, { "name": "family_name", "label_key": "txt_concierge_field_family_name", "type": "text", "collect": "both", "required": true, "when": { "field": "account_type", "in": [ "individual" ] }, "group": "account" }, { "name": "company", "label_key": "txt_concierge_field_company", "type": "text", "collect": "both", "required": true, "when": { "field": "account_type", "in": [ "business", "organization" ] }, "group": "account" }, { "name": "email", "label_key": "txt_concierge_field_email", "type": "email", "collect": "both", "required": true, "group": "account" }, { "name": "password", "label_key": "txt_concierge_field_password", "type": "password", "collect": "both", "required": true, "validation": { "min_length": 8 }, "group": "account" }, { "name": "phone", "label_key": "txt_concierge_field_phone", "type": "phone", "collect": "both", "group": "account" }, { "name": "mobile", "label_key": "txt_concierge_field_mobile", "type": "phone", "collect": "both", "group": "account" }, { "name": "org_mode", "label_key": "txt_concierge_field_org_mode", "type": "radio", "options": [ "none", "existing", "new" ], "collect": "both", "default": "none", "when": { "field": "account_type", "in": [ "individual" ] }, "group": "organization" }, { "name": "org_type", "label_key": "txt_concierge_field_org_type", "type": "radio", "options": [ "business", "organization" ], "collect": "both", "default": "business", "when": { "field": "org_mode", "eq": "new" }, "group": "organization" }, { "name": "existing_business_alias", "label_key": "txt_concierge_field_existing_biz", "type": "select", "options_provider": "business_accounts", "collect": "both", "when": { "field": "org_mode", "eq": "existing" }, "group": "organization" }, { "name": "role", "label_key": "txt_concierge_field_role", "type": "select", "options": [ "customer", "prospect" ], "collect": "both", "group": "profile" }, { "name": "industry", "label_key": "txt_concierge_field_industry", "type": "text", "collect": "form", "group": "profile" }, { "name": "notes", "label_key": "txt_concierge_field_notes", "type": "textarea", "collect": "form", "group": "settings" }, { "name": "send_welcome_email", "label_key": "txt_concierge_field_send_welcome", "type": "checkbox", "collect": "form", "default": true, "group": "settings" }, { "name": "require_verification", "label_key": "txt_concierge_field_require_verification", "type": "checkbox", "collect": "form", "default": false, "group": "settings" } ] } Feld-Deskriptoren je Dienst: name (eindeutig, == plan-template "from"), type (text|textarea|number|email|password|phone|select|radio|checkbox|hidden), label_key/label, collect (both|form|chat), required, options oder options_provider, when, validation, default. Chat-sichtbare Felder brauchen einen "from"-Schlüssel im Plan-Template. 5. Strategie (LLM-Prosa) Strategie-Dateiname Nur .md; wird unter config/concierge/strategies/ gespeichert. Markdown-Inhalt (8 erforderliche Abschnitte) Prosadokument für das Sprachmodell mit allen 8 Standard-Abschnitten (Role/Goal, Trigger Keywords, Group Members, Dependency Graph, Elicitable Fields, Completeness Gate, Validation Gate, Example Prompt). 6. Seed-Export (für andere Umgebungen) -- Concierge Customization Manager — exported group seed (idempotent). -- Apply once per project: -- sqlite3 /var/www/projects//dbase/sqlite/dbs/core.db -- < {project}/_ddl/concierge_group_account.sql INSERT INTO concierge_group (group_key, name, trigger_keywords_json, dependencies_json, order_json, required_fields_json, plan_template_json, strategy_file, active, fields_schema_json) VALUES ('account', 'Account', '["account","accounts","customer","customers","client","clients","user","users","lead","leads","prospect","prospects","profile","signup","register","registration","konto","konten","kunde","kunden","klient","klienten","benutzer","benutzerkonto","profil","anmelden","registrieren","interessent","interessenten","kontakt","kontakte"]', '[]', '["account"]', '{"account":["account_type","email","password","given_name","family_name","company"]}', '{"records":[{"service":"account","fields":{"account_type":{"from":"account_type","default":"individual"},"alias":{"from":"alias","default":""},"given_name":{"from":"given_name","default":""},"family_name":{"from":"family_name","default":""},"company":{"from":"company","default":""},"org_mode":{"from":"org_mode","default":"none"},"org_type":{"from":"org_type","default":"business"},"existing_business_alias":{"from":"existing_business_alias","default":""},"email":{"from":"email","default":""},"phone":{"from":"phone","default":null},"mobile":{"from":"mobile","default":null},"industry":{"from":"industry","default":null},"notes":{"from":"notes","default":null},"password":{"from":"password","default":null},"role":{"from":"role","default":null},"send_welcome_email":{"const":1},"source":{"const":"concierge"},"initiator_type":{"const":"admin"}}}]}', 'account.md', 0, '{"account":[{"name":"account_type","label_key":"txt_concierge_field_account_type","type":"radio","options":["individual","business","organization"],"collect":"both","required":true,"group":"account"},{"name":"given_name","label_key":"txt_concierge_field_given_name","type":"text","collect":"both","required":true,"when":{"field":"account_type","in":["individual"]},"group":"account"},{"name":"family_name","label_key":"txt_concierge_field_family_name","type":"text","collect":"both","required":true,"when":{"field":"account_type","in":["individual"]},"group":"account"},{"name":"company","label_key":"txt_concierge_field_company","type":"text","collect":"both","required":true,"when":{"field":"account_type","in":["business","organization"]},"group":"account"},{"name":"email","label_key":"txt_concierge_field_email","type":"email","collect":"both","required":true,"group":"account"},{"name":"password","label_key":"txt_concierge_field_password","type":"password","collect":"both","required":true,"validation":{"min_length":8},"group":"account"},{"name":"phone","label_key":"txt_concierge_field_phone","type":"phone","collect":"both","group":"account"},{"name":"mobile","label_key":"txt_concierge_field_mobile","type":"phone","collect":"both","group":"account"},{"name":"org_mode","label_key":"txt_concierge_field_org_mode","type":"radio","options":["none","existing","new"],"collect":"both","default":"none","when":{"field":"account_type","in":["individual"]},"group":"organization"},{"name":"org_type","label_key":"txt_concierge_field_org_type","type":"radio","options":["business","organization"],"collect":"both","default":"business","when":{"field":"org_mode","eq":"new"},"group":"organization"},{"name":"existing_business_alias","label_key":"txt_concierge_field_existing_biz","type":"select","options_provider":"business_accounts","collect":"both","when":{"field":"org_mode","eq":"existing"},"group":"organization"},{"name":"role","label_key":"txt_concierge_field_role","type":"select","options":["customer","prospect"],"collect":"both","group":"profile"},{"name":"industry","label_key":"txt_concierge_field_industry","type":"text","collect":"form","group":"profile"},{"name":"notes","label_key":"txt_concierge_field_notes","type":"textarea","collect":"form","group":"settings"},{"name":"send_welcome_email","label_key":"txt_concierge_field_send_welcome","type":"checkbox","collect":"form","default":true,"group":"settings"},{"name":"require_verification","label_key":"txt_concierge_field_require_verification","type":"checkbox","collect":"form","default":false,"group":"settings"}]}') ON CONFLICT(group_key) DO UPDATE SET name = excluded.name, trigger_keywords_json = excluded.trigger_keywords_json, dependencies_json = excluded.dependencies_json, order_json = excluded.order_json, required_fields_json = excluded.required_fields_json, plan_template_json = excluded.plan_template_json, strategy_file = excluded.strategy_file, active = excluded.active, fields_schema_json = excluded.fields_schema_json; Idempotentes SQL-Snippet zum Übertragen dieser Konfiguration auf Staging/Produktion. 7. Benötigte Code-Änderungen (manuell anzuwenden) Diese Änderungen sind nötig, damit der Prozess vollständig funktioniert. Sie werden nicht automatisch angewendet. Add a deterministic question phrasing for 'alias' packages/php-code/plugins/PlgMasterDataConcierge/workflows/conciergeSession/processors/ElicitProcessor.php (questionFor(), lines ~101-113) + 'alias' => 'Please provide the alias value?', Add a deterministic question phrasing for 'industry' packages/php-code/plugins/PlgMasterDataConcierge/workflows/conciergeSession/processors/ElicitProcessor.php (questionFor(), lines ~101-113) + 'industry' => 'Please provide the industry value?', Add a deterministic question phrasing for 'notes' packages/php-code/plugins/PlgMasterDataConcierge/workflows/conciergeSession/processors/ElicitProcessor.php (questionFor(), lines ~101-113) + 'notes' => 'Please provide the notes value?', Add a deterministic question phrasing for 'send_welcome_email' packages/php-code/plugins/PlgMasterDataConcierge/workflows/conciergeSession/processors/ElicitProcessor.php (questionFor(), lines ~101-113) + 'send_welcome_email' => 'Please provide the send_welcome_email value?', Add a deterministic question phrasing for 'source' packages/php-code/plugins/PlgMasterDataConcierge/workflows/conciergeSession/processors/ElicitProcessor.php (questionFor(), lines ~101-113) + 'source' => 'Please provide the source value?', Add a deterministic question phrasing for 'initiator_type' packages/php-code/plugins/PlgMasterDataConcierge/workflows/conciergeSession/processors/ElicitProcessor.php (questionFor(), lines ~101-113) + 'initiator_type' => 'Please provide the initiator_type value?', Speichern Abbrechen