Files
im_server/docs/thecard-CN.md
T
2026-08-11 15:59:57 +08:00

2.7 KiB

theCard: 人物/话题描述格式

Tinode 使用 theCard 存储和传输人物和话题的描述。该格式概念上类似于 vCard 3.0。

当使用 JSON 表示 theCard 数据时,其方式与 jCard 不同。theCard 和 jCard 不兼容。主要区别是 theCard 使用对象表示逻辑相关数据,而 jCard 使用有序数组。

theCard 结构为对象:

{
  fn: "John Doe", // 字符串,人物或话题的格式化名称。
  photo: { // 对象,头像照片;必须有 'data' 或 'ref',其他字段可选。
    type: "jpeg", // 字符串,MIME 类型但去掉 'image/'。
    data: "Rt53jUU...iVBORw0KGgoA==", // 字符串,base64 编码的二进制图片数据
    ref: "https://api.tinode.co/file/s/abcdef12345.jpg", // 字符串,图片 URL。
    width: 512, // 整数,图片宽度(像素)。
    height: 512, // 整数,图片高度(像素)。
    size: 123456 // 整数,图片大小(字节)。
  },
  note: "Some notes", // 字符串,人物或话题的描述。
  //
  // 以下字段目前没有任何已知客户端实现:
  //
  n: { // 对象,人物的结构化名称。
    surname: "Miner", // 姓氏或姓或家族名。
    given: "Coal", // 名字或名。
    additional: "Diamond", // 额外名称,如中间名或父名。
    prefix: "Dr.", // 前缀,如荣誉头衔或性别标识。
    suffix: "Jr.", // 后缀,如 'Jr' 或 'II'。
  },
  org: { // 对象,人物或话题所属的组织。
    fn: "Most Evil Corp", // 字符串,组织的格式化名称。
    title: "CEO", // 字符串,人物在组织中的职位。
  },
  comm: [ // 对象数组,定义与人物或话题的通信方式。
    {
      des: ["home", "voice"], // 联系标识,可选。
      proto: "tel", // 通信协议,必需
      value: "+17025551234" // 电话号码。
    },
    {
      des: ["work"],
      proto: "email",
      value: "alice@example.com", // 电子邮件地址
    },
    {
      des: ["other"],
      proto: "tinode",
      value: "tinode:topic/usrRkDVe0PYDOo", // tinode ID URI,可包含服务器地址。
    },
    {
      proto: "http", // 应用于 http 或 https 网站地址。
      value: "https://tinode.co", // 网站实际地址。
    }, ...
  ],
  bday: { // 对象,人物生日。
    y: 1970, // 整数,年
    m: 1, // 整数,月 1..12
    d: 15 // 整数,日 1..31
  },
}

所有字段都是可选的。Tinode 客户端目前只使用 fn、photo、org、note、comm 字段。如果将来需要其他字段,将从相应的 vCard 字段采用。