Skip to content

带入咨询内容 ​

访客从商品页、订单页点「联系客服」时,把他正在看的那一件一起带过来,客服不用再追问「您说的是哪一件」。

做出来是什么样 ​

访客点开聊天窗时,你带进来的内容已经在那儿了。

带一段文字:直接填进输入框,访客可以改、也可以直接发。

访客点开的聊天窗,输入框里已经填好一段话,还没有发送

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

聊天窗消息流末尾居中显示一张商品卡片,卡片下方是发送按钮,右上角有关闭图标

永远不会自动发出去

带进来的内容只是摆在那里,访客点了发送才会发出。这是有意的设计:链接谁都能拼,如果带进来就自动发,任何人都能用你的链接以访客的名义说话。

什么时候用得上 ​

  • 访客在商品页点「联系客服」,把他正在看的那件商品带过来,客服不用再问「您说的是哪一件」
  • 访客从订单详情页、物流页进来,把那笔订单带过来,省掉一轮追问单号
  • 访客在你的页面上挑过条件(预算、尺寸、型号),把这些条件整理成一句话带过来,他不用再复述一遍

参数 ​

js
hc.setPresend({ text, card })   // 两个字段都可选,只传其一就只动那一样
hc.setPresend(null)             // 撤掉还没发出去的卡片
字段类型说明
textstring填进输入框的文字,效果等同访客自己打进去,会覆盖原有草稿
card卡片对象摆在消息流末尾的待发卡片,只支持商品、订单、文章三类,字段见下方

带一段文字 ​

js
hc.setPresend({ text: '我想问一下这款沙发,预算 5000~8000 元,客厅宽 3 米 2 放得下吗?' })

文字写进输入框之后就归访客了:他可以接着改、可以删掉重写,也可以直接发送。效果和他自己打进去完全一样。

有一点要知道:它会覆盖输入框里原有的草稿。带进来的内容是访客此刻正在看的东西,比几天前留在草稿里的半句话更接近他现在想说的。

带一张卡片 ​

js
hc.setPresend({
  card: {
    cardType: 'product',
    productId: 'SKU-10023',
    title: '示例商品名称',
    description: '示例规格描述',
    price: { amount: 19900, currency: 'CNY' },
    originalPrice: { amount: 29900, currency: 'CNY' },
    imageUrl: 'https://你的域名/images/sku-10023.jpg'
  }
})

cardType 决定是哪一类卡片,其余字段按类型各有各的定义,完整字段表在下面。访客点发送之后,这张卡片就作为他的消息发出去,和他自己从选择器里选一个发出来没有区别。

文字和卡片可以一起带:

js
hc.setPresend({
  text: '这个还有货吗?',
  card: { cardType: 'product', productId: 'SKU-10023', title: '示例商品名称' }
})

几条规矩 ​

  • 两个字段各管各的。 只传 text 就只动输入框,只传 card 就只动卡片;先带文字、后带卡片不会把前面的冲掉。
  • 卡片一次只有一张。 再调一次就换成新的那张。
  • 撤掉卡片用 hc.setPresend(null)。访客自己点卡片右上角的 × 也能收起,收起之后这次访问不再出现。
  • 聊天窗没打开时调用也有效。 内容先存着,访客点开时才摆出来;它不会替你打开聊天窗,要打开自己调 open()。
  • 卡片类型不对(不是那三类、或者缺必填字段)时,卡片不显示、浏览器控制台里有一行提示,同一次调用里的文字照常生效。
  • 访客发消息、客服回复都排在卡片上面,卡片一直贴在输入框上方,直到访客发出去或者自己关掉。

卡片字段 ​

三类卡片的字段和选择器里的条目完全一样,这里是同一份定义。

字段定义 ​

product(商品)、order(订单)、article(文章),每类最多 50 条,超出部分不会呈现。

三类的字段各不相同,字段名必须完全一致:写错名字的字段会被静默丢弃,不报错、不提示,只表现为卡片上少了图或少了描述。

product 商品卡 ​

字段类型必填含义
titlestring是商品名,≤200 字符
descriptionstring否规格、卖点等,≤2000 字符
imageUrlstring否商品图外链,必须是合法 URL
priceMoney否现价
originalPriceMoney否划线原价
detailUrlstring否商品详情页,客服点击可跳转
productIdstring否你自己的 SKU 编号,≤128 字符
layout'compact' | 'large'否卡片形态,缺省由聊天窗决定

order 订单卡 ​

字段类型必填含义
orderIdstring是订单号,≤128 字符
titlestring是订单标题,≤200 字符
totalMoney是订单总额
status见下是订单状态
createdAtnumber是下单时间,毫秒时间戳
itemsarray是商品行,≤30 条
items[].namestring是商品名
items[].quantitynumber是数量,正整数
items[].priceMoney是单价
items[].imageUrlstring否商品图外链
detailUrlstring否订单详情页

status 取值:pending(待付款)、paid(已付款)、shipped(已发货)、delivered(已送达)、refunded(已退款)、cancelled(已取消)。传其他值会被拒绝。

商品行超过 30 条,这张卡整个发不出去,不是只显示前 30 条。卡片是摘要不是清单,行数多的订单挑主要商品放进去,其余让客服点 detailUrl 看详情。

article 文章卡 ​

字段类型必填含义
titlestring是文章标题,≤200 字符
descriptionstring是摘要,≤2000 字符
urlstring是文章链接
imageUrlstring否封面图外链
sourcestring否来源站点名,≤100 字符

Money 金额 ​

js
{ amount: 39900, currency: 'CNY' }   // ¥399.00
{ amount: 99, currency: 'USD' }      // $0.99

amount 是最小货币单位的整数(人民币为分),不接受浮点数。currency 用 ISO 4217 代码。展示时由聊天窗按客户语言格式化,你不用自己拼货币符号。

图片一律用外链 ​

卡片图只能传 imageUrl,值是你自己的图片地址。

不要传 imageAttachmentId。那是客服在工作台上传素材时才用的字段,服务端会校验附件归属,用它发出去的卡片客户这边发不成功,而且不会有明确的报错提示。

客户选完之后 ​

点中某一项,卡片直接作为一条消息发给客服,你不需要再做任何事。客服在工作台里看到的是完整卡片,能点进 detailUrl。

在哪里调 ​

在你自己的页面上,访客点「联系客服」的时候调一次:

html
<script>
  window.hecong = window.hecong || function (c) { (window.hecong.q = window.hecong.q || []).push(c) }

  document.querySelector('#contact-support').addEventListener('click', function () {
    window.hecong(function (hc) {
      hc.setPresend?.({
        text: '这个还有货吗?',
        card: { cardType: 'product', id: 'SKU-10023', title: '示例商品名称' }
      })
      hc.open()
    })
  })
</script>

带进来的内容只活在当前这个页面里,跳到另一个页面就没了。单页应用换路由时不会自动清,到了新页面重新调一次,或者调 hc.setPresend(null) 清掉。

写成 hc.setPresend?.(…) 而不是 hc.setPresend(…):访客浏览器里可能还缓存着旧版脚本,那上面没有这个命令,加个问号可以让旧脚本上的调用安静地跳过,不至于报错中断你后面的代码。

下一步 ​