All projects
Udesk Productivity Tools icon

Custom Udesk Workbench · Browser Extension

Udesk Productivity Tools

Quick ticketing / auto-reply / AI assistant / monitoring dashboard — smart tools for peak efficiency

Version 1.17.2 Install No admin · load-unpacked Total installs&updates installs views Changelog →

Install / update (PowerShell)

irm https://ext.turinghost.org/udesk/install.ps1 | iex

Uninstall (PowerShell)

irm https://ext.turinghost.org/udesk/uninstall.ps1 | iex

Udesk Productivity Tools

A Chrome / Edge extension for the Jin Jiang Udesk workspace (jinjianghotels.udesk.cn). It turns the most tedious parts of the daily job — filing tickets, auto-replies, conversation status tags, knowledge-base lookup, monitoring dashboards — into single keystrokes and smart auto-fill.

📖 Online guide / changelog: https://turingblog.org/showcase/udesk The install script also prints what changed in the current update when it finishes.


Quick start

① Install② Enter staff ID③ Reload Udesk
one commandclick the iconstart using it

Three shortcuts are enough to get going: Alt+S fills the customer and category, Alt+I has the AI write the whole ticket, Alt+G opens the AI side panel.


1. Install / update

No admin rights needed. The install directory is %USERPROFILE%\udesk\udesk-extension (i.e. C:\Users\<you>\udesk\udesk-extension). First install and later updates use the same command.

Existing users: before v1.15.0 the extension lived in %USERPROFILE%\udesk-extension (one level less). When the update script finds the old directory it keeps using it and does not move anything — the browser binds to the absolute path you loaded, so moving it breaks the extension. Your path differing from a colleague’s fresh install is expected.

Installing with PowerShell: all five steps

If PowerShell is unfamiliar, just follow these five steps:

  1. Open PowerShell

    Press Win + R, type powershell, press Enter. (You do not need “Run as administrator”.)

  2. Copy the install command

    Public internet: irm https://ext.turinghost.org/udesk/install.ps1 | iex

  3. Paste and press Enter

    Right-click inside the PowerShell window to paste (Ctrl+V is not reliable in older versions), then press Enter.

  4. Let it finish

    The script downloads, unpacks, deploys, and opens your browser’s extensions page. With both Chrome and Edge installed it first asks you to type a number — nothing else happens until you do, which is expected.

  5. First install only: load it once manually

    Turn on Developer mode → click Load unpacked → press Ctrl+V in the file dialog to paste the directory (already copied for you) → confirm. Updates skip this step — just click the reload icon on the extension’s card.

Paste the whole line into PowerShell and press Enter:

Terminal window
irm https://ext.turinghost.org/udesk/install.ps1 | iex

Intranet install (corporate network, no internet required)

Terminal window
iex(irm 'http://10.100.50.215/udesk/install-lan.ps1')

If you only have Command Prompt (CMD)

CMD has no irm, so the commands above won’t work. Use this equivalent — it downloads a bootstrapper and runs the very same install script:

Terminal window
curl -sLo "%TEMP%\ud.cmd" https://ext.turinghost.org/udesk/i.cmd && "%TEMP%\ud.cmd"

For the intranet version, swap the URL for http://10.100.50.215/udesk/i-lan.cmd.

A “User Account Control (UAC)” prompt may appear — that is Windows’ routine confirmation for launching PowerShell from a command line. Click Yes to continue; clicking No aborts the install with Access is denied. The PowerShell command does not trigger this prompt, so prefer it when you can.

What the script does automatically

  1. Downloads the latest package, unpacks it, deploys it to the install directory;
  2. Prints this update’s changelog;
  3. Copies the install directory to your clipboard;
  4. Opens the browser’s extension management page (Chrome / Edge; if you have both, it asks which).

Making an update take effect

Browsers do not auto-reload unpacked extensions. After the update script finishes: go to the extension management page, find “Udesk 效率工具”, and click the reload icon on its card (or restart the browser).


2. Uninstall

Terminal window
irm https://ext.turinghost.org/udesk/uninstall.ps1 | iex

CMD users:

Terminal window
curl -sLo "%TEMP%\ud-u.cmd" https://ext.turinghost.org/udesk/u.cmd && "%TEMP%\ud-u.cmd"

