title: Engineering AI (tech support) summary: How customer-facing engineers use OtiumWork's tech-support flavor of Peter — drafts tuned for resolution, customer-meeting notes that mirror to Salesforce.
Engineering AI
OtiumWork's Engineering section is the tech-support flavor of the Peter AI assistant. Sales reps use Peter to nurture prospects through the Challenger sale; engineers use the same plumbing but with a different prompt scaffold — one that's tuned to resolve technical questions, reference internal docs, and stay clear of sales moves.
Eligibility: anyone with employee.persona_mode = 'engineering' (or admins). Set by an admin from the employee record.
Four surfaces
TPOC View (/engineering/tpoc-view)
The shared team dashboard for tech-point-of-contact assignments. Each engineer's accounts are grouped together with at-a-glance health columns:
- Last touch (resource-center activity of the first listed contact) plus a separate Real last touch column you fill in by hand for the actual customer touch — meeting, call, on-site. Both are colour-coded green (≤30d) / amber (31-89d) / red (≥90d).
- Next meeting is auto-joined from your Outlook calendar — any future external-attendee meeting whose attendee matches the row's POC email or domain.
- Tech support expires with days-to-expiration pill.
- Filter pills at the top: Tech support (Active / Expiring ≤90d / Expired) and SF match (No SF match / Loose match) for quick triage.
Per-row buttons:
- 🔧 — Set or clear the SF Account override. Use this when the auto-matcher gets the wrong Account (or none).
- ✎ — Edit any field. Salesperson / Tech support expiration / Comments push through to Salesforce. Real last touch / priority / POC name stay local.
- ✨ — AI-generated 5-bullet account briefing. Pulls row data + extra contacts + last 5 SF Tasks, asks Claude Haiku for a tight summary. Cached on the row; click Regenerate to refresh.
- 👥 — Manage all contacts at the account beyond the primary POC. SF Contact ID auto-resolves from email where possible. The number shows how many extra contacts are tracked.
- ✉ — Compose and send an email from your connected Outlook mailbox (saved to your Sent Items).
- 📝 — View the last 10 SF Tasks on the account and add a new "TPOC note" Task inline. Single source of truth: notes live in Salesforce, not in OtiumWork.
- 🗑 — Remove the TPOC row (doesn't touch Salesforce).
Customer meetings (/engineering/meetings)
Customer-attended meetings synced from your Outlook calendar — past 30 days and next 14 days. The list is split into Past (most recent first) and Upcoming (soonest first). Any meeting with at least one external attendee (non-@<company>.com address) shows up.
- Add notes per meeting in the inline text box. Saved locally so you keep a personal resolution log.
- Save & sync to SF mirrors the notes to Salesforce as a Task on the matched record:
- First we try exact email match → SF Lead/Contact (Task on Contact + Account).
- If no Contact exists, we fall back to domain match → SF Account (Task attaches to the Account directly). Common case: SoftInWay has the Account in SF but the specific engineer the customer sent isn't yet a Contact.
- Re-saving updates the same Task (idempotent via
work_event.sf_activity_id). - Hide filters personal reminders that aren't real customer meetings (e.g. "pick up the kids" with a single external attendee). Click "Show hidden" to recover.
Salesforce sync uses the company-level SF connection — engineers don't need to connect their own SF. All engineering meeting Tasks attribute to the shared tenant SF token.
Drafts (/engineering/drafts)
Peter watches your inbox and drafts tech-support replies in your voice (see Voice tuning below). Drafts land in your Outlook Drafts folder — you review, edit, send.
Connect once at the top of the page (separate OAuth from the calendar Outlook — needs Mail.ReadWrite + Mail.Send scopes so Peter can write drafts on your behalf).
- Autonomy controls under the disclosure:
- 0 — Drafts only. Peter never sends. Everything goes to your Drafts.
- 1 — Drafts + ask. Same as 0 today; reserved for an approval queue later.
- 2 — Auto-send routine replies. Peter sends low-stakes replies automatically; novel or higher-stakes stays in Drafts.
- Auto-draft toggle: turn off if you want the connection live (for sent-items scraping + command answering) but no inbound-reply drafts.
The drafts you see in Recent activity are status snapshots — drafted, auto-sent, skipped, not a lead. "View in Outlook" opens the actual draft for editing.
Engineering AI config (/engineering/config)
Two fields, both tune what Peter writes for you:
- Engineering knowledge base (company-wide) — product docs, FAQs, version gotchas, escalation paths. Visible to every engineering rep on the tenant. Lives in
sales_ai_company_config.engineering_kb. - Personal style notes — your voice, tone, escalation preferences. Same column as the sales-side per-rep style (
employee.personal_style_notes).
Voice tuning
A new engineer can generate a draft of their personal_style_notes from their last 6 months of customer-facing sent mail. Pattern (one-shot, admin-run):
- Connect Sales-AI Outlook.
- Admin runs
scripts/seed_<rep>_demo_drafts.py(or the voice-analysis script). Pulls ~30-50 external sent emails, asks Claude to extract tone / structural patterns / recurring phrases / tech-support reflexes, returns a ready-to-paste markdown block. - Paste into
/engineering/config→ Personal style notes → Save. - Optional: seed a handful of
[Demo]-prefixed drafts in the engineer's Outlook Drafts so they can preview what Peter-in-their-voice produces before a real inbound arrives.
Differences from sales Peter
| Sales (default) | Engineering | |
|---|---|---|
| System prompt | Challenger framework, qualifying questions, next-step propose | Resolve technical question, reference KB, escalate when needed |
| Calendar link | Push when prospect signals interest | Never push (no "grab time on my calendar") |
| Sales-shaped inbounds | Engage / qualify | Punt to Sales team gracefully |
| KB source | sales_ai_company_config.knowledge_base |
sales_ai_company_config.engineering_kb |
| Pricing / commercial | Engage (Sales rep follow-up) | Never quote; route to peter@ or Sales |
Operating notes
- The same desktop client / calendar sync / Outlook OAuth infrastructure powers both modes — no separate setup beyond connecting one extra Outlook scope for the drafts pipeline.
- Engineering meeting Tasks created in Salesforce attribute to the company SF user, not the individual engineer. Engineers are named in the Task description for traceability.
- The Peter poll runs every ~5 min; drafts for new inbound external emails appear within minutes.
SoftInWay Services API + VPN
Configure tenant access at Admin → Settings → SoftInWay Services API:
- API URL + key — what OtiumWork uses when making calls (e.g. for tech-support date sync).
- VPN tunnels — add one tunnel per network you need to reach (prod, dev, staging, …). Each row needs:
- Slug — short id used in the systemd unit name (e.g.
prod→wg-quick@wg-svc-prod) - Label — human-friendly name shown in the admin table
- Type — WireGuard or OpenVPN
- Config — full
.conf/.ovpnbody - Enabled — uncheck to keep the row but stop bringing it up
- Slug — short id used in the systemd unit name (e.g.
Saving a tunnel doesn't immediately apply it on the VPS — it's stored in the DB. The next bash deploy/auto-deploy.sh reconciles: it walks the table, writes configs to /etc/wireguard/ and /etc/openvpn/client/, and brings the matching systemd units up. Tunnels deleted in the UI are torn down on the next deploy. No manual SSH required.
If you need the tunnel up right now (without waiting for the next deploy), just run bash deploy/auto-deploy.sh from your local box — it's the same script that ships code, and it includes the VPN reconcile step at the end.
See something wrong or outdated in this article? Report it →