商机指令解析
灵感:能力工具箱 business-online-query(对齐企微 BOT:商机 购/转/关键词)。
> 小四原创:单行文本 → { action, side, keyword },再本地过滤列表。
> 不实现企微机器人托管/推送通道,只做客户端指令语义。
何时使用
- 搜索框输入「商机 购」「商机 建筑工程」
- 企微 BOT 文本转筛选项
- Demo/工具箱里 mock 列表按指令过滤
硬约束
- 识别前缀
商机;无前缀则整段作keyword,side=all。 购/购买/购买方→side=buyer;转/转让/转让方→side=seller。帮助/help/空串 →action=help,不筛数据。- 过滤只比公司名与标签字符串包含,大小写不敏感。
- 实现要点注释标 小四原创。
- 不调用私有业务 API;侧别枚举用通用
buyer|seller|all。
推荐实现
export type OppSide = 'all' | 'buyer' | 'seller'
export type OppCmd = {
action: 'help' | 'search'
side: OppSide
keyword: string
raw: string
}
// 小四原创:商机快捷指令
export function parseOppCommand(text: string): OppCmd {
const raw = String(text || '').trim()
if (!raw || raw === '帮助' || /^help$/i.test(raw)) {
return { action: 'help', side: 'all', keyword: '', raw }
}
if (raw.startsWith('商机')) {
const rest = raw.replace(/^商机\s*/, '').trim()
if (!rest) return { action: 'search', side: 'all', keyword: '', raw }
if (['购', '购买', '购买方'].includes(rest)) {
return { action: 'search', side: 'buyer', keyword: '', raw }
}
if (['转', '转让', '转让方'].includes(rest)) {
return { action: 'search', side: 'seller', keyword: '', raw }
}
return { action: 'search', side: 'all', keyword: rest, raw }
}
return { action: 'search', side: 'all', keyword: raw, raw }
}
export function filterByOppCmd<T extends { side: string; title: string; tags?: string[] }>(
items: T[],
cmd: OppCmd,
): T[] {
if (cmd.action === 'help') return items
const kw = cmd.keyword.toLowerCase()
return items.filter((it) => {
if (cmd.side !== 'all' && it.side !== cmd.side) return false
if (!kw) return true
const hay = `${it.title}${(it.tags || []).join('')}`.toLowerCase()
return hay.includes(kw)
})
}
Agent 步骤
- 搜索框/BOT 入站文本调用
parseOppCommand。 help时展示用法卡片;否则filterByOppCmd刷新列表。- Toast 可简述:
侧别=购方 · 关键词=…。 - 自测:
商机 购、商机 建筑、帮助、无前缀关键词。
不要做
- 在本 Skill 内实现企微回调验签与消息推送全链路。
- 把侧别写死成项目私有枚举名而不加映射层。
附加
- README.md · reference.md · templates/usage.md