消息模板渲染(Mustache)
灵感:能力工具箱 mustache-tpl(pkg: mustache)。
用 {{name}} 一类占位符本地渲染短信/企微跟进话术,不请求后端模板引擎。
何时使用
- 跟进话术、预约提醒短信草稿
- 企微/短信模板预览与一键填变量
- 需要逻辑简单、无任意代码执行的模板
硬约束
- 依赖
mustache;仅做变量替换与基础 section,禁止接入可执行自定义函数当沙箱逃逸。 - 模板与数据均为本地字符串/JSON;渲染失败给中文原因。
- 缺省变量策略明确:空字符串或保留占位提示(如
[未填客户名]),不要输出undefined。 - 提供 1~2 条中文示例模板(跟进预约、回访感谢)。
- 不发起网络请求;不把客户全文上传第三方。
推荐实现要点
import Mustache from 'mustache'
Mustache.escape = (t) => t // 短信/纯文本场景可关闭 HTML 转义;若进 HTML 页则保持默认转义
export type MsgVars = {
name?: string
company?: string
followDate?: string
owner?: string
}
const DEFAULTS: Required<MsgVars> = {
name: '[未填称呼]',
company: '[未填公司]',
followDate: '[未填日期]',
owner: '[未填顾问]',
}
export function renderFollowMsg(template: string, vars: MsgVars): string {
const view = { ...DEFAULTS, ...Object.fromEntries(
Object.entries(vars).map(([k, v]) => [k, (v ?? '').toString().trim() || DEFAULTS[k as keyof MsgVars]]),
) }
return Mustache.render(template, view).trim()
}
export const TPL_FOLLOW =
'{{name}}您好,我是{{owner}}。我们约在{{followDate}}再沟通{{company}}一事,届时见。'
Agent 步骤
- 接入
mustache,封装renderFollowMsg与示例模板。 - 自测:缺 name 时出现占位提示;齐变量时文案通顺。
- UI:左模板右预览,变量表单联动。
附加
- README.md · reference.md · templates/usage.md