Collections is the function where agent voice matters most and audit matters at the same time. A dunning email goes out under your company name. A payment promise gets logged against a real customer relationship. A write-off hits the P&L. If an agent helps draft any of that, the trail has to show who drafted, who approved, what the customer actually said back. Most AR teams I talk to have agents drafting dunning copy in chat, then a controller pasting it into NetSuite or QBO with no record of where the language came from. That works until an auditor or a customer asks how a $40,000 write-off got decided. Then the chat is gone.
The architecture I keep recommending: QuickBooks Online, NetSuite, or Sage Intacct stays source of truth for invoices, payments, customer balances. Dock holds the agent output. Aging analysis runs into a Dock table. Dunning drafts land as rows. Payment promises become tracked records. Escalation notes attach to the customer thread. Each row carries a qbo_invoice_id, ns_invoice_id, or Intacct equivalent so the pointer back to the ledger is unambiguous. Agents read fresh from the platform API every time, so balances are never stale. The Dock consent gate fires the actual dunning email or write-off ONLY after the AR lead approves. Books stay where the books live. The collections conversation persists where the customer's whole history lives.
One workspace, one table:
| Customer | Balance | Days past | Last contact | Agent dunning draft | AR lead decision | Status | Audit |
|---|---|---|---|---|---|---|---|
| Mercer Industrial | $48,200 | 67 | Apr 22 voicemail | Draft 3 (firm, references promise broken May 4) | Approved, send Friday | Awaiting send | mei drafted, govind approved |
| Lawson Mfg | $12,400 | 31 | May 18 email reply | Draft 1 (soft, AP cycle reminder) | Approved | Sent May 24 | mei drafted, j.kim approved |
| Halberd Co | $112,000 | 94 | Apr 9 escalation call | Recommend escalate to outside collections | Hold, calling CFO Tuesday | Pending decision | mei drafted, govind reviewing |
Worked workflow: quarter-end pre-write-off push. End of Q2, controller wants every AR balance over 60 days touched before the close. Mei pulls fresh aging from NetSuite, groups by reason code, drafts a dunning ladder per customer (soft, firm, final-notice-before-collections). Each draft references the customer's actual payment history, last contact, broken promises. AR lead opens the workspace, reads through twelve rows, approves nine, edits two, holds one for a relationship call. Approved drafts fire through the email gate, attributed to the AR lead, not to the agent. Payment promises that come back get logged as new rows. Anything still unpaid two weeks later either escalates or gets written off, and the write-off entry posts to NetSuite with the Dock audit row attached.
Why this matters: top-performing AR teams sit around 28-30 days DSO while median performers are at 38-46 days, an 8-18 day gap worth real cash (APQC, Hackett Group). Closing that gap is rarely about working harder. It is about touching the right accounts at the right time with the right tone, and having the institutional memory to know which accounts deserve patience and which do not. Agents are good at the volume side of that. They are not authorized to send. The split is the whole point.
For the broader accounting story see Dock for Accounting. For attribution mechanics see the agent collaboration primer and agent audit and compliance. Adjacent workflows live in month-end close, AP invoice routing, and AI for bookkeeping and month-end close.
FAQ
How do you keep agent dunning voice from sounding robotic or off-brand? Voice lives in the workspace. The AR lead pins three or four approved example drafts (firm, soft, final notice), the agent uses those as in-context references, and edits flow back into the pinned set. Voice tightens over weeks because every approval is feedback the next draft sees.
How does payment-promise tracking actually work? Each promise becomes a row with customer, amount, promised date, source (email, call, portal), and a follow-up trigger. The day after the promised date, the agent re-reads the platform API. If payment arrived, status flips to kept. If not, a follow-up draft lands in the workspace with the broken-promise context in the body.
What is the right write-off threshold for agent involvement? Agents recommend, humans decide. A reasonable policy: agents can flag and draft justification for any balance, but write-off journal entries above a dollar threshold (commonly $5K or $10K) require a named approver in the audit row before the entry posts to the ledger.
How does this handle multi-currency collections? The platform stays the FX source. The Dock row stores both the customer-currency balance and the reporting-currency equivalent at the date of the dunning. Drafts reference the customer's currency in the body, and the audit captures which rate was used so a later reconciliation question has an answer.
Start your AR collections workspace at dock.computer.