The script deletes the local install directory and opens the extension page. Finish by clicking Remove on “Udesk 效率工具” there (browsers do not let scripts click Remove for you).


3. Sign-in / authorization

  • Just enter your staff ID — no activation code. Click the extension icon in the toolbar while on a Udesk page and fill it in.
  • Your staff ID is bound to your Udesk display name on first sign-in. Even if someone else enters your ID, they get nothing under their own account.

You must be signed in to Udesk when entering the staff ID (the popup is disabled outside Udesk pages or when no agent is detected).

Two feature tiers

TierIncludesHow to enable
Standard (works on install)Quick ticket, auto-reply, conversation tags, AI featuresJust enter your staff ID
AdvancedMonitoring dashboard, knowledge-base lookupAdmin grants it per staff ID

⚠ AI features are standard-tier but still need your own API key (see “5. Enabling AI features”). The extension no longer bundles a shared key — everyone uses their own quota, billed to their own account.

⚠ Knowledge-base lookup is separately authorized as of v1.18.3: it holds internal operations and business material, which is a different question from “may this person call an LLM”. Without it the side panel stays silent — it simply does not recall internal material. To check your own status, see Settings → General → feature entitlement status.


4. Shortcuts

ShortcutWhat it does
Alt+S ⭐Fills the “customer” field from the hotel code/name in the description; when that fails it falls back through past tickets → IRM → SSO
Alt+I ⭐AI writes the whole ticket: reads the current conversation/call, fills description, resolution and category, and inserts fault screenshots into the description (draft only — never auto-submits)
Alt+G ⭐AI side panel: Q&A (auto knowledge-base recall) / find similar past tickets / draft replies / bulk backfill. Type / for slash commands
Alt+QQuick ticket: parses the description template, fills subject / customer / resolution
Alt+WTransfer (fills the resolution and applies the “transfer” tag)
Alt+EnterSubmit the current new-ticket dialog
Alt+1 / 2 / 3 / 4Auto-reply: send a canned reply (Alt+3 / Alt+4 also request a rating by default)
Alt+5Wrap-up combo: closing message → rating request → AI ticket, all in one (press once the issue is confirmed resolved)
Alt+`Open settings
Alt+/Toggle the workspace panel

Every shortcut is remappable under Settings → Shortcuts; conflicts are highlighted.


5. Enabling AI features (one-time setup)

Everything AI-related (Alt+I ticketing, the Alt+G panel, bulk backfill, draft replies) needs your own WorkBuddy access key. The extension bundles no shared key — everyone uses their own quota.

Getting a key

  1. Open https://www.workbuddy.cn/profile/keys and choose phone-number verification-code sign-in. ⚠ The phone number must match the one bound to your WeCom account, otherwise it won’t link to the flagship subscription.
  2. Confirm you are on flagship (only flagship exposes API management).
  3. Under API management, click Create access key and give it a recognizable name (e.g. udesk-ext).
  4. The key is shown in full only once (it starts with ck_) — copy it immediately. Once the dialog closes you cannot read it again; you’d have to delete and recreate it.
  5. Open the extension’s Settings → AI settings and paste it into “API Key”.

Security: the key is equivalent to your account quota — never commit it to a repository or post it in a chat group. If you suspect it leaked, delete and recreate it in API management.

Official docs: https://www.codebuddy.cn/docs/workbuddy/Overview

Optional: hotline call transcription

To let Alt+I read the audio recording on hotline pages (rather than just IM text), pick one of two channels under “AI settings → Auxiliary services”:

ChannelHow to use itWho it suits
On-device (default since v1.18.3)Install the local transcription host once (~135 MB including the model); the command is copyable from the settings pageRecommended: noticeably better Chinese accuracy, and audio never leaves your machine
CloudPoint it at any OpenAI-compatible /audio/transcriptions endpointYou’d rather not install a host, or your company runs its own service

If the local host isn’t installed it falls back to the cloud automatically, so ticketing still works. With both off, hotline ticketing simply stays manual.

Where the API key lives

Only on your machine (chrome.storage.local). It is never uploaded and never included in a config export. The cloud transcription channel does send call audio to whichever provider you configure — if recordings must not leave the corporate network, use on-device transcription or an internally hosted endpoint.


6. Main features

Ticketing

Quick ticket: multiple templates (resolved / transfer) plus three-level category matching. Description and subject templates support placeholders ({hotelname} / {hotelid} / {contact} / {problem}), pushed centrally by the admin so everyone shares one wording.

Customer auto-fill (Alt+S): write a hotel code or name in the description and the “customer” field fills itself. When that fails, it falls back in this order, and the first hit fills the customer field:

  1. Past tickets — look through this customer’s history
  2. IRM — PMS code H800482 → udesk store code
  3. SSO — phone / staff ID / name → their store

These three systems only reuse the sessions already signed in to your browser — the extension never touches credentials. Lookup progress and sign-in state show in the status strip to the right of “描述” (Description).

Hotel cross-check (new in v1.18.3): once past tickets produce a match, it is compared against the organisation data in SSO.

This targets a failure that never raises an error: when the reporter changes jobs, their past tickets still name the old hotel — and since past tickets rank highest and stop the lookup, the stale value wins every time with nothing to reveal it. Both sources now run, and the verdict appears in the status strip:

VerdictMeaning
Both agreeThis is the only real “confirmed”
They disagreeCould be a job change, could be someone reporting for another store — the data cannot tell them apart, so judge it yourself
Single sourceNothing to compare against (most tickets land here)

⚠ The check only reports; it never edits a field. The customer field cannot be changed after submission, so “is the verdict right” is deliberately kept separate from “should we act on it”.

User contact details (changed in v1.18.3): an inbound hotline number is looked up in SSO first — a hit is tagged 【SSO手机号】 (which also reveals who reported and which store they belong to); a miss falls back to 【来电】. A store’s current general manager (name / staff ID / mobile) comes from IRM, and only if currently employed.

When nobody can be found, the wording no longer contradicts itself: browser visitors are tagged 【访客】, and WeCom users who aren’t signed in to SSO get 【企微·SSO未登录】 — the latter is fixable, since signing in to SSO produces a number.

Smart category: the controls sit to the right of the “描述” label — five pieces in one row:

ControlPurpose
🔍 Search boxType a system name/keyword to filter manually (comma or space separated, e.g. 绿云 操作)
▾Expand candidates, with score breakdown
🧠AI decides the category (more accurate, spends your API quota)
✨Local keyword matching (free, instant)
Status stripSSO / IRM sign-in state, past-ticket lookup, hotel cross-check, AI progress — all shown here

Matching rules are pushed from the cloud and identical for everyone.

AI ticketing (Alt+I): reads the current conversation or call recording, writes the description, resolution and category, and inserts fault screenshots into the description (up to 3, picking those that genuinely evidence this fault; ID cards, payment codes and the like are skipped).

Read conversationDecide categoryWrite descriptionFill the form
text + images + filenamesmatched automaticallyand resolutioninsert screenshots

⚠ Draft only — it never submits. Review before you send it. ⚠ Want it to run on every new ticket page? Settings → General → Quick ticket → “auto-run AI on ticket page” (off by default; each page costs one AI call).

Three known weaknesses of call transcription (designed around, but worth knowing):

ProblemHow to handle it
No speaker separationThe AI is instructed not to write attributions like “the customer said…”
Digits get garbled (order/ID/phone numbers)Verify these yourself
Hotel names are almost always wrongTrust the “customer” field instead

Conversations

  • Auto-reply: sends an opening line automatically when a new customer arrives; canned replies in one keystroke (each one controls whether it also requests a rating).

    New in v1.18.3 — a grace period. The admin can set a wait (say 10 seconds). With it set, an arriving customer is no longer answered instantly: if you reply during that window, the bot stays quiet; it only steps in when nobody did. The wait is pushed centrally and defaults to 0, i.e. unchanged behaviour.

  • Conversation status tags: every item in the left-hand list is tagged with “ticket · rating · status”, cached across tab switches and reloads.

    The conversation timer now has its own toggle (v1.18.3). It shows how long a conversation has been running (12m / 1h20m), warming from grey → yellow → orange → red. Previously it shared the status-tag toggle, so turning the stopwatch off meant losing “replied / not replied” as well.

AI assistant (Alt+G side panel)

PanelWhat it does
💬 ChatQ&A with automatic cloud knowledge-base recall, draft replies, conversation summaries, similar past tickets, a store’s PMS version
🧰 ToolboxThree lists — canned text / navigation / commands: left-click inserts, right-click copies, ↗ sends. Also ticket QA review (beta)
📋 HistoryBulk-backfill conversations that never got a ticket

⚠ Sending a message to a customer always requires human confirmation. The AI never sends on its own.

Everything else

  • Monitoring dashboard (advanced): live hotline / IM / ticket dashboard with occupancy and health warnings.
  • Knowledge base (advanced, separately authorized since v1.18.3): cloud lookup. An admin edits once and it takes effect for everyone immediately — nothing to configure on your side. Built into the Alt+G panel and recalled automatically as you ask questions.

7. Settings

Press Alt+`, or click “完整设置” in the workspace panel. Seven tabs, grouped by whether you are ever going to touch it:

