Khối giao diện (reply.ui)
Các khối dữ liệu có cấu trúc trợ lý trả về và cách hiển thị.
Ngoài reply.text, trợ lý có thể trả reply.ui — mảng các khối có trường type. Voicebox tự vẽ các khối này; nếu bạn dùng
Core API, hãy vẽ theo bảng dưới.
type | Nội dung | Gợi ý hiển thị |
|---|---|---|
product_list | items[]: sku, name, price, unit, stock | Danh sách / thẻ sản phẩm |
promotion_list | items[]: code, name, until | Thẻ mã giảm giá có nút sao chép |
order_summary | items[] (name, qty, price, subtotal), subtotal, discount, shipping_fee, total, promotions | Bảng tóm tắt đơn trước khi xác nhận |
order_status | order: order_id, status, total, items | Thẻ trạng thái đơn hàng |
card | title, subtitle, amount | Thẻ thông tin chung |
citations | items[]: n, title, section, snippet | Nguồn trích dẫn từ tài liệu |
actions | buttons[]: label, action, style | Hàng nút bấm |
text | text | Đoạn văn bổ sung |
Nút bấm (actions)
Khi người dùng bấm nút, gửi lại action của nút trong lượt kế tiếp cùng session_id:
{ "session_id": "0199…", "input": { "type": "event", "event": "ui.action", "data": { "action": "confirm" } }, "user": { "ref": "kh001" } }style: "primary" là nút chính (tô màu nổi bật).
Khối chưa hỗ trợ
Danh sách khối có thể mở rộng. Gặp type lạ, hãy hiển thị fallback_text (nếu có) hoặc bỏ qua — đừng báo lỗi cho người dùng.
function renderBlock(b) {
switch (b.type) {
case 'product_list': return <ProductList items={b.items} />;
case 'actions': return <Buttons buttons={b.buttons} onPress={(a) => send({ type: 'event', event: 'ui.action', data: { action: a } })} />;
// …
default: return b.fallback_text ? <p>{b.fallback_text}</p> : null;
}
}