記錄——智能體蒐集到的東西最終落腳之處
你的智能體把詢問、文件檢查清單、預約請求與升級歸檔進一個你逐一處理的佇列,每一筆都連回產生它的那段對話。可透過 MCP,或者若你有自己的技術棧,也可透過純 HTTP。
一個智能體把詢問審核合格後,卻只把它留在一份逐字稿裡,那只做了一半的活。記錄是另一半:你儀表板裡的一個佇列,每一件需要人處理的事一筆,產生它的那段對話只在一鍵之遙。
這裡沒有任何東西需要設定。當設定精靈建立一個智能體時,它也連接好這些工具,因此一個宣稱會「把一份結構化檔案交到你團隊手上」的模板,如今真的有地方可交。
智能體會歸檔什麼
| 類型 | 何時歸檔 |
|---|---|
lead | 已足夠讓同事著手處理——是誰、他們想要什麼、如何聯絡他們。 |
checklist | 文件尚未齊備,將在數天內追討。 |
booking | 有人請求一個只有人能確認的時段。 |
escalation | 有人現在就需要真人。 |
一筆 lead 或一份 checklist 會更新它那段對話對應的記錄,而非另建第二筆,因此一個在同一次聊天裡歸檔兩次的智能體會自我修正,而不會塞爆你的佇列。一筆 booking 與一筆 escalation 則每次都新建一筆,因為那兩者是兩件真實的事。
參考碼
每一筆記錄都會拿到一組簡短的參考碼——7K4M-2QP——由一個沒有 O/0、也沒有 I/1 的字母表構成,因為它會被人在電話上唸出、再被打錯。智能體把它交給你的顧客,好讓他們日後可以憑此詢問。
這組參考碼不是存取金鑰。一次讀取是由發問者的身分授權的,那身分自對話帶入,因此拿一組別人無意間聽到的參考碼去查,什麼也查不到。
從你自己的技術棧使用這些工具
兩種介面,同一種行為。你的 token 在儀表板的 Tenant & API 底下。
MCP
對精靈建立的智能體來說已經連好了。若要接到別處,把一個 streamable_http MCP 伺服器指向 https://agent4.io/api/mcp,並帶上一個 Authorization: Bearer 標頭。工具:submit_lead、open_checklist、request_booking、escalate、lookup_case、close_case。
HTTP
curl -X POST https://agent4.io/api/tools/records \
-H "Authorization: Bearer $AGENT4_TOOL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "lead",
"title": "Sarah — quote for a home policy",
"summary": "Wants contents cover on a flat she has just bought.",
"contact": { "name": "Sarah", "phone": "07700 900000" },
"fields": { "sumInsured": "40000", "startDate": "2026-08-01" }
}'{ "reference": "7K4M-2QP", "created": true, "message": "Recorded. The reference is 7K4M-2QP …" }用 PATCH /api/tools/records/{reference} 加 {"outcome":"quoted"} 來結案一筆。用 GET /api/tools/records/{reference} 讀取一筆,這需要記錄所屬那個人的 X-Agent4-End-User。
欄位
title、summary、contact 與 urgency 在每個行當裡都相同——它們是佇列用來排序與顯示的東西。其他一切都放進 fields,而每個模板宣告它那個行當所蒐集的鍵,因此 telephone 進來時會被併進 phone。任何模板都沒宣告的鍵會被保留而非丟棄;它會出現在記錄的「也曾提到」底下。
得到通知
一個沒人被告知的佇列就是一個沒人讀的佇列,所以**通知(Notifications)**就坐在佇列本身上。兩種管道,而你可以逐一類型選擇哪些會觸發。
Email 送往你的登入位址,除非你指定另一個——付錢的人很少是處理佇列的人。開箱即用時,升級與預約請求會寄 email 給你,而詢問則不會:一個每來一筆詢問就叮一聲的收件匣會被靜音,而那也連帶讓升級的通知一起消音。
**Webhook。**記錄一被歸檔,我們就把它 POST 到你的 URL:
{
"event": "record.created",
"record": {
"reference": "7K4M-2QP",
"type": "lead",
"title": "Sarah — quote for a home policy",
"summary": "Wants contents cover on a flat she has just bought.",
"contact": { "name": "Sarah", "phone": "07700 900000" },
"fields": { "sumInsured": "40000", "startDate": "2026-08-01" },
"agent": "Front desk"
},
"url": "https://agent4.io/dashboard/records/7K4M-2QP"
}隨附兩個標頭:X-Agent4-Timestamp,以及 X-Agent4-Signature——它是時間戳、一個點、加上原始主體的 HMAC-SHA256,以設定頁上的簽章密鑰為金鑰。驗證它,你就知道這個 POST 是我們發的,而非某個學到了 URL 的人。時間戳在簽章之內,因此一個被擷取的請求日後無法對你重放。
expected = hmac.new(secret.encode(), f"{ts}.{raw_body}".encode(), hashlib.sha256).hexdigest()
hmac.compare_digest(expected, request.headers["X-Agent4-Signature"])該 URL 必須是 https,且可從公開網際網路連達——一個只在你網路內部解析得到的位址,會在你儲存時被拒絕,而非每次有記錄抵達時才無聲失敗。在你依賴它之前,先從設定頁送出一則測試;它會回報接收端實際說了什麼。
這份 payload 帶著記錄的內容,包含聯絡細節——一個略去這些的 webhook 就不足以拿來開一張工單,而那正是它存在的目的。因此你把它指向的端點會收到你顧客的個人資料,值得跟你保存這類資料的任何其他地方一樣謹慎對待。
把一筆交給同事
不需要第二個帳號。開啟一個連結並把它送出去——在 WhatsApp 上,或作為一個讓人從你螢幕上掃描的 QR 碼。結案會把連結關掉,因此撤銷權限是完成工作的一部分,而不是一件要記得去做的事。把連結關掉又再開一次會產生一個不同的連結,因此「關」對任何還握著舊連結的人來說,是真正意義上的關。
你也可以把一筆記錄印出來。印出來的東西沒有到期日、無法收回,這在它離開這棟樓之前值得思量片刻。
離開
隨時可從佇列把每一筆記錄匯出為 CSV。若你成長到超出這裡而轉往一套 CRM,智能體仍照常運作——記錄是你的,它們會跟著走。
我們儲存什麼、如何儲存
一筆記錄的全部內容——標題、摘要、聯絡細節、筆記——都在靜態時加密。只有佇列排序與篩選所需的東西放在明文欄位裡:類型、狀態、時間戳,以及指回對話的識別碼。這些都不能識別出一個人。
由此帶來、且是刻意接受的後果:我們無法用資料庫查詢在你的記錄內部搜尋。篩選只能依類型、狀態、智能體與日期。
記錄是你顧客的個人資料,代你保管。從儀表板刪除一筆或全部;關閉你的帳號會連同它們一起移除。