TabWhat it covers
⚙️ GeneralThe single home for every feature toggle, each explaining exactly what it controls; plus authorization mode and feature entitlement status
🎨 PersonalThe things you maintain yourself: canned replies, resolution shortcuts, the side panel’s text / navigation / command lists. Also where you export your config to carry to another machine
☁️ CloudEverything the admin pushes, visible in one place (all read-only): ticket templates, category baseline, monitoring thresholds, your entitlement roster
✨ AIYour API key, endpoint and model name, plus the transcription channel and ticketing behaviour such as submit mode
⌨️ ShortcutsRemap every shortcut, with conflict highlighting
📊 UsageAI call count and token spend, shortcut hit stats. Local only, never uploaded, kept for 30 days
📋 LogsEverything the extension did, filterable by level and source. Local only, never uploaded, kept for 7 days / 500 entries. Start here when asking “why didn’t that step work?”
  • Toggles all live in “General”; “Personal” holds your own phrasing; “Cloud” is the read-only company-wide config.
  • Items marked ☁ Cloud are pushed by the admin and identical for everyone; anything unmarked is yours.
  • Import / export (on the “Personal” tab) covers only the personal config worth carrying between machines — no server-side entitlements, no API key. Cloud-managed content (templates, phrasing, category baseline) is excluded so an old snapshot can’t fight the cloud.

