插件架构
PWM CRM 插件系统采用微前端架构,每个插件是一个独立的、可热插拔的Module。插件运行在沙箱环境Medium,通过标准化的 Plugin API 与主平台交互。
插件类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 行业插件 | 针对特定行业的业务流程定制 | 快消Shelf Check、医药Compliant Visits |
| 功能插件 | 扩展通用Module | Contract Management、Invoicing、营销Auto化 |
| 集成插件 | 对接第三方系统 | ERP 同步、财务对接、企业微信 |
| AI 插件 | 扩展 AI Capabilities | 自定义行业模型、专用识别模型 |
技术栈
- 前端:React / Vue / 原生 JS,Supports任意前端框架
- 后端:Node.js / Python / Go,提供 Serverless 函数Supports
- 样式:CSS Modules / Tailwind CSS,Auto隔离样式
- 通信:基于 postMessage 的安全通信通道
Quick Start
1. 安装 CLI 工具
npm install -g @pwmapp/cli
# 或
yarn global add @pwmapp/cli
2. 创建插件项目
pwmapp plugin create my-first-plugin
cd my-first-plugin
CLI 会交互式询问插件名称、描述、类型、模板等信息,生成项目骨架。
3. 项目结构
my-first-plugin/
├── manifest.json # 插件清单(必填)
├── package.json
├── src/
│ ├── index.js # 插件入口
│ ├── App.jsx # 主组件
│ └── styles.css # 样式
├── server/
│ └── functions/ # Serverless 函数(Optional)
│ └── hello.js
├── assets/ # 静态Resources
│ └── icon.png
└── README.md
4. 本地开发调试
pwmapp plugin dev
启动本地开发服务器,在 PWM CRM 管理后台「Settings - 插件 - 开发者模式」Medium输入本地地址(默认 http://localhost:3000),即可实时预览插件效果。
5. 构建与打包
pwmapp plugin build
pwmapp plugin package
构建产物为 .tcplugin 格式,可直接上传到Plugin Marketplace或私有部署环境。
插件清单(manifest.json)
manifest.json 是插件的核心配置文件,定义了插件的基本信息、权限、扩展点等。
{
"manifest_version": "1.0",
"id": "com.example.order-sync",
"name": "Order Sync插件",
"version": "1.2.0",
"description": "将 PWM CRM 商机同步到 ERP 系统,Auto创建订单",
"author": {
"name": "Example Inc.",
"email": "dev@example.com",
"url": "https://example.com"
},
"type": "integration",
"permissions": [
"opportunity:read",
"opportunity:write",
"customer:read",
"webhook:subscribe",
"external_api:call"
],
"entry": {
"main": "src/index.js",
"settings": "src/Settings.jsx"
},
"extension_points": [
{
"point": "opportunity.detail.tab",
"title": "Order Sync",
"component": "OrderSyncTab"
},
{
"point": "global.command",
"title": "同步订单到ERP",
"command": "sync-to-erp"
}
],
"webhooks": [
"opportunity.stage_changed",
"opportunity.won"
],
"serverless": {
"functions": [
{
"name": "syncOrder",
"path": "server/functions/syncOrder.js",
"trigger": "webhook"
}
]
},
"icon": "assets/icon.png",
"homepage_url": "https://example.com/order-sync",
"support_url": "https://example.com/support"
}
插件生命周期
插件有以下生命周期Status:
- 已安装:用户安装插件,但未启用
- 已启用:插件正常运行,扩展点已注册
- 已禁用:插件被暂停,扩展点临时移除
- 已卸载:插件被移除,数据按策略清理
插件可通过生命周期钩子执行初始化和清理逻辑:
import { registerPlugin } from '@pwmapp/sdk';
registerPlugin({
async onInstall(context) {
// 插件安装时执行,初始化数据
console.log('Plugin installed', context);
},
async onEnable(context) {
// 插件启用时执行
},
async onDisable(context) {
// 插件禁用时执行
},
async onUninstall(context) {
// 插件卸载时执行,清理数据
}
});
UI 扩展点
插件可以在以下位置注入 UI 组件:
| 扩展点 ID | 位置 | 说明 |
|---|---|---|
customer.detail.tab | Client详情页 Tab | 在Client详情页添加自定义 Tab |
customer.detail.panel | Client详情页侧边栏 | 在Client详情页侧边栏添加面板 |
opportunity.detail.tab | 商机详情页 Tab | 在商机详情页添加自定义 Tab |
visit.detail.action | 拜访详情页操作栏 | 添加自定义操作按钮 |
dashboard.widget | 仪表盘 | 添加自定义数据看板组件 |
global.command | 全局命令 | 注册 AI Assistant可调用的命令 |
global.menu | Main NavigationMenu | 添加独立页面入口 |
settings.page | Settings页面 | 添加插件Settings页 |
注册扩展点示例:
import { registerExtension } from '@pwmapp/sdk';
import OrderSyncTab from './OrderSyncTab';
registerExtension('opportunity.detail.tab', {
id: 'order-sync-tab',
title: 'Order Sync',
icon: 'sync',
component: OrderSyncTab,
// 控制是否显示
shouldShow: (context) => context.opportunity.stage === 'won'
});
数据访问
插件通过 SDK 访问 PWM CRM 数据,权限由 manifest.json Medium声明的 permissions 控制。
import { api } from '@pwmapp/sdk';
// 获取Client列表
const customers = await api.customers.list({
page: 1,
page_size: 20,
filter: { level: 'A' }
});
// 创建商机
const opportunity = await api.opportunities.create({
customer_id: 'cus_001',
name: '年度采购合作',
amount: 500000,
stage: 'needs_analysis'
});
// 调用自定义 Serverless 函数
const result = await api.functions.call('syncOrder', {
opportunity_id: 'opp_001'
});
权限说明:插件只能访问 manifest.json Medium声明权限范围内的数据。未声明权限的 API Calls将被拒绝。用户在安装插件时会看到权限申请列表。
AI Capabilities集成
插件可以调用 PWM CRM 的 AI Capabilities,Or以注册自定义 AI 命令。
调用 AI Capabilities
import { ai } from '@pwmapp/sdk';
// AI 对话
const response = await ai.chat({
query: '分析这个Client的跟进情况',
context: { customer_id: 'cus_001' }
});
// Smart摘要
const summary = await ai.summarize({
text: '大量的Follow-up Records文本...',
format: 'bullet_points'
});
// 商机Scoring
const score = await ai.scoreOpportunity({
opportunity_id: 'opp_001'
});
注册 AI 命令
插件可以注册自定义命令,让用户通过 AI Assistant自然语言调用插件功能:
import { registerAICommand } from '@pwmapp/sdk';
registerAICommand({
command: 'sync-to-erp',
description: '将当前商机同步到 ERP 系统创建订单',
examples: ['同步这个订单到ERP', '把商机推送到ERP'],
handler: async (context) => {
const { opportunity } = context;
const result = await syncToERP(opportunity);
return {
type: 'card',
title: 'Order Sync成功',
content: `订单号:${result.order_no}`,
actions: [{ label: 'View订单', url: result.url }]
};
}
});
事件订阅
插件可以订阅 PWM CRM 的业务事件,在事件发生时触发 Serverless 函数执行。
// server/functions/onOpportunityWon.js
export default async function handler(event, context) {
const { type, data } = event;
if (type === 'opportunity.won') {
// 商机赢单时,Auto同步到 ERP
const order = await syncToERP(data.opportunity);
// 在 PWM CRM Medium创建Follow-up Records
await context.api.activities.create({
customer_id: data.opportunity.customer_id,
type: 'system',
content: `商机已赢单,ERP 订单号:${order.order_no}`
});
}
return { success: true };
}
插件Settings页
插件可以提供Settings页面,让用户配置插件参数。Settings页组件接收 settings 和 onChange 两个 props:
测试与调试
本地调试
使用 pwmapp plugin dev 启动开发服务器,Supports热更新。在浏览器开发者工具Medium可以View插件的 console 输出和网络请求。
单元测试
SDK 提供测试工具包,Supports Mock API Calls:
import { mockApi } from '@pwmapp/sdk/testing';
mockApi.customers.list.mockResolvedValue({
items: [{ id: 'cus_001', name: '测试Client' }]
});
// 运行测试...
审核前检查清单
- manifest.json 信息完整,权限声明最小化
- 插件图标符合规范(512×512 PNG,圆角)
- 所有外部请求使用 HTTPS
- 不收集用户隐私数据(如需收集需明确告知)
- 错误处理完善,不影响主平台稳定性
- 提供完整的 README 和使用说明
上架流程
- Submit审核:使用
pwmapp plugin submitSubmit插件到Plugin Marketplace - 审核Medium:PWM CRM 团队进行安全审核和功能测试,通常 3-5 个工作日
- 审核通过:插件上架到Plugin Marketplace,所有用户可安装
- 发布更新:新版本同样需要审核,但流程更快(通常 1-2 个工作日)
企业私有插件:Enterprise用户可以将插件发布到企业私有Plugin Marketplace,仅本企业员工可见,无需公开审核。
示例插件
我们提供多个开源示例插件,帮助您快速上手:
- Order Sync插件:商机赢单后Auto同步到 ERP 创建订单
- Contract Management插件:在商机详情页添加Contract Management Tab,Supports电子签章
- 营销Auto化插件:基于Client行为触发Auto化营销流程
- 快消Shelf Check插件:拍照 AI 识别门店陈列问题,生成整改建议
- 企业微信集成插件:双向同步Client、Follow-up Records,Supports消息通知