Appearance
带入咨询内容
客户从商品详情页、订单详情页点「联系客服」,把他正在看的那一件一起带进去,客服不用再追问「您说的是哪一件」。
需要 SDK 0.7.0 及以上
更早的版本里没有这两个方法,调用不到。
做出来是什么样
聊天页起来时,带进来的内容已经在那儿了。
带一段文字:直接填进输入框,客户可以改、也可以直接发。

带一张卡片:商品、订单或文章卡片摆在消息流最下面,下方有一个发送按钮。

永远不会自动发出去
带进来的内容只是摆在那里,客户点了发送才会发出。带进来就自动发的话,等于以客户的名义说了他没说过的话。
怎么调
在打开聊天页之前调一次就行,SDK 会记住,页面起来时自动带上:
kotlin
// Android
HecongChat.setPresend("这个还有货吗?", JSONObject().apply {
put("cardType", "product")
put("productId", "SKU-10023")
put("title", "示例商品名称")
put("price", JSONObject().apply { put("amount", 19900); put("currency", "CNY") })
})
HecongChat.openChat(context)swift
// iOS
HecongChat.shared.setPresend(text: "这个还有货吗?", card: [
"cardType": "product",
"productId": "SKU-10023",
"title": "示例商品名称",
"price": ["amount": 19900, "currency": "CNY"]
])
HecongChat.shared.openChat(from: self)只带文字不带卡片,第二个参数不传即可;聊天页已经开着的时候调,同样立即生效。
撤掉还没发出去的卡片:
kotlin
HecongChat.clearPresend()swift
HecongChat.shared.clearPresend()几条规矩
- 只带一次。 聊天页起来时带上,客户发出去或者自己关掉之后,再打开聊天页不会又冒出来。
- 两个参数各管各的。 只传文字就只动输入框,只传卡片就只动卡片;先带文字、后带卡片不会把前面的冲掉。
- 卡片一次只有一张,再调一次就换成新的那张。
- 文字会覆盖输入框里原有的草稿,带进来的内容是客户刚刚做过的事,比之前留下的半句话更接近他此刻想说的。
- 卡片只支持商品、订单、文章三类,
cardType决定是哪一类,其余字段按类型各有各的定义。类型不对或者缺必填字段时,卡片不显示、日志里有一行提示,同一次调用里的文字照常生效。
卡片字段
三类卡片的字段和选择器里的条目完全一样,这里是同一份定义。金额一律用 { amount, currency } 的形式,amount 是最小货币单位的整数(人民币为分)。
字段定义
product(商品)、order(订单)、article(文章),每类最多 50 条,超出部分不会呈现。
三类的字段各不相同,字段名必须完全一致:写错名字的字段会被静默丢弃,不报错、不提示,只表现为卡片上少了图或少了描述。
product 商品卡
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
title | string | 是 | 商品名,≤200 字符 |
description | string | 否 | 规格、卖点等,≤2000 字符 |
imageUrl | string | 否 | 商品图外链,必须是合法 URL |
price | Money | 否 | 现价 |
originalPrice | Money | 否 | 划线原价 |
detailUrl | string | 否 | 商品详情页,客服点击可跳转 |
productId | string | 否 | 你自己的 SKU 编号,≤128 字符 |
layout | 'compact' | 'large' | 否 | 卡片形态,缺省由聊天窗决定 |
order 订单卡
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
orderId | string | 是 | 订单号,≤128 字符 |
title | string | 是 | 订单标题,≤200 字符 |
total | Money | 是 | 订单总额 |
status | 见下 | 是 | 订单状态 |
createdAt | number | 是 | 下单时间,毫秒时间戳 |
items | array | 是 | 商品行,≤30 条 |
items[].name | string | 是 | 商品名 |
items[].quantity | number | 是 | 数量,正整数 |
items[].price | Money | 是 | 单价 |
items[].imageUrl | string | 否 | 商品图外链 |
detailUrl | string | 否 | 订单详情页 |
status 取值:pending(待付款)、paid(已付款)、shipped(已发货)、delivered(已送达)、refunded(已退款)、cancelled(已取消)。传其他值会被拒绝。
商品行超过 30 条,这张卡整个发不出去,不是只显示前 30 条。卡片是摘要不是清单,行数多的订单挑主要商品放进去,其余让客服点 detailUrl 看详情。
article 文章卡
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
title | string | 是 | 文章标题,≤200 字符 |
description | string | 是 | 摘要,≤2000 字符 |
url | string | 是 | 文章链接 |
imageUrl | string | 否 | 封面图外链 |
source | string | 否 | 来源站点名,≤100 字符 |
Money 金额
js
{ amount: 39900, currency: 'CNY' } // ¥399.00
{ amount: 99, currency: 'USD' } // $0.99amount 是最小货币单位的整数(人民币为分),不接受浮点数。currency 用 ISO 4217 代码。展示时由聊天窗按客户语言格式化,你不用自己拼货币符号。
图片一律用外链
卡片图只能传 imageUrl,值是你自己的图片地址。
不要传 imageAttachmentId。那是客服在工作台上传素材时才用的字段,服务端会校验附件归属,用它发出去的卡片客户这边发不成功,而且不会有明确的报错提示。
客户选完之后
点中某一项,卡片直接作为一条消息发给客服,你不需要再做任何事。客服在工作台里看到的是完整卡片,能点进 detailUrl。