8. FAQ

Q: Nothing changed after updating. A: Browsers don’t auto-reload unpacked extensions. Click the reload icon on the extension’s card, or restart the browser.

Q: AI features say “please enter an access key”. A: The extension no longer bundles a shared key; you need to request one once — see “5. Enabling AI features”.

Q: The install command seems to hang halfway. A: It is most likely waiting at the browser choice step (asked when both Chrome and Edge are installed). Type the number and press Enter. Until you do, neither the extensions page nor the folder appears — that is by design.

Q: Installing from CMD fails with Access is denied. A: The UAC prompt wasn’t accepted. Run it again and click Yes. Prefer the PowerShell command — it doesn’t trigger UAC.

Q: Chinese text shows as garbage. A: Use the complete install commands from this document (they force UTF-8). On a few old environments (Windows PowerShell 5.1) that still garble, use the “byte-wise download + explicit UTF-8 decode” fallback in the header comment of install.ps1.

Q: I entered my staff ID but the monitoring dashboard / knowledge base doesn’t work. A: Both are advanced-tier and must be granted per staff ID. Settings → General → feature entitlement status shows what you have.

Q: A setting is greyed out. A: It is pushed centrally by the admin (its title carries a ☁ Cloud marker) so wording stays consistent. Ask your admin to change it.

Q: The page reloaded after I turned a feature off in the panel. A: Expected. These capabilities mount once at page load, so a reload is required for the change to take effect — the panel just does it for you.

Q: I can’t find “Udesk 效率工具” on the extensions page. A: Make sure you completed the one-time “Load unpacked” step. Directory: %USERPROFILE%\udesk\udesk-extension for fresh installs; users from before v1.15.0 remain at %USERPROFILE%\udesk-extension (updates never relocate).


9. Support

  • Online guide / changelog: https://turingblog.org/showcase/udesk
  • Supported site: https://jinjianghotels.udesk.cn
  • Supported browsers: Chrome / Edge (Chromium-based, a recent version recommended)
ESC