Documentation
Operational guide for OKR and KPI goal governance, differentiating KRs from KPIs, staff quota planning, 2-way Kanban linkage, zero-API inbound email forwarding, custom domain DNS, and counter dispatch.
Goal governance
In daily hospitality, retail, studio, and tour operations, goal systems fail when teams confuse directional Objectives (O), breakthrough Key Results (KR), ongoing operational metrics (KPI), and daily tasks. DING OS separates all four layers and wires them directly to live revenue, bookings, staff attribution, and Kanban boards.
1. Goal hierarchy matrix
Enterprise standard| Layer | Recommended limit | Core question | Measurement | Venue example |
|---|---|---|---|---|
| OKR · Objective Strategic Objective | 3 - 5 per quarter Per venue or department | Where do we want to break through this quarter? | Qualitative directional goal for a quarter or year. Progress (0-100%) rolls up automatically from its child Key Results. | Become the premier corporate banquet and wellness destination in Q4. |
| KR · Key Result Key Result | 3 - 5 KRs per Objective Never exceed 5 KRs | How do we measure that we achieved the Objective? | Quantitative milestone (from baseline X to target Y) nested under an Objective. Measures net-new change or transformation. | Grow B2B banquet revenue from $15,000 to $40,000; increase repeat member rate from 18% to 35%. |
| KPI · Metric Operational KPI | 3 - 5 KPIs per month Per team or staff member | Are daily and monthly operations running at standard? | Standalone quantitative metric tracked month after month to maintain revenue quotas, occupancy, and service standards. | Monthly revenue quota of $50,000; room occupancy above 75%; order void rate under 2%. |
| Task · Kanban Execution Task | Unlimited Linked to 3 - 5 goals | What concrete action must we execute today to move the numbers? | Actionable card on the Kanban board with an assignee, due date, and workflow state (To Do ➔ In Progress ➔ Review ➔ Done). | Send year-end banquet packages to 30 corporate partners; call 50 VIP members with birthday vouchers. |
Why teams confuse KRs with KPIs
Both KRs and KPIs are written as numbers ($40,000, 300 bookings, 85%). To tell them apart in 3 seconds, picture driving a car: a KPI is the dashboard gauge (engine temperature, fuel level, steady cruising speed) that must stay healthy every single month. An OKR is the GPS route to a new destination, and its KRs are the mile markers proving you are getting closer.
When an operational KPI becomes a KR
If a metric is stable and you simply assign monthly targets to maintain rhythm (for example, $20,000 monthly bar revenue), create it as a standalone KPI. However, if a KPI drops into trouble or you launch a campaign to double it next quarter (growing bar revenue from $20,000 to $45,000 by launching live acoustic nights), that metric becomes a Key Result (KR) nested inside a strategic Objective.
Anti-gaming 3-5 focus limit
The most common governance failure is creating 10-15 goals at once or stuffing daily tasks into KRs to inflate completion scores. Limit each quarter to 3-5 Objectives with 3-5 outcome-based KRs each, and keep each staff member focused on 3-5 monthly KPIs tied to verified settled orders (booking.owner). Move day-to-day activities onto the Kanban board.
2. Four-step goal rollout
In Tasks ➔ Goals, click Create Goal. Selecting OKR · Strategic Objective hides raw target fields and opens an inline Key Results (KR) builder so you can define 2-4 measurable KRs in one pass. Selecting KPI · Operational Metric exposes direct Baseline, Target, and Unit inputs.
Bind each KR or KPI to one of five sources: Revenue (auto-summed from settled folios), Bookings (completed orders and reservations), Attribution (real-time staff performance via booking.owner), Completed Tasks (auto-counted from linked Kanban cards in Done), or Manual check-in.
Click Quota Planner in the toolbar, enter the total venue target (for example, $60,000 monthly revenue), select participating staff members, and choose equal or weighted allocation. DING OS generates child KPIs for every staff member and tracks their live progress.
DING OS compares actual progress against elapsed time in the period to flag Behind or At-Risk goals. Open the goal Check-in drawer and click + Add task to Board to dispatch an execution card straight to the Kanban board with a linked goal badge.
System architecture
DING OS is a multi-tenant commerce, booking, and counter dispatch operating system. It operates standalone or sits at the operational edge alongside your existing accounting or property management ledger, standardizing unstructured inbound messages, on-premise QR transactions, and open-tab reconciliations into a single real-time queue.
| Subsystem | Endpoint | Operational specification |
|---|---|---|
| Inbound MIME parser | POST /v1/email/ingest/ | Terminates inbound SMTP traffic addressed to [slug]@getding.io at the Cloudflare edge worker, extracts structured entities (customer, line items, schedule, reference, total), and enforces a 30-day SHA-256 idempotency window. |
| Edge hostname proxy | proxy.getding.io | Maps custom subdomains (ding.yourbrand.com) and wildcard handles ([slug].getding.io) to isolated tenant containers with automated DV TLS 1.3 certificate lifecycle management. |
| Counter dispatch bus | wss://api.getding.io/v1/ws | Streams ticket state transitions (pending, confirmed, ready, completed) across all paired counter terminals with dual-modality visual and 880Hz acoustic alerting. |
| Multi-mode folio engine | POST /v1/counter/ | Executes instant checkout, time-slot unit reservations, and open-tab post-audit reconciliation (reconcile_order) with mandatory staff attribution (booking.owner). |
Legacy software coexistence
DING OS can operate standalone or alongside existing back-office accounting software without modifying your chart of accounts or fiscal tax ledger.
Inbound email order and booking extraction, 14-locale QR storefront, conversational quote capture (capture_inquiry), open-tab quantity auditing, and real-time counter dispatch.
Statutory VAT e-invoicing, general ledger posting, end-of-day fiscal register closure, room key-card encoding, and warehouse stock depletion via CSV or webhook sync.
Email ingestion
Forward order notifications, OTA booking confirmations, and B2B quote requests from your mail server to your workspace ingestion address with zero API setup. Inbound MIME payloads are parsed directly into your dispatch queue without polling IMAP mailboxes or storing mail server passwords.
Configure your mail server forwarding rule with "Keep a copy in the inbox" enabled. Your corporate mailboxes ([email protected], [email protected], [email protected]) retain every original message as the primary archive while DING OS processes a forwarded copy in parallel.
- Open Gmail Settings ➔ See all settings ➔
Forwarding and POP/IMAP. - Select Add a forwarding address and enter
[slug]@getding.io. - Google sends a verification message to your workspace address. Open the DING OS Inbox view to retrieve the confirmation link and approve forwarding.
- Open Filters and Blocked Addresses ➔ Create a new filter and set the Has the words query to
subject:(Order OR Quote OR Booking OR Reservation OR Confirmation). - Enable Forward it to
[slug]@getding.io, leave Skip the Inbox unchecked so your primary mailbox retains the original copy, and save the filter.
Outbound notifications from api.getding.io include X-Ding-Generated: true and Auto-Submitted: auto-generated. The SMTP worker drops any message carrying these headers.
Inbound tickets are indexed by sha256(organization_id + ":" + reference) for 30 days. Duplicate deliveries update status rather than creating duplicate tickets.
Messages with an SMTP Return-Path or From matching *@getding.io or @trip.express are rejected prior to AI parsing.
Channel integrations
Step-by-step configuration playbooks for Zalo Official Account (ZBS and ZNS), Telegram Bot, WhatsApp Cloud API, Messenger, Open Banking (VietQR, SePay), Stripe, PayPal, and OTA channels.
Stage 1: Zalo app activation
developers.zalo.me- Open developers.zalo.me, select your application, and switch the top-right status toggle to Active so Zalo stops returning error
-209. - In Domain verification, enter
workspace.getding.io, copy thezalo-platform-site-verificationmeta tag code, paste it in Workspace ➔ Tracking, and confirm verification. - In Products ➔ Official Account API ➔ General settings, request permissions for OA profile management and user message management.
- In Webhooks, set the callback URL to and enable
user_send_text,user_send_image, andoa_send_textevents.
Stage 2: OAuth token renewal
API Explorer- Open
developers.zalo.me/tools/explorer, select your app, choose OA Access Token, and authorize your Official Account. - Copy the generated OA Access Token (valid for 25 hours) and Refresh Token (valid for 3 months), plus your App ID and App Secret from application settings.
- Paste all four values into Integrations ➔ Zalo OA ➔ Connection. DING OS automatically exchanges the refresh token in the background every 25 hours so delivery never stops.
Stage 3: Business account linking
business.zalo.me- If the application dropdown in Zalo ZBS template creation is empty, open business.zalo.me ➔ select your ZCA Account ➔ Settings ➔ Applications ➔ click Link application and enter your Zalo App ID.
- Two-way OA chat API note (Error -224): Zalo requires an active 1-month trial or paid OA package (
zalo.cloud/oa/pricing) to send outbound replies viaopenapi.zalo.me/v3.0/oa/message/cs. While on the Free tier, DING OS automatically copies the AI draft to your clipboard and opensoa.zalo.me/chatv2in 1 click.
Stage 4: ZNS template parameters
account.zalo.cloudZalo ZNS requires two horizontal transparent PNG logos (Light and Dark mode) sized at 400 x 96 px (50:12 aspect ratio, centered horizontally and vertically). Create four templates from the Zalo library (Order, Transfer, Rating, Voucher) and map parameters using the reference table below:
| Template | Parameter key | Zalo technical type | Sample value |
|---|---|---|---|
| Order, Rating | order_code | Mã số (30) | |
| Order (CTA link) | order_id | URL (200) | |
| Order | phone_number | Thông tin liên hệ (50) | |
| Order, Transfer | price | Số lượng / Số tiền (20) | |
| Order | status | Trạng thái giao dịch (30) | |
| Order | date | Thời gian (20) | |
| Order | name | Tên khách hàng (30) | |
| Transfer, Rating, Voucher | customer_name | Tên khách hàng (30) | |
| Transfer | contract_number | Mã số (30) | |
| Transfer | transfer_amount | Tiền tệ (VNĐ) (12) | |
| Transfer | bank_transfer_note | Bank Transfer Note (90) | |
| Rating | order_date | Thời gian (20) | |
| Voucher | customer_id | Mã số (30) | |
| Voucher | voucher_code | Mã số (30) | |
| Voucher | start_date | Thời gian (20) | |
| Voucher | expire | Thời gian (20) |
Gửi tự động xác nhận mã đơn, tổng tiền và trạng thái ngay khi khách đặt dịch vụ thành công. Không chứa quảng cáo.Custom domain DNS
Publish these two DNS records at your registrar (Cloudflare, Route 53, GoDaddy) to route ding.yourbrand.com through the edge proxy.
| Type | Host | Required value | TTL | Status |
|---|---|---|---|---|
| CNAME | Auto | Pending | ||
| TXT | Auto | Pending |
Counter dispatch
Counter terminals maintain a persistent WebSocket session (wss://api.getding.io/v1/ws) scoped to your workspace. When a new order, reservation, or quote inquiry arrives, the terminal triggers dual-modality alerting: an 880Hz Web Audio oscillator chime paired with a persistent visual dispatch banner.
Grant site sound permission on dedicated counter tablets so background tabs synthesize the 880Hz A5 and 1318.5Hz E6 chime without gesture prompts, then test speaker gain below.
Every inbound ticket renders a persistent visual notification banner displaying the unit reference, customer name, service category, and required action, operating reliably even when device speakers are muted.
wss://api.getding.io/v1/wsUnit binding
Physical and virtual service points are modeled using the canonical Unit entity across all 13 categories: spaces, realty, events, appointments, travel, mobility, retail, sports, spa, amenities, dining, drinks, and takeaway. QR spot generation is unlimited across all plans.
Each QR standee encodes the target unit identifier (UNIT #04 or REF #12). Once scanned, the storefront locks the unit badge in read-only mode so guests cannot manually alter their table, court, or room number.
Units configured in open-tab mode allow continuous item additions throughout a session. Before closing the bill, staff run reconcile_order to verify actual consumed quantities and credit unconsumed returns.
Attribution
Every order, walk-in reservation, and reconciled tab records an immutable creator identifier in booking.owner. Automated inbound orders default to System AI Ingest until claimed or reconciled by a counter operator.
DING OS never applies a fixed default commission percentage. Every order, booking, and task records multi-role attribution (SALES, OPERATIONS, FINANCE, MANAGER, OBSERVER) on the live Performance Board so your accounting team reconciles monthly payouts according to your internal compensation policy while shared front-desk headers keep individual balances private.
Data isolation
Tenant boundaries are enforced at the database query layer in api.getding.io. Every request is strictly scoped to the authenticated workspace organization_id.
Operator sessions authenticate via OneUID (uid.one) using OIDC and DPoP-bound tokens. OneUID verifies identity (sub) without storing merchant CRM data or guest transaction histories.
Each merchant organization acts as the independent data controller for its customer profiles, contact records, and cashback wallet balances under GDPR and PDPA, with zero cross-merchant data sharing.
Frequently asked questions
Technical and operational reference for venue owners, operations managers, and IT teams.