Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
564 lines
14 KiB
Markdown
564 lines
14 KiB
Markdown
# Day 3 - 隡<><E99AA1>敺桐縑<E6A190><E7B891><EFBFBD>撘<EFBFBD><E69298>穃<EFBFBD><E7A983>鞱扇敶?
|
||
|
||
**撘<><E69298>烐𠯫<E78390>?*嚗?026-01-02
|
||
**撘<><E69298>𤏸<EFBFBD>?*嚗鋫I + <20>冽<EFBFBD><E586BD>譍<EFBFBD>
|
||
**<EFBFBD><EFBFBD>𧋦**嚗鯝1.3
|
||
**<EFBFBD>嗆<EFBFBD>?*嚗尠<E59A97> 隡<><E99AA1>敺桐縑URL撉諹<E69289><E8ABB9>𣂼<EFBFBD>嚗<EFBFBD>抅蝖<E68A85><E89D96><EFBFBD><EFBFBD>摰峕<E691B0>
|
||
|
||
---
|
||
|
||
## <20><> 撘<><E69298>烐<EFBFBD>閫?
|
||
|
||
### <20>格<EFBFBD>
|
||
摰䂿緵隡<EFBFBD><EFBFBD>敺桐縑<EFBFBD><EFBFBD><EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>祆<EFBFBD><EFBFBD>舀綫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>噼<EFBFBD>憭<EFBFBD><EFBFBD>嚗䔶蛹 IIT Manager Agent 撱箇<E692B1>銝?PI <20><><EFBFBD><EFBFBD>𡁏<EFBFBD><F0A1818F>瓐<EFBFBD>?
|
||
|
||
### <20>鞉<EFBFBD>
|
||
- <20>?隡<><E99AA1>敺桐縑瘨<E7B891><E798A8><EFBFBD>券<EFBFBD><E588B8><EFBFBD><EFBFBD>∴<EFBFBD>WechatService嚗?
|
||
- <20>?隡<><E99AA1>敺桐縑<E6A190>噼<EFBFBD>憭<EFBFBD><E686AD>嚗ÁechatCallbackController嚗?
|
||
- <20>?URL撉諹<E69289>瘚贝<E7989A><E8B49D>朞<EFBFBD>
|
||
- <20>?摰<><E691B0>韐冽綉Worker嚗峕𣈲<E5B395><F0A388B2><EFBFBD>銝𡁜凝靽⊥綫<E28AA5>?
|
||
- <20>?natapp<70><70><EFBFBD>蝛輸<E89D9B>誯<EFBFBD>蝵格<E89DB5><E6A0BC>?
|
||
|
||
### 餈𥕦漲
|
||
- 璅∪<E79285><E288AA>港<EFBFBD>摰峕<E691B0>摨佗<E691A8>**35% <20>?50%**
|
||
- 隡<><E99AA1>敺桐縑<E6A190><E7B891><EFBFBD>嚗?*0% <20>?80%**嚗㇎RL撉諹<E69289>摰峕<E691B0>嚗<EFBFBD><E59A97>蝡臬<E89DA1>蝡舀<E89DA1>霂𤏪<E99C82>
|
||
|
||
---
|
||
|
||
## <20><>儭?<3F>嗆<EFBFBD>霈曇恣
|
||
|
||
### <20>詨<EFBFBD>蝏<EFBFBD>辣
|
||
|
||
```
|
||
<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||
<EFBFBD>? 隡<><E99AA1>敺桐縑<E6A190><E7B891><EFBFBD><EFBFBD>嗆<EFBFBD> <20>?
|
||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||
<EFBFBD>? <20>?
|
||
<EFBFBD>? REDCap DET <20><><EFBFBD><EFBFBD><EFBFBD>? WebhookController <20><><EFBFBD><EFBFBD><EFBFBD>? JobQueue <20>?
|
||
<EFBFBD>? <20>? <20>? <20>?
|
||
<EFBFBD>? Audit Logs iit_quality_check <20>?
|
||
<EFBFBD>? Worker <20>?
|
||
<EFBFBD>? <20>? <20>?
|
||
<EFBFBD>? WechatService <20>?
|
||
<EFBFBD>? <20>? <20>?
|
||
<EFBFBD>? 隡<><E99AA1>敺桐縑 API <20>?
|
||
<EFBFBD>? <20>? <20>?
|
||
<EFBFBD>? PI <20>𧢲㦤 <20>?
|
||
<EFBFBD>? <20>?
|
||
<EFBFBD>? 隡<><E99AA1>敺桐縑瘨<E7B891><E798A8> <20><><EFBFBD><EFBFBD><EFBFBD>? WechatCallbackController <20><><EFBFBD><EFBFBD><EFBFBD>? AI憭<49><E686AD> <20>?
|
||
<EFBFBD>? <20>? <20>?
|
||
<EFBFBD>? WechatService <20><><EFBFBD><EFBFBD><EFBFBD>? 銝餃𢆡<E9A483>券<EFBFBD><E588B8><EFBFBD>憭? <20>?
|
||
<EFBFBD>? <20>?
|
||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||
```
|
||
|
||
### <20><><EFBFBD>舫<EFBFBD>匧<EFBFBD>
|
||
|
||
| 蝏<>辣 | <20><><EFBFBD>舀䲮獢?| <20>笔<EFBFBD> |
|
||
|------|----------|------|
|
||
| 瘨<><E798A8><EFBFBD>㰘圾撖?| @wecom/crypto | 隡<><E99AA1>敺桐縑摰䀹䲮<E480B9>刻<EFBFBD>摨?|
|
||
| XML閫<4C><E996AB> | xml2js | <20>鞟<EFBFBD>蝔喳<E89D94><E596B3><EFBFBD>ML閫<4C><E996AB>摨?|
|
||
| <20><><EFBFBD>蝛輸<E89D9B>?| natapp | <20>砍𧑐撘<F0A79190><E69298>𤏸<EFBFBD>霂?|
|
||
| 撘<>郊憭<E9838A><E686AD> | setImmediate | 閫<><E996AB>5蝘坿<E89D98><E59DBF>園<EFBFBD><E59C92>?|
|
||
|
||
---
|
||
|
||
## <20>凃 隞<><E99A9E>摰䂿緵
|
||
|
||
### 1. WechatService.ts嚗<73><E59A97>銝𡁜凝靽⊥綫<E28AA5><E7B6AB><EFBFBD><EFBFBD>∴<EFBFBD>
|
||
|
||
**<EFBFBD><EFBFBD>辣頝臬<EFBFBD>**嚗䫤backend/src/modules/iit-manager/services/WechatService.ts`
|
||
**隞<><E99A9E>銵峕㺭**嚗?14銵?
|
||
|
||
**<2A>詨<EFBFBD><E8A9A8>蠘<EFBFBD>**嚗?
|
||
```typescript
|
||
class WechatService {
|
||
// 1. Access Token 蝞∠<E89D9E>嚗<EFBFBD><E59A97>摮?+ <20>芸𢆡<E88AB8>瑟鰵嚗?
|
||
async getAccessToken(): Promise<string>
|
||
|
||
// 2. <20>煾<EFBFBD><E785BE><EFBFBD><EFBFBD>祆<EFBFBD><E7A586>?
|
||
async sendTextMessage(userId: string, content: string): Promise<void>
|
||
|
||
// 3. <20>煾<EFBFBD>?Markdown 瘨<><E798A8>
|
||
async sendMarkdownMessage(userId: string, content: string): Promise<void>
|
||
|
||
// 4. 摰∟恣<E2889F>亙<EFBFBD>霈啣<E99C88>
|
||
private async recordAuditLog(data): Promise<void>
|
||
}
|
||
```
|
||
|
||
**<2A><><EFBFBD>臭漁<E887AD>?*嚗?
|
||
- <20>?Access Token 蝻枏<E89DBB><E69E8F>箏<EFBFBD>嚗?200蝘𡜐<E89D98><F0A19C90>𣂼<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD>瑟鰵嚗?
|
||
- <20>?摰峕㟲<E5B395><E39FB2><EFBFBD>霂臬<E99C82><E887AC><EFBFBD><EFBFBD><EFBFBD>滩<EFBFBD><E6BBA9>箏<EFBFBD>
|
||
- <20>?霂衣<E99C82><E8A1A3><EFBFBD>𠯫敹𡑒扇敶𤏪<E695B6>corpId<49><64>gentId蝑㚁<E89D91>
|
||
- <20>?摰∟恣<E2889F>亙<EFBFBD><E4BA99>芸𢆡霈啣<E99C88>
|
||
|
||
**<2A>臬<EFBFBD><E887AC>㗛<EFBFBD>**嚗?
|
||
```env
|
||
WECHAT_CORP_ID=ww6ab493470ab4f377
|
||
WECHAT_AGENT_ID=1000002
|
||
WECHAT_CORP_SECRET=AZIVxMtoLb0rEszXS81e4dBRl-I9kgTjygIS0cFfENU
|
||
```
|
||
|
||
---
|
||
|
||
### 2. WechatCallbackController.ts嚗<73><E59A97>銝𡁜凝靽∪<E99DBD>靚<EFBFBD><E99D9A><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
**<2A><>辣頝臬<E9A09D>**嚗䫤backend/src/modules/iit-manager/controllers/WechatCallbackController.ts`
|
||
**隞<><E99A9E>銵峕㺭**嚗?01銵?
|
||
|
||
**<EFBFBD>詨<EFBFBD><EFBFBD>蠘<EFBFBD>**嚗?
|
||
```typescript
|
||
class WechatCallbackController {
|
||
// 1. URL 撉諹<E69289>嚗𠃑ET 霂瑟<E99C82>嚗?
|
||
async handleVerification(request, reply): Promise<void>
|
||
|
||
// 2. 瘨<><E798A8><EFBFBD>交𤣰嚗㇊OST 霂瑟<E99C82> + 撘<>郊憭<E9838A><E686AD>嚗?
|
||
async handleCallback(request, reply): Promise<void>
|
||
|
||
// 3. 撘<>郊瘨<E9838A><E798A8>憭<EFBFBD><E686AD>
|
||
private async processMessageAsync(...): Promise<void>
|
||
|
||
// 4. <20>冽<EFBFBD>瘨<EFBFBD><E798A8>憭<EFBFBD><E686AD>嚗<EFBFBD><E59A97><EFBFBD>株<EFBFBD><E6A0AA>寥<EFBFBD> + 銝𡁜𦛚<F0A1819C>餉<EFBFBD>嚗?
|
||
private async processUserMessage(message): Promise<void>
|
||
|
||
// 5. 蝑曉<E89D91>撉諹<E69289>
|
||
private verifySignature(...): boolean
|
||
}
|
||
```
|
||
|
||
**<EFBFBD><EFBFBD><EFBFBD>臭漁<EFBFBD>?*嚗?
|
||
- <20>?**撘<>郊<EFBFBD>𧼮<EFBFBD>璅∪<E79285>**嚗𡁶<E59A97><F0A181B6>唾<EFBFBD><E594BE>裇"success"`嚗<><E59A97><EFBFBD>啣<EFBFBD>甇亙<E79487><E4BA99><EFBFBD><EFBFBD>閫<EFBFBD><E996AB>5蝘坿<E89D98><E59DBF>塚<EFBFBD>
|
||
- <20>?**瘨<><E798A8>閫<EFBFBD><E996AB>**嚗帋蝙<E5B88B>?`@wecom/crypto` <20>?`decrypt(encodingAESKey, encrypt)` <20>賣㺭
|
||
- <20>?**蝑曉<E89D91>撉諹<E69289>**嚗帋蝙<E5B88B>?`@wecom/crypto` <20>?`getSignature(token, timestamp, nonce, data)` <20>賣㺭
|
||
- <20>?**<2A>誩㦛霂<E3A69B><E99C82>**嚗𡁏𣈲<F0A1818F>?瘙<><E79899>?<3F>?撣桀𨭌"<22>?<3F>唳<EFBFBD><E594B3>?蝑匧<E89D91><E58CA7>株<EFBFBD>
|
||
- <20>?**銝餃𢆡<E9A483>券<EFBFBD>?*嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>銝餃𢆡靚<F0A286A1>鍂 WechatService <20>券<EFBFBD><E588B8><EFBFBD>憭?
|
||
|
||
**<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>**嚗?
|
||
```env
|
||
WECHAT_TOKEN=oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq
|
||
WECHAT_ENCODING_AES_KEY=v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO
|
||
```
|
||
|
||
---
|
||
|
||
### 3. 頝舐眏<E88890>滨蔭嚗ǐoutes/index.ts嚗?
|
||
|
||
**<EFBFBD>啣<EFBFBD>頝舐眏**嚗?
|
||
```typescript
|
||
// GET: URL撉諹<E69289>嚗<EFBFBD><E59A97>銝𡁜凝靽⊿<E99DBD>蝵桀<E89DB5>靚<EFBFBD>RL<52>嗡蝙<E597A1>剁<EFBFBD>
|
||
fastify.get('/api/v1/iit/wechat/callback',
|
||
wechatCallbackController.handleVerification.bind(wechatCallbackController)
|
||
);
|
||
|
||
// POST: <20>交𤣰隡<F0A4A3B0><E99AA1>敺桐縑瘨<E7B891><E798A8>
|
||
fastify.post('/api/v1/iit/wechat/callback',
|
||
wechatCallbackController.handleCallback.bind(wechatCallbackController)
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
### 4. 摰<><E691B0>韐冽綉Worker嚗ǎndex.ts嚗?
|
||
|
||
**<EFBFBD><EFBFBD>辣頝臬<EFBFBD>**嚗䫤backend/src/modules/iit-manager/index.ts`
|
||
**<2A>啣<EFBFBD><E595A3>蠘<EFBFBD>**嚗朞捶<E69C9E>批<EFBFBD><E689B9>𣂼<EFBFBD><F0A382BC>芸𢆡<E88AB8>券<EFBFBD><E588B8><EFBFBD>銝𡁜凝靽⊿<E99DBD>𡁶䰻
|
||
|
||
**隞<><E99A9E><EFBFBD>餉<EFBFBD>**嚗?
|
||
```typescript
|
||
jobQueue.process('iit_quality_check', async (job) => {
|
||
// 1. <20>瑕<EFBFBD>憿寧𤌍<E5AFA7>滨蔭
|
||
const project = await prisma.$queryRaw`...`;
|
||
const piUserId = project.notification_config.wechat_user_id;
|
||
|
||
// 2. <20>扯<EFBFBD>韐冽綉璉<E7B689><E79289>?
|
||
const qualityCheckResult = await performSimpleQualityCheck(...);
|
||
|
||
// 3. <20><>遣隡<E981A3><E99AA1>敺桐縑<E6A190>𡁶䰻瘨<E4B0BB><E798A8>
|
||
const message = buildWechatNotification(...);
|
||
|
||
// 4. <20>券<EFBFBD><E588B8><EFBFBD>隡<EFBFBD><E99AA1>敺桐縑
|
||
await wechatService.sendTextMessage(piUserId, message);
|
||
});
|
||
```
|
||
|
||
**<2A>𡁶䰻瘨<E4B0BB><E798A8><EFBFBD>澆<EFBFBD>**嚗?
|
||
```
|
||
<EFBFBD><EFBFBD> IIT Manager <20>唳旿敶訫<E695B6><E8A8AB>𡁶䰻
|
||
|
||
憿寧𤌍嚗魩est0102
|
||
霈啣<EFBFBD>ID嚗鯴xx
|
||
銵典<EFBFBD>嚗鯴xx
|
||
<EFBFBD>園𡢿嚗?026-01-02 23:55:00
|
||
|
||
<EFBFBD>働 韐冽綉撱箄悅 (3憿?嚗?
|
||
1. <20>?<3F>唳旿敶訫<E695B6><E8A8AB>𦠜𧒄嚗?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
2. <20>?霈啣<E99C88>ID<49>㗇<EFBFBD>
|
||
3. <20>?銵典<E98AB5>嚗飱emographics
|
||
|
||
<EFBFBD>?<3F>唳旿韐券<E99F90><E588B8>臬末嚗峕<E59A97><E5B395>擧遬<E693A7>桅<EFBFBD>
|
||
|
||
<EFBFBD>俥 憒<><E68692><EFBFBD>煾䔮嚗諹窈<E8ABB9>𧼮<EFBFBD>"撣桀𨭌"<22>亦<EFBFBD><E4BAA6>游<EFBFBD><E6B8B8>蠘<EFBFBD>
|
||
```
|
||
|
||
---
|
||
|
||
## <20>圲 撘<><E69298>𤏸<EFBFBD>蝔衤<E89D94><E8A1A4>桅<EFBFBD>閫<EFBFBD><E996AB>
|
||
|
||
### <20>桅<EFBFBD>1嚗𡁶㴓憓<E3B493><E68693><EFBFBD>誩<EFBFBD>蝘唬<E89D98>銝<EFBFBD><E98A9D>?<3F>𩤃<EFBFBD>
|
||
|
||
**<2A>啗情**嚗?
|
||
```
|
||
hasSecret: false
|
||
Error: 隡<><E99AA1>敺桐縑<E6A190>滨蔭銝滚<E98A9D><E6BB9A>湛<EFBFBD>霂瑟<E99C82><E7919F>亦㴓憓<E3B493><E68693><EFBFBD>?
|
||
```
|
||
|
||
**<2A>笔<EFBFBD>**嚗?
|
||
- <20>臬<EFBFBD><E887AC>㗛<EFBFBD>嚗䫤WECHAT_CORP_SECRET`
|
||
- 隞<><E99A9E>霂餃<E99C82>嚗䫤WECHAT_AGENT_SECRET`
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>**嚗?
|
||
```typescript
|
||
// 靽格㺿<E6A0BC>?
|
||
agentSecret: process.env.WECHAT_AGENT_SECRET
|
||
|
||
// 靽格㺿<E6A0BC>?
|
||
agentSecret: process.env.WECHAT_CORP_SECRET
|
||
```
|
||
|
||
---
|
||
|
||
### <20>桅<EFBFBD>2嚗鋣wecom/crypto 撖澆<E69296><E6BE86>孵<EFBFBD><E5ADB5>躰秤 <20>?
|
||
|
||
**<EFBFBD>啗情**嚗?
|
||
```
|
||
TypeError: WXBizMsgCrypt is not a constructor
|
||
```
|
||
|
||
**<EFBFBD>笔<EFBFBD>**嚗?
|
||
`@wecom/crypto` 銝齿糓銝<E7B393>銝芰掩嚗諹<E59A97>峕糓撖澆枂鈭?銝芰𡠺蝡讠<E89DA1><E8AEA0>賣㺭嚗?
|
||
```javascript
|
||
{
|
||
decrypt: [Function: decrypt],
|
||
encrypt: [Function: encrypt],
|
||
getJsApiSignature: [Function: getJsApiSignature],
|
||
getSignature: [Function: getSignature]
|
||
}
|
||
```
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>**嚗?
|
||
```typescript
|
||
// 靽格㺿<E6A0BC>㵪<EFBFBD><E3B5AA>躰秤嚗?
|
||
import WXBizMsgCrypt from '@wecom/crypto';
|
||
this.wxcrypt = new WXBizMsgCrypt(token, aesKey, corpId);
|
||
|
||
// 靽格㺿<E6A0BC>𠬍<EFBFBD>甇<EFBFBD>&嚗?
|
||
const require = createRequire(import.meta.url);
|
||
const { decrypt, encrypt, getSignature } = require('@wecom/crypto');
|
||
```
|
||
|
||
---
|
||
|
||
### <20>桅<EFBFBD>3嚗飱ecrypt <20>賣㺭<E8B3A3><E3BAAD>㺭<EFBFBD>躰秤 <20>?
|
||
|
||
**<EFBFBD>啗情**嚗?
|
||
```
|
||
Error: invalid encodingAESKey
|
||
```
|
||
|
||
**<EFBFBD>笔<EFBFBD>**嚗?
|
||
<EFBFBD>朞<EFBFBD>瘚贝<EFBFBD><EFBFBD>𡁏𧋦<EFBFBD>𤑳緵嚗䈣decrypt` <20>賣㺭<E8B3A3>芷<EFBFBD>閬?**2銝芸<E98A9D><E88AB8>?*嚗?
|
||
```javascript
|
||
function decrypt(encodingAESKey, encrypt) { ... }
|
||
```
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>**嚗?
|
||
```typescript
|
||
// 靽格㺿<E6A0BC>㵪<EFBFBD><E3B5AA>躰秤 - 4銝芸<E98A9D><E88AB8>堆<EFBFBD>
|
||
const result = decrypt(this.token, this.encodingAESKey, this.corpId, echostr);
|
||
|
||
// 靽格㺿<E6A0BC>𠬍<EFBFBD>甇<EFBFBD>& - 2銝芸<E98A9D><E88AB8>堆<EFBFBD>
|
||
const result = decrypt(this.encodingAESKey, echostr);
|
||
```
|
||
|
||
---
|
||
|
||
### <20>桅<EFBFBD>4嚗関oken摮㛖泵霂<E6B3B5><E99C82><EFBFBD>躰秤 <20>𩤃<EFBFBD>
|
||
|
||
**<2A>啗情**嚗?
|
||
```
|
||
<EFBFBD>𩤃<EFBFBD> 蝑曉<E89D91>撉諹<E69289>憭梯揖
|
||
expected: 0b7cf05d6cb23ab9ce2efca6fdc659f32051eabe
|
||
calculated: 6f79cabd3e9eea5eb10f55abdcf087ce6393d51d
|
||
```
|
||
|
||
**<2A>笔<EFBFBD>**嚗?
|
||
Token<EFBFBD><EFBFBD>洵3銝芸<EFBFBD>蝚血捆<EFBFBD>𤘪毽瘛<EFBFBD><EFBFBD>
|
||
- `oX1R...`嚗<>㺭摮?嚗?
|
||
- `oXlR...`嚗<><E59A97><EFBFBD>坔<EFBFBD>瘥徃嚗?
|
||
|
||
<EFBFBD>𡒊垢<EFBFBD>亙<EFBFBD><EFBFBD>曄內<EFBFBD><EFBFBD>糓 `oXlR...`嚗<><E59A97><EFBFBD>耱嚗㚁<E59A97><E39A81>諹<EFBFBD>霂訫極<E8A8AB>瑚葉<E7919A>航<EFBFBD>颲枏<E9A2B2>鈭<EFBFBD>㺭摮?<3F>?
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>**嚗?
|
||
- <20>湔𦻖隞?`.env` <20><>辣憭滚<E686AD>蝎䁅斐嚗屸<E59A97><E5B1B8>齿<EFBFBD><E9BDBF>刻<EFBFBD><E588BB>?
|
||
- 蝖株恕 Token 銝綽<E98A9D>`oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq`
|
||
|
||
---
|
||
|
||
### <20>桅<EFBFBD>5嚗鍃ncodingAESKey <20>湔鰵 <20><>
|
||
|
||
**<2A>啗情**嚗?
|
||
<EFBFBD>抒<EFBFBD> EncodingAESKey <20>航<EFBFBD><E888AA>澆<EFBFBD><E6BE86>厰䔮憸睃紡<E79D83>渲圾撖<E59CBE>仃韐乓<E99F90>?
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>**嚗?
|
||
<EFBFBD>其<EFBFBD>銝𡁜凝靽∠恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>圈<EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>琜<EFBFBD>
|
||
```
|
||
<EFBFBD>批<EFBFBD>潘<EFBFBD>zE4tcdBeekCHPUV015jCh9RVUydnCITINqSmCzg9xtO
|
||
<EFBFBD>啣<EFBFBD>潘<EFBFBD>v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO嚗?3雿㵪<E99BBF><E3B5AA>澆<EFBFBD>甇<EFBFBD>&嚗?
|
||
```
|
||
|
||
---
|
||
|
||
### <20>桅<EFBFBD>6嚗䭰atapp <20><><EFBFBD>蝛輸<E89D9B>誯<EFBFBD>蝵?<3F><>
|
||
|
||
**<2A><>瘙?*嚗?
|
||
<EFBFBD>砍𧑐撘<EFBFBD><EFBFBD>𤑳㴓憓<EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD>蝵?HTTPS URL <20>其<EFBFBD>隡<EFBFBD><E99AA1>敺桐縑<E6A190>噼<EFBFBD><E599BC>?
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>**嚗?
|
||
1. 雿輻鍂 natapp <20>滚𦛚
|
||
2. <20>滨蔭<E6BBA8>折<EFBFBD>嚗䫤http://iit.nat100.top` <20>?`127.0.0.1:3001`
|
||
3. natapp <20>芸𢆡<E88AB8>𣂷<EFBFBD> HTTPS <20>舀<EFBFBD>
|
||
|
||
**撉諹<E69289>**嚗?
|
||
```bash
|
||
curl https://iit.nat100.top/api/v1/iit/health
|
||
# 餈𥪜<E9A488>嚗㝯"status":"ok","module":"iit-manager",...}
|
||
```
|
||
|
||
---
|
||
|
||
## <20>妒 瘚贝<E7989A>撉諹<E69289>
|
||
|
||
### 瘚贝<E7989A>1嚗帋<E59A97>銝𡁜凝靽∪<E99DBD><E288AA>𤏸<EFBFBD><F0A48FB8><EFBFBD>霂訫極<E8A8AB>琿<EFBFBD>霂?<3F>?
|
||
|
||
**撌亙<E6928C>**嚗帋<E59A97>銝𡁜凝靽∠恣<E288A0><E681A3><EFBFBD><EFBFBD>?<3F>?撘<><E69298>𤏸<EFBFBD><F0A48FB8>極<EFBFBD>?<3F>?瘚贝<E7989A><E8B49D>噼<EFBFBD>璅∪<E79285>
|
||
|
||
**<EFBFBD>滨蔭**嚗?
|
||
```
|
||
URL: https://iit.nat100.top/api/v1/iit/wechat/callback
|
||
Token: oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq
|
||
EncodingAESKey: v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO
|
||
EchoStr: test12345678901234567890123
|
||
ToUserName: ww6ab493470ab4f377
|
||
```
|
||
|
||
**瘚贝<E7989A>蝏𤘪<E89D8F>**嚗?
|
||
```
|
||
<EFBFBD>?餈𥪜<E9A488><F0A5AA9C>嗆<EFBFBD><E59786><EFBFBD>request: <20>𣂼<EFBFBD>
|
||
<EFBFBD>?餈𥪜<E9A488>蝏𤘪<E89D8F>嚗?23456789012345678901 25嚗<35>圾撖<E59CBE><E69296><EFBFBD>?3雿滚<E99BBF>蝚佗<E89D9A>
|
||
<EFBFBD>?HTTP<54>嗆<EFBFBD><E59786><EFBFBD>嚗?00
|
||
```
|
||
|
||
**<EFBFBD>𡒊垢<EFBFBD>亙<EFBFBD>**嚗?
|
||
```
|
||
<EFBFBD>𢬢 <20>嗅<EFBFBD>隡<EFBFBD><E99AA1>敺桐縑 URL 撉諹<E69289>霂瑟<E99C82>
|
||
nonce: "95zbplrrko5"
|
||
echostrLength: 88
|
||
<EFBFBD>?URL 撉諹<E69289><E8ABB9>𣂼<EFBFBD>
|
||
decryptedLength: 23
|
||
statusCode: 200
|
||
```
|
||
|
||
---
|
||
|
||
### 瘚贝<E7989A>2嚗䭰atapp <20>折<EFBFBD>餈鮋<E9A488>𡁏<EFBFBD>扳<EFBFBD>霂?<3F>?
|
||
|
||
**瘚贝<E7989A><E8B49D>賭誘**嚗?
|
||
```bash
|
||
curl https://iit.nat100.top/api/v1/iit/health
|
||
```
|
||
|
||
**餈𥪜<E9A488>蝏𤘪<E89D8F>**嚗?
|
||
```json
|
||
{
|
||
"status": "ok",
|
||
"module": "iit-manager",
|
||
"version": "1.1.0",
|
||
"timestamp": "2026-01-02T15:53:06.000Z"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## <20><> <20>滨蔭皜<E894AD><E79A9C>
|
||
|
||
### <20>𡒊垢<F0A1928A>臬<EFBFBD><E887AC>㗛<EFBFBD>嚗Ê̄ackend/.env嚗?
|
||
|
||
```env
|
||
# ==========================================
|
||
# 隡<><E99AA1>敺桐縑<E6A190>滨蔭
|
||
# ==========================================
|
||
|
||
# 隡<><E99AA1>敺桐縑<E6A190>箇<EFBFBD><E7AE87>滨蔭嚗<E894AD><E59A97><EFBFBD>其縑<E585B6>荔<EFBFBD>
|
||
WECHAT_CORP_ID=ww6ab493470ab4f377
|
||
WECHAT_AGENT_ID=1000002
|
||
WECHAT_CORP_SECRET=AZIVxMtoLb0rEszXS81e4dBRl-I9kgTjygIS0cFfENU
|
||
|
||
# 隡<><E99AA1>敺桐縑<E6A190>噼<EFBFBD><E599BC>滨蔭嚗<E894AD><E59A97><EFBFBD>臬<EFBFBD>閫<EFBFBD><E996AB>嚗?
|
||
WECHAT_TOKEN=oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq
|
||
WECHAT_ENCODING_AES_KEY=v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO
|
||
```
|
||
|
||
### 隡<><E99AA1>敺桐縑摨𠉛鍂<F0A0899B>滨蔭
|
||
|
||
**摨𠉛鍂靽⊥<E99DBD>**嚗?
|
||
- 隡<><E99AA1>ID嚗䫤ww6ab493470ab4f377`
|
||
- 摨𠉛鍂<F0A0899B>滨妍嚗䫤IIT Manager Agent`
|
||
- AgentID嚗䫤1000002`
|
||
|
||
**<EFBFBD>噼<EFBFBD>URL<EFBFBD>滨蔭**嚗<><E59A97>甇<EFBFBD><E79487>靽嘥<E99DBD>嚗㚁<E59A97>
|
||
```
|
||
URL: https://iit.nat100.top/api/v1/iit/wechat/callback
|
||
Token: oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq
|
||
EncodingAESKey: v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO
|
||
```
|
||
|
||
**<EFBFBD>臭縑<EFBFBD>笔<EFBFBD>**嚗?
|
||
```
|
||
iit.xunzhengyixue.com嚗𠄎AE<41>煺漣<E785BA>臬<EFBFBD>嚗?
|
||
```
|
||
|
||
### natapp <20>滨蔭
|
||
|
||
```
|
||
<EFBFBD>折<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>Online
|
||
<EFBFBD>祉<EFBFBD>URL嚗冴ttp://iit.nat100.top
|
||
<EFBFBD>砍𧑐蝡臬藁嚗?27.0.0.1:3001
|
||
HTTPS嚗朞䌊<EFBFBD>冽𣈲<EFBFBD>?
|
||
```
|
||
|
||
---
|
||
|
||
## <20><> 隞<><E99A9E>蝏蠘恣
|
||
|
||
| <20><>辣 | 隞<><E99A9E>銵峕㺭 | 銝餉<E98A9D><E9A489>蠘<EFBFBD> |
|
||
|------|---------|---------|
|
||
| WechatService.ts | 314銵?| 隡<><E99AA1>敺桐縑瘨<E7B891><E798A8><EFBFBD>券<EFBFBD>?|
|
||
| WechatCallbackController.ts | 501銵?| 隡<><E99AA1>敺桐縑<E6A190>噼<EFBFBD>憭<EFBFBD><E686AD> |
|
||
| index.ts嚗<73>捶<EFBFBD>劬orker嚗?| +80銵?| 韐冽綉摰峕<E691B0><E5B395>擧綫<E693A7><E7B6AB><EFBFBD>𡁶䰻 |
|
||
| routes/index.ts | +48銵?| 隡<><E99AA1>敺桐縑頝舐眏瘜典<E7989C> |
|
||
| **<EFBFBD>餉恣** | **~943銵?* | 隡<><E99AA1>敺桐縑<E6A190><E7B891><EFBFBD><EFBFBD>詨<EFBFBD>隞<EFBFBD><E99A9E> |
|
||
|
||
---
|
||
|
||
## <20>?撌脣<E6928C><E884A3>鞟<EFBFBD><E99E9F>蠘<EFBFBD>
|
||
|
||
- [x] 隡<><E99AA1>敺桐縑 Access Token 蝞∠<E89D9E>嚗<EFBFBD><E59A97>摮?<3F>瑟鰵嚗?
|
||
- [x] <20>煾<EFBFBD><E785BE><EFBFBD><EFBFBD>祆<EFBFBD><E7A586>臬<EFBFBD>隡<EFBFBD><E99AA1>敺桐縑
|
||
- [x] <20>煾<EFBFBD>?Markdown 瘨<><E798A8><EFBFBD>唬<EFBFBD>銝𡁜凝靽?
|
||
- [x] 隡<><E99AA1>敺桐縑 URL 撉諹<E69289>嚗𠃑ET霂瑟<E99C82>憭<EFBFBD><E686AD>嚗?
|
||
- [x] 隡<><E99AA1>敺桐縑瘨<E7B891><E798A8><EFBFBD>交𤣰嚗㇊OST霂瑟<E99C82>憭<EFBFBD><E686AD>嚗?
|
||
- [x] 瘨<><E798A8>閫<EFBFBD><E996AB>嚗<EFBFBD>蝙<EFBFBD>?@wecom/crypto嚗?
|
||
- [x] 蝑曉<E89D91>撉諹<E69289>嚗<EFBFBD>蝙<EFBFBD>?@wecom/crypto嚗?
|
||
- [x] 撘<>郊<EFBFBD>𧼮<EFBFBD>璅∪<E79285>嚗<EFBFBD><E59A97><EFBFBD>?蝘坿<E89D98><E59DBF>塚<EFBFBD>
|
||
- [x] <20>喲睸霂齿<E99C82><E9BDBF>曇<EFBFBD><E69B87>恬<EFBFBD>瘙<EFBFBD><E79899>颯<EFBFBD><E9A2AF>葬<EFBFBD>押<EFBFBD><E68ABC>鰵<EFBFBD><E9B0B5><EFBFBD><EFBFBD><EFBFBD>
|
||
- [x] 韐冽綉Worker<65>券<EFBFBD><E588B8><EFBFBD>銝𡁜凝靽⊿<E99DBD>𡁶䰻
|
||
- [x] 摰∟恣<E2889F>亙<EFBFBD>霈啣<E99C88>
|
||
- [x] natapp <20><><EFBFBD>蝛輸<E89D9B>誯<EFBFBD>蝵?
|
||
|
||
---
|
||
|
||
## <20>?敺<><E695BA><EFBFBD>鞟<EFBFBD><E99E9F>蠘<EFBFBD>
|
||
|
||
- [ ] 靽嘥<E99DBD>甇<EFBFBD><E79487><EFBFBD><EFBFBD><EFBFBD>銝𡁜凝靽∪<E99DBD>靚<EFBFBD>RL<52>滨蔭
|
||
- [ ] <20>滨蔭<E6BBA8>唳旿摨㮖葉<E3AE96>?`wechat_user_id`嚗㇊I<EFBFBD><EFBFBD><EFBFBD>銝𡁜凝靽|serID嚗?
|
||
- [ ] 蝡臬<E89DA1>蝡舀<E89DA1>霂𤏪<E99C82>REDCap <20>?隡<>凝<EFBFBD>券<EFBFBD><E588B8><EFBFBD>
|
||
- [ ] LLM<4C>誩㦛霂<E3A69B><E99C82>嚗<EFBFBD><E59A97>蝥批<E89DA5><E689B9>株<EFBFBD><E6A0AA>寥<EFBFBD>嚗?
|
||
- [ ] 撖寡<E69296><E5AFA1>蠘<EFBFBD>摰<EFBFBD><E691B0>嚗<EFBFBD>凒憭帋<E686AD><E5B88B>∪㦤<E288AA>荔<EFBFBD>
|
||
- [ ] IP<49>賢<EFBFBD><E8B3A2>閖<EFBFBD>蝵殷<E89DB5><E6AEB7>函蔡<E587BD>訕AE<41>塚<EFBFBD>
|
||
|
||
---
|
||
|
||
## <20><> 銝衤<E98A9D>甇亥恣<E4BAA5>?
|
||
|
||
### Day 3 銝见<E98A9D>/<2F>帋<EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>
|
||
|
||
1. **靽嘥<E99DBD>隡<EFBFBD><E99AA1>敺桐縑甇<E7B891><E79487><EFBFBD>滨蔭**嚗?<3F><><EFBFBD>嚗?
|
||
- <20>其<EFBFBD>銝𡁜凝靽∠恣<E288A0><E681A3><EFBFBD><EFBFBD>唬<EFBFBD>摮睃<E691AE>靚<EFBFBD>RL<52>滨蔭
|
||
- <20>暸<EFBFBD>厰<EFBFBD>閬<EFBFBD>𦻖<EFBFBD>嗥<EFBFBD>瘨<EFBFBD><E798A8>蝐餃<E89D90>
|
||
|
||
2. **<EFBFBD>滨蔭憿寧𤌍<EFBFBD>𡁶䰻**嚗?0<><30><EFBFBD>嚗?
|
||
- <20>瑕<EFBFBD> PI <20><><EFBFBD>銝𡁜凝靽?UserID
|
||
- <20>湔鰵<E6B994>唳旿摨?`projects` 銵函<E98AB5> `notification_config` 摮埈挾
|
||
|
||
3. **蝡臬<E89DA1>蝡舀<E89DA1>霂?*嚗?0<><30><EFBFBD>嚗?
|
||
- <20>?REDCap 銝剖<E98A9D><E58996>交<EFBFBD>霂閙㺭<E99699>?
|
||
- 撉諹<E69289>隡<EFBFBD><E99AA1>敺桐縑<E6A190>嗅<EFBFBD>摰墧𧒄<E5A2A7>𡁶䰻
|
||
- 瘚贝<E7989A>撖寡<E69296><E5AFA1>蠘<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>?撣桀𨭌"<22>?瘙<><E79899>?蝑匧<E89D91><E58CA7>株<EFBFBD>嚗?
|
||
|
||
### Day 4嚗<34><E59A97>蝏凋<E89D8F><E5878B>吔<EFBFBD>
|
||
|
||
1. **LLM<4C>誩㦛霂<E3A69B><E99C82>**
|
||
- <20>亙<EFBFBD> DeepSeek <20>硋<EFBFBD>隞?LLM
|
||
- 摰䂿緵<E482BF><E7B7B5>迤<EFBFBD>?AI Agent 撖寡<E69296>
|
||
|
||
2. **<EFBFBD>蠘<EFBFBD>摰<EFBFBD><EFBFBD>**
|
||
- <20>游<EFBFBD>撖寡<E69296><E5AFA1>箸艶嚗<E889B6>㺭<EFBFBD>格䰻霂U<E99C82><EFBCB5><EFBFBD>霈∪<E99C88><E288AA>琜<EFBFBD>
|
||
- <20>躰秤憭<E7A7A4><E686AD>隡睃<E99AA1>
|
||
- <20>扯<EFBFBD><E689AF>烐綉
|
||
|
||
3. **<EFBFBD><EFBFBD>﹝蝻硋<EFBFBD>**
|
||
- 雿輻鍂<E8BCBB>见<EFBFBD>
|
||
- API <20><>﹝
|
||
- <20>函蔡<E587BD><E894A1><EFBFBD>
|
||
|
||
---
|
||
|
||
## <20><> <20><><EFBFBD><EFBFBD><EFBFBD>獢?
|
||
|
||
- [隡<EFBFBD><EFBFBD>敺桐縑API<EFBFBD><EFBFBD>﹝](https://developer.work.weixin.qq.com/document/path/90664)
|
||
- [隡<><E99AA1>敺桐縑瘨<E7B891><E798A8><EFBFBD>㰘圾撖<E59CBE>秩<EFBFBD>筕(https://developer.work.weixin.qq.com/document/path/90968)
|
||
- [@wecom/crypto GitHub](https://github.com/wecomteam/crypto)
|
||
- [<5B><>撠𦬅VP<56>剔㴓撘<E3B493><E69298>𤏸恣<F0A48FB8>哋(../04-撘<><E69298>𤏸恣<F0A48FB8>?<3F><>撠𦬅VP<56>剔㴓撘<E3B493><E69298>𤏸恣<F0A48FB8>?md)
|
||
|
||
---
|
||
|
||
## <20><> <20>餌<EFBFBD>
|
||
|
||
Day 3 <20><><EFBFBD><EFBFBD>穃極雿𡏭蒾<F0A18FAD>園<EFBFBD><E59C92>唬<EFBFBD>憭帋葵<E5B88B><E891B5><EFBFBD>舫䔮憸矋<E686B8>雿<EFBFBD><E99BBF>蝏<EFBFBD><E89D8F><EFBFBD>笔<EFBFBD><E7AC94>𣂷<EFBFBD>隡<EFBFBD><E99AA1>敺桐縑<E6A190><E7B891><EFBFBD><EFBFBD><EFBFBD>瓲敹<E793B2><E695B9><EFBFBD>賬<EFBFBD><E8B3AC><EFBFBD>朞<EFBFBD>靚<EFBFBD><E99D9A>撌亙<E6928C><E4BA99><EFBFBD><EFBFBD>霂<EFBFBD><E99C82>霂<EFBFBD><E99C82>鈭<EFBFBD><E988AD>
|
||
|
||
1. <20>?**<2A><><EFBFBD>舀䲮獢<E4B2AE>虾銵?*嚗鋣wecom/crypto 摨𤘪迤撣詨極雿?
|
||
2. <20>?**<2A>嗆<EFBFBD>霈曇恣<E69B87><E681A3><EFBFBD>**嚗𡁜<E59A97>甇亙<E79487>憭齿芋撘𤩺<E69298><F0A4A9BA><EFBFBD><EFBFBD><EFBFBD>輯<EFBFBD><E8BCAF>園䔮憸?
|
||
3. <20>?**隞<><E99A9E>韐券<E99F90><E588B8>臬末**嚗朞祕蝏<E7A595><E89D8F><EFBFBD>亙<EFBFBD><E4BA99>屸<EFBFBD>霂臬<E99C82><E887AC>?
|
||
4. <20>?**撘<><E69298>烐<EFBFBD>蝔见<E89D94><E8A781>?*嚗𡁻䔮憸䀹<E686B8><E480B9>乒<EFBFBD>瘚贝<E7989A>撉諹<E69289><E8ABB9>埝<EFBFBD>獢<EFBFBD>扇敶?
|
||
|
||
**頝萘氖摰峕㟲<E5B395>?MVP <20>剔㴓<E58994>芸榆<E88AB8><E6A686><EFBFBD>𡒊<EFBFBD>蝡臬<E89DA1>蝡舀<E89DA1>霂蓥<E99C82>嚗?*
|
||
|
||
---
|
||
|
||
**霈啣<E99C88>鈭?*嚗鋫I Assistant
|
||
**摰⊥瓲鈭?*嚗𡁜<E59A97><F0A1819C>穃𣪧<E7A983>?
|
||
**<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦**嚗鯝1.0
|
||
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*嚗?026-01-02 23:55:00
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|