OGuardAI
GuidesCase Studies

German Customer Support

How a support team uses ChatGPT to draft formal German replies without sending customer data to OpenAI

How a support team uses ChatGPT to draft formal German replies without sending customer data to OpenAI.


The Situation

A consumer electronics company runs a support team in Munich. Agents handle 400 tickets per day in German. Management wants to use ChatGPT to draft replies -- faster turnaround, consistent tone, fewer errors.

The pilot is killed in legal review. The problem: every customer email contains a name, email address, phone number, and often an order number. Sending these to OpenAI violates the company's data processing agreements and GDPR posture. The legal team's position is clear -- no customer PII may leave company infrastructure to reach a third-party model provider.

The engineering team tries naive masking: replace names with [NAME] and emails with [EMAIL]. ChatGPT generates responses like "Sehr geehrter [NAME]" -- grammatically wrong for female customers (should be "Sehr geehrte") and missing the formal title "Frau" entirely. The output is unusable without manual correction, which defeats the purpose.


The Solution

OGuardAI is deployed as a Docker container alongside the support tool backend. It sits between the agent's application and the OpenAI API. No changes to the support tool UI. One configuration change on the backend: the OpenAI base_url now points to OGuardAI's proxy.


Pipeline Overview

Step-by-Step: A Real Ticket

A customer named Julia Schneider writes in about a delayed refund.

Step 1: Customer Message Arrives

The support agent's tool receives the customer email:

Sehr geehrtes Support-Team,

mein Name ist Julia Schneider und meine E-Mail ist julia.schneider@firma.de.
Ich warte seit 4 Tagen auf die Rueckzahlung fuer Bestellung B-2026-4471.
Bitte informieren Sie mich ueber den Status.

Mit freundlichen Gruessen,
Julia Schneider

Step 2: OGuardAI Transforms the Message

The agent clicks "Draft Reply." The backend sends the message to OGuardAI.

curl -X POST http://localhost:3000/v1/transform \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Sehr geehrtes Support-Team,\n\nmein Name ist Julia Schneider und meine E-Mail ist julia.schneider@firma.de.\nIch warte seit 4 Tagen auf die Rueckzahlung fuer Bestellung B-2026-4471.\nBitte informieren Sie mich ueber den Status.\n\nMit freundlichen Gruessen,\nJulia Schneider",
    "policy": "german-support"
  }'

OGuardAI detects three entities and replaces them with semantic tokens:

Original ValueEntity TypeTokenMetadata
Julia Schneiderperson{{person:p_001}}gender: female, formality: formal, language: de
julia.schneider@firma.deemail{{email:e_001}}belongs_to: p_001
B-2026-4471order{{order:o_001}}--

The transform response contains the safe text that will go to OpenAI:

Sehr geehrtes Support-Team,

mein Name ist `{{person:p_001}}` und meine E-Mail ist `{{email:e_001}}`.
Ich warte seit 4 Tagen auf die Rueckzahlung fuer Bestellung `{{order:o_001}}`.
Bitte informieren Sie mich ueber den Status.

Mit freundlichen Gruessen,
`{{person:p_001}}`

The response also includes an encrypted session blob and entity context metadata.

Step 3: ChatGPT Generates a Reply

The proxy forwards the tokenized message to OpenAI with entity context. ChatGPT sees the tokens, knows {{person:p_001}} is female and formal German is required, and generates:

Sehr geehrte `{{person:p_001}}`,

vielen Dank fuer Ihre Nachricht. Es tut uns leid, dass Sie bereits seit
4 Tagen auf Ihre Rueckzahlung warten.

Wir haben Ihre Bestellung `{{order:o_001}}` ueberprueft und die Rueckzahlung
wurde heute angewiesen. Der Betrag sollte innerhalb von 3-5 Werktagen
auf Ihrem Konto eingehen.

Sollten Sie weitere Fragen haben, erreichen Sie uns jederzeit unter
dieser E-Mail-Adresse.

Mit freundlichen Gruessen,
Ihr Support-Team

OpenAI never saw "Julia Schneider," "julia.schneider@firma.de," or "B-2026-4471."

Step 4: OGuardAI Rehydrates the Response

The proxy intercepts ChatGPT's response and restores the original values using the session blob:

curl -X POST http://localhost:3000/v1/rehydrate \
  -H "Content-Type: application/json" \
  -d '{
    "output": "Sehr geehrte `{{person:p_001}}`,\n\nvielen Dank ...",
    "session_state": "<encrypted-blob-from-step-2>",
    "output_channel": "customer_email"
  }'

The german-support policy with formatted restore mode prepends the formal title. The final output:

Sehr geehrte Frau Julia Schneider,

vielen Dank fuer Ihre Nachricht. Es tut uns leid, dass Sie bereits seit
4 Tagen auf Ihre Rueckzahlung warten.

Wir haben Ihre Bestellung B-2026-4471 ueberprueft und die Rueckzahlung
wurde heute angewiesen. Der Betrag sollte innerhalb von 3-5 Werktagen
auf Ihrem Konto eingehen.

Sollten Sie weitere Fragen haben, erreichen Sie uns jederzeit unter
dieser E-Mail-Adresse.

Mit freundlichen Gruessen,
Ihr Support-Team

The agent sees the finished reply in their tool and sends it to the customer.


What OGuardAI Made Possible

Correct German formal address. ChatGPT wrote "Sehr geehrte" (feminine) instead of "Sehr geehrter" (masculine) because the entity context indicated female gender. The "Frau" title was added by OGuardAI's formatted restore mode -- not hallucinated by the model.

Zero PII sent to OpenAI. The name, email, and order number never left company infrastructure. OpenAI processed only semantic tokens and safe metadata.

No workflow changes for agents. The support tool UI is identical. Agents click "Draft Reply" as before. The protection is invisible.

Full audit trail. Every transform and rehydrate operation emits a structured audit event recording entity types, counts, policy applied, and processing duration -- never raw values. The compliance team can demonstrate to auditors exactly what data flowed where.

Regulatory confidence. The legal team approved the deployment because the trust boundary model ensures that the LLM provider does not receive personal data. The DPIA was straightforward: OGuardAI is a self-hosted processor with no sub-processors, no persistent PII storage, and automatic session expiry.