52 lines
1.8 KiB
Markdown
52 lines
1.8 KiB
Markdown
# Node.js 接入示例
|
|
|
|
示例仅依赖 Node.js 18 及以上版本自带的 `fetch` 和 `crypto`,可以复制到业务项目后端使用。
|
|
|
|
在通知中心仓库内可执行 `npm run test:example` 验证客户端签名和请求格式。
|
|
|
|
```js
|
|
import { YouYiDianNotificationClient } from './notification-client.mjs'
|
|
|
|
const client = new YouYiDianNotificationClient({
|
|
baseUrl: process.env.YYD_NOTIFICATION_CENTER_URL,
|
|
projectCode: process.env.YYD_NOTIFICATION_PROJECT_CODE,
|
|
projectSecret: process.env.YYD_NOTIFICATION_PROJECT_SECRET,
|
|
})
|
|
|
|
const recipientUserId = '16408293139985728'
|
|
const delivery = await client.send({
|
|
idempotencyKey: `asset_disposal:53:${recipientUserId}:v1`,
|
|
recipientUserId,
|
|
title: '资产报废待审批',
|
|
content: [
|
|
'**申请时间:** 2026年7月16日 14:30',
|
|
'',
|
|
'**资产:** 摄影灯 A-102',
|
|
'',
|
|
'**申请人:** 无邪',
|
|
].join('\n'),
|
|
actionTitle: '立即审批',
|
|
actionUrl: 'https://asset.jiansun.vip/workflows/disposals/53',
|
|
})
|
|
|
|
console.log('通知已受理:', delivery.id, delivery.status)
|
|
|
|
const latest = await client.getDelivery(delivery.id)
|
|
console.log('当前投递状态:', latest.status)
|
|
```
|
|
|
|
如果业务项目只能提供花名,先由通知中心维护人登记花名映射,然后将发送参数中的 `recipientUserId` 替换为:
|
|
|
|
```js
|
|
recipientAlias: '海棠'
|
|
```
|
|
|
|
`recipientUserId` 与 `recipientAlias` 只能传一个;未登记花名会返回 `RECIPIENT_ALIAS_NOT_FOUND`,不会发送通知。
|
|
|
|
注意:
|
|
|
|
- 这段代码只能运行在后端。
|
|
- 不要把三个环境变量使用 `NEXT_PUBLIC_`、`VITE_` 等前端公开前缀。
|
|
- 业务调用失败后重试时复用原幂等键,但每次 HTTP 请求会自动生成新的 nonce。
|
|
- 多人通知请逐人调用 `send`,并把收件人 `userId` 或已登记花名放入幂等键。
|