Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/06-开发记录/Day3-企业微信集成开发完成记录.md
HaHafeng 1b53ab9d52 feat(aia): Complete AIA V2.0 with universal streaming capabilities
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%)
2026-01-14 19:15:01 +08:00

14 KiB
Raw Blame History

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
**<2A><EFBFBD>?*嚗尠<E59A97><><E99AA1>敺桐縑URL撉諹<E69289><E8ABB9>𣂼<EFBFBD><EFBFBD>抅蝖<E68A85><E89D96><EFBFBD><EFBFBD>摰峕<E691B0>


<EFBFBD><EFBFBD><><E69298><EFBFBD>閫?

<EFBFBD><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>?

<EFBFBD><EFBFBD>

  • <EFBFBD>?隡<><E99AA1>敺桐縑瘨<E7B891><E798A8><EFBFBD><EFBFBD><E588B8><EFBFBD><EFBFBD><EFBFBD>WechatService嚗?
  • <EFBFBD>?隡<><E99AA1>敺桐縑<E6A190><EFBFBD><EFBFBD><E686AD>嚗ÁechatCallbackController嚗?
  • <EFBFBD>?URL撉諹<E69289>瘚贝<E7989A><E8B49D><EFBFBD>
  • <EFBFBD>?摰<><E691B0>韐冽綉Worker嚗峕𣈲<E5B395><F0A388B2><EFBFBD>銝𡁜凝靽⊥綫<E28AA5>?
  • <EFBFBD>?natapp<70><70><EFBFBD>蝛輸<E89D9B><EFBFBD>蝵格<E89DB5><E6A0BC>?

餈𥕦漲

  • <EFBFBD><EFBFBD><EFBFBD>摰峕<EFBFBD>摨佗<EFBFBD>35% <20>?50%
  • <EFBFBD><EFBFBD>敺桐縑<EFBFBD><EFBFBD><EFBFBD>嚗?*0% <20>?80%**嚗㇎RL撉諹<E69289>摰峕<E691B0><EFBFBD><E59A97>蝡臬<E89DA1>蝡舀<E89DA1>霂𤏪<E99C82>

<EFBFBD><EFBFBD>儭?<3F><EFBFBD>霈曇恣

<EFBFBD><EFBFBD><EFBFBD>

<EFBFBD>𢞖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<0A>?                   隡<><E99AA1>敺桐縑<E6A190><E7B891><EFBFBD><EFBFBD><EFBFBD>                            <20>?
<0A><EFBFBD><E98EBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<0A>?                                                              <20>?
<0A>? REDCap DET  <20><><EFBFBD><EFBFBD><EFBFBD>? WebhookController  <20><><EFBFBD><EFBFBD><EFBFBD>? JobQueue          <20>?
<0A>?                         <20>?                      <20>?           <20>?
<0A>?                   Audit Logs          iit_quality_check     <20>?
<0A>?                                             Worker           <20>?
<0A>?                                               <20>?             <20>?
<0A>?                                       WechatService          <20>?
<0A>?                                               <20>?             <20>?
<0A>?                                         隡<><E99AA1>敺桐縑 API          <20>?
<0A>?                                               <20>?             <20>?
<0A>?                                           PI <20>𧢲㦤            <20>?
<0A>?                                                              <20>?
<0A>? 隡<><E99AA1>敺桐縑瘨<E7B891><E798A8>  <20><><EFBFBD><EFBFBD><EFBFBD>? WechatCallbackController  <20><><EFBFBD><EFBFBD><EFBFBD>? AI憭<49><E686AD>     <20>?
<0A>?                         <20>?                                   <20>?
<0A>?                   WechatService  <20><><EFBFBD><EFBFBD><EFBFBD>? 銝餃𢆡<E9A483><EFBFBD><E588B8><EFBFBD>憭?          <20>?
<0A>?                                                              <20>?
<0A><EFBFBD><E5A999><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>舀䲮獢? <EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>㰘圾撖? @wecom/crypto <EFBFBD><EFBFBD>敺桐縑摰䀹䲮<EFBFBD><EFBFBD>摨?
XML閫<EFBFBD><EFBFBD> xml2js <EFBFBD><EFBFBD>蝔喳<EFBFBD><EFBFBD><EFBFBD>ML閫<EFBFBD><EFBFBD>摨?
<EFBFBD><EFBFBD><EFBFBD>蝛輸<EFBFBD>? natapp <EFBFBD>砍𧑐撘<EFBFBD><EFBFBD>𤏸<EFBFBD>霂?
<EFBFBD>郊憭<EFBFBD><EFBFBD> setImmediate <EFBFBD><EFBFBD>5蝘坿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?

<EFBFBD>凃 隞<><E99A9E>摰䂿緵

1. WechatService.ts嚗<73><E59A97>銝𡁜凝靽⊥綫<E28AA5><E7B6AB><EFBFBD><EFBFBD><EFBFBD>

**<2A><>辣頝臬<E9A09D>**嚗䫤backend/src/modules/iit-manager/services/WechatService.ts`
<EFBFBD><EFBFBD>銵峕㺭嚗?14銵?

**<2A><EFBFBD><E8A9A8><EFBFBD>**嚗?

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>?*嚗?

  • <EFBFBD>?Access Token 蝻枏<E89DBB><E69E8F><EFBFBD>嚗?200蝘𡜐<E89D98><F0A19C90>𣂼<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD>瑟鰵嚗?
  • <EFBFBD>?摰峕㟲<E5B395><E39FB2><EFBFBD>霂臬<E99C82><E887AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBA9><EFBFBD>
  • <EFBFBD>?霂衣<E99C82><E8A1A3><EFBFBD>𠯫敹𡑒扇敶𤏪<E695B6>corpId<49><64>gentId蝑㚁<E89D91>
  • <EFBFBD>?摰∟恣<E2889F><EFBFBD><E4BA99>芸𢆡霈啣<E99C88>

**<2A><EFBFBD><E887AC><EFBFBD>**嚗?

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`
<EFBFBD><EFBFBD>銵峕㺭嚗?01銵?

**<2A><EFBFBD><E8A9A8><EFBFBD>**嚗?

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
}

**<2A><><EFBFBD>臭漁<E887AD>?*嚗?

  • <EFBFBD>?**撘<><EFBFBD>𧼮<EFBFBD><E79285>**嚗𡁶<E59A97><F0A181B6><EFBFBD><E594BE>裇"success"`嚗<><E59A97><EFBFBD><EFBFBD>甇亙<E79487><E4BA99><EFBFBD><EFBFBD><EFBFBD><E996AB>5蝘坿<E89D98><E59DBF><EFBFBD>
  • <EFBFBD>?**瘨<><E798A8><EFBFBD><E996AB>**嚗帋蝙<E5B88B>?@wecom/crypto <20>?decrypt(encodingAESKey, encrypt) <20>賣㺭
  • <EFBFBD>?**蝑曉<E89D91>撉諹<E69289>**嚗帋蝙<E5B88B>?@wecom/crypto <20>?getSignature(token, timestamp, nonce, data) <20>賣㺭
  • <EFBFBD>?**<2A>誩㦛霂<E3A69B><E99C82>**嚗𡁏𣈲<F0A1818F>?瘙<><E79899>?<3F>?撣桀𨭌"<22>?<3F><EFBFBD><E594B3>?蝑匧<E89D91><E58CA7><EFBFBD>
  • <EFBFBD>?**銝餃𢆡<E9A483><EFBFBD>?*嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>銝餃𢆡靚<F0A286A1>鍂 WechatService <20><EFBFBD><E588B8><EFBFBD>憭?

**<2A><EFBFBD><E887AC><EFBFBD>**嚗?

WECHAT_TOKEN=oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq
WECHAT_ENCODING_AES_KEY=v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO

3. 頝舐眏<E88890>滨蔭嚗ǐoutes/index.ts嚗?

<EFBFBD><EFBFBD>頝舐眏嚗?

// 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嚗?

**<2A><>辣頝臬<E9A09D>**嚗䫤backend/src/modules/iit-manager/index.ts`
**<2A><EFBFBD><E595A3><EFBFBD>**嚗朞捶<E69C9E><EFBFBD><E689B9>𣂼<EFBFBD><F0A382BC>芸𢆡<E88AB8><EFBFBD><E588B8><EFBFBD>銝𡁜凝靽⊿<E99DBD>𡁶䰻

**隞<><E99A9E><EFBFBD><EFBFBD>**嚗?

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
霈啣<E99C88>ID嚗鯴xx
銵典<E98AB5>嚗鯴xx
<0A>園𡢿嚗?026-01-02 23:55:00

<0A>働 韐冽綉撱箄悅 (3憿?嚗?
1. <20>?<3F>唳旿敶訫<E695B6><E8A8AB>𦠜𧒄嚗?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2. <20>?霈啣<E99C88>ID<49><EFBFBD>
3. <20>?銵典<E98AB5>嚗飱emographics

<0A>?<3F>唳旿韐券<E99F90><E588B8>臬末嚗峕<E59A97><E5B395>擧遬<E693A7><EFBFBD>

<0A>俥 憒<><E68692><EFBFBD>煾䔮嚗諹窈<E8ABB9>𧼮<EFBFBD>"撣桀𨭌"<22><EFBFBD><E4BAA6><EFBFBD><E6B8B8><EFBFBD>

<EFBFBD>圲 撘<><E69298>𤏸<EFBFBD>蝔衤<E89D94><E8A1A4><EFBFBD><EFBFBD><E996AB>

<EFBFBD><EFBFBD>1嚗𡁶㴓憓<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝘唬<EFBFBD><EFBFBD><EFBFBD>?<3F>𩤃<EFBFBD>

<EFBFBD>啗情嚗?

hasSecret: false
Error: 隡<><E99AA1>敺桐縑<E6A190>滨蔭銝滚<E98A9D><E6BB9A><EFBFBD>霂瑟<E99C82><E7919F>亦㴓憓<E3B493><E68693><EFBFBD>?

**<2A><EFBFBD>**嚗?

  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤WECHAT_CORP_SECRET`
  • <EFBFBD><EFBFBD>霂餃<EFBFBD>嚗䫤WECHAT_AGENT_SECRET`

**閫<><E996AB><EFBFBD><EFBFBD>**嚗?

// 靽格㺿<E6A0BC>?
agentSecret: process.env.WECHAT_AGENT_SECRET

// 靽格㺿<E6A0BC>?
agentSecret: process.env.WECHAT_CORP_SECRET

<EFBFBD><EFBFBD>2嚗鋣wecom/crypto 撖澆<E69296><E6BE86><EFBFBD><E5ADB5>躰秤 <20>?

<EFBFBD>啗情嚗?

TypeError: WXBizMsgCrypt is not a constructor

**<2A><EFBFBD>**嚗? @wecom/crypto 銝齿糓銝<E7B393>銝芰掩嚗諹<E59A97>峕糓撖澆枂鈭?銝芰𡠺蝡讠<E89DA1><E8AEA0>賣㺭嚗?

{
  decrypt: [Function: decrypt],
  encrypt: [Function: encrypt],
  getJsApiSignature: [Function: getJsApiSignature],
  getSignature: [Function: getSignature]
}

**閫<><E996AB><EFBFBD><EFBFBD>**嚗?

// 靽格㺿<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');

<EFBFBD><EFBFBD>3嚗飱ecrypt <20>賣㺭<E8B3A3><E3BAAD><EFBFBD>躰秤 <20>?

<EFBFBD>啗情嚗?

Error: invalid encodingAESKey

**<2A><EFBFBD>**嚗? <0A><EFBFBD>瘚贝<E7989A><E8B49D>𡁏𧋦<F0A1818F>𤑳緵嚗䈣decrypt` <20>賣㺭<E8B3A3><EFBFBD>閬?**2銝芸<E98A9D><E88AB8>?*嚗?

function decrypt(encodingAESKey, encrypt) { ... }

**閫<><E996AB><EFBFBD><EFBFBD>**嚗?

// 靽格㺿<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);

<EFBFBD><EFBFBD>4嚗関oken摮㛖泵霂<EFBFBD><EFBFBD><EFBFBD>躰秤 <20>𩤃<EFBFBD>

<EFBFBD>啗情嚗?

<EFBFBD>𩤃<EFBFBD> 蝑曉<E89D91>撉諹<E69289>憭梯揖
expected: 0b7cf05d6cb23ab9ce2efca6fdc659f32051eabe
calculated: 6f79cabd3e9eea5eb10f55abdcf087ce6393d51d

**<2A><EFBFBD>**嚗? Token<65><6E>洵3銝芸<E98A9D>蝚血捆<E8A180>𤘪毽瘛<E6AFBD><E7989B>

  • oX1R...<EFBFBD>㺭摮?嚗?
  • oXlR...<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘥徃嚗?

<EFBFBD>𡒊垢<EFBFBD><EFBFBD><EFBFBD>曄內<EFBFBD><EFBFBD>oXlR...<EFBFBD><EFBFBD><EFBFBD>耱嚗㚁<EFBFBD><EFBFBD><EFBFBD>霂訫極<EFBFBD>瑚葉<EFBFBD><EFBFBD>颲枏<EFBFBD><EFBFBD>㺭摮?<3F>?

**閫<><E996AB><EFBFBD><EFBFBD>**嚗?

  • <EFBFBD>湔𦻖隞?.env <20><>辣憭滚<E686AD>蝎䁅斐嚗屸<E59A97><E5B1B8>齿<EFBFBD><E9BDBF><EFBFBD><E588BB>?
  • 蝖株恕 Token 銝綽<E98A9D>oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq

<EFBFBD><EFBFBD>5嚗鍃ncodingAESKey <20>湔鰵 <20><>

<EFBFBD>啗情嚗? <0A><EFBFBD> EncodingAESKey <20><EFBFBD><E888AA><EFBFBD><E6BE86>厰䔮憸睃紡<E79D83>渲圾撖<E59CBE>仃韐乓<E99F90>?

**閫<><E996AB><EFBFBD><EFBFBD>**嚗? <0A><EFBFBD>銝𡁜凝靽∠恣<E288A0><E681A3><EFBFBD><EFBFBD><EFBFBD><E59C88><EFBFBD><E59581><EFBFBD>

<EFBFBD><EFBFBD><EFBFBD>zE4tcdBeekCHPUV015jCh9RVUydnCITINqSmCzg9xtO
<0A><EFBFBD><EFBFBD>v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO嚗?3雿㵪<E99BBF><E3B5AA><EFBFBD><EFBFBD>嚗?

<EFBFBD><EFBFBD>6嚗䭰atapp <20><><EFBFBD>蝛輸<E89D9B><EFBFBD>蝵?<3F><>

**<2A><>瘙?*嚗? <0A>砍𧑐撘<F0A79190><E69298>𤑳㴓憓<E3B493><E68693><EFBFBD><E996AC>蝵?HTTPS URL <20><EFBFBD><EFBFBD><E99AA1>敺桐縑<E6A190><EFBFBD><E599BC>?

**閫<><E996AB><EFBFBD><EFBFBD>**嚗?

  1. 雿輻鍂 natapp <20>滚𦛚
  2. <EFBFBD>滨蔭<EFBFBD><EFBFBD>嚗䫤http://iit.nat100.top <20>?127.0.0.1:3001`
  3. natapp <20>芸𢆡<E88AB8>𣂷<EFBFBD> HTTPS <20><EFBFBD>

**撉諹<E69289>**嚗?

curl https://iit.nat100.top/api/v1/iit/health
# 餈𥪜<E9A488>嚗㝯"status":"ok","module":"iit-manager",...}

<EFBFBD>妒 瘚贝<E7989A>撉諹<E69289>

瘚贝<EFBFBD>1嚗帋<EFBFBD>銝𡁜凝靽<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD>霂訫極<EFBFBD><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>
<0A>?餈𥪜<E9A488>蝏𤘪<E89D8F>嚗?23456789012345678901 25嚗<35>圾撖<E59CBE><E69296><EFBFBD>?3雿滚<E99BBF>蝚佗<E89D9A>
<0A>?HTTP<54><EFBFBD><E59786><EFBFBD>嚗?00

**<2A>𡒊垢<F0A1928A><EFBFBD>**嚗?

<EFBFBD>𢬢 <20><EFBFBD><EFBFBD><E99AA1>敺桐縑 URL 撉諹<E69289>霂瑟<E99C82>
  nonce: "95zbplrrko5"
  echostrLength: 88
<0A>?URL 撉諹<E69289><E8ABB9>𣂼<EFBFBD>
  decryptedLength: 23
statusCode: 200

瘚贝<EFBFBD>2嚗䭰atapp <20><EFBFBD>餈鮋<E9A488>𡁏<EFBFBD><EFBFBD>霂?<3F>?

瘚贝<EFBFBD><EFBFBD>賭誘嚗?

curl https://iit.nat100.top/api/v1/iit/health

**餈𥪜<E9A488>蝏𤘪<E89D8F>**嚗?

{
  "status": "ok",
  "module": "iit-manager",
  "version": "1.1.0",
  "timestamp": "2026-01-02T15:53:06.000Z"
}

<EFBFBD><EFBFBD> <20>滨蔭皜<E894AD><E79A9C>

<EFBFBD>𡒊垢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗Ê̄ackend/.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

<EFBFBD><EFBFBD>敺桐縑摨𠉛鍂<EFBFBD>滨蔭

**摨𠉛鍂靽⊥<E99DBD>**嚗?

  • <EFBFBD><EFBFBD>ID嚗䫤ww6ab493470ab4f377`
  • 摨𠉛鍂<EFBFBD>滨妍嚗䫤IIT Manager Agent`
  • AgentID嚗䫤1000002`

<EFBFBD><EFBFBD>URL<EFBFBD>滨蔭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>靽嘥<EFBFBD>嚗㚁<EFBFBD>

URL: https://iit.nat100.top/api/v1/iit/wechat/callback
Token: oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq
EncodingAESKey: v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO

**<2A>臭縑<E887AD><EFBFBD>**嚗?

iit.xunzhengyixue.com嚗𠄎AE<41>煺漣<E785BA><EFBFBD>嚗?

natapp <20>滨蔭

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Online
<0A><EFBFBD>URL嚗冴ttp://iit.nat100.top
<0A>砍𧑐蝡臬藁嚗?27.0.0.1:3001
HTTPS嚗朞䌊<E69C9E>冽𣈲<E586BD>?

<EFBFBD><EFBFBD><><E99A9E>蝏蠘恣

<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>銵峕㺭 銝餉<EFBFBD><EFBFBD><EFBFBD>
WechatService.ts 314銵? <EFBFBD><EFBFBD>敺桐縑瘨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
WechatCallbackController.ts 501銵? <EFBFBD><EFBFBD>敺桐縑<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
index.ts嚗<73><EFBFBD>劬orker嚗? +80銵? 韐冽綉摰峕<EFBFBD><EFBFBD>擧綫<EFBFBD><EFBFBD><EFBFBD>𡁶䰻
routes/index.ts +48銵? <EFBFBD><EFBFBD>敺桐縑頝舐眏瘜典<EFBFBD>
<EFBFBD>餉恣 *~943銵? <EFBFBD><EFBFBD>敺桐縑<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

<EFBFBD>?撌脣<E6928C><E884A3><EFBFBD><E99E9F><EFBFBD>

  • <EFBFBD><EFBFBD>敺桐縑 Access Token 蝞∠<E89D9E><EFBFBD><E59A97>摮?<3F>瑟鰵嚗?
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>敺桐縑
  • <EFBFBD><EFBFBD>?Markdown 瘨<><E798A8><EFBFBD><EFBFBD>銝𡁜凝靽?
  • <EFBFBD><EFBFBD>敺桐縑 URL 撉諹<E69289>嚗𠃑ET霂瑟<E99C82><EFBFBD><E686AD>嚗?
  • <EFBFBD><EFBFBD>敺桐縑瘨<EFBFBD><EFBFBD><EFBFBD>交𤣰嚗㇊OST霂瑟<EFBFBD><EFBFBD><EFBFBD>嚗?
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?@wecom/crypto嚗?
  • 蝑曉<EFBFBD>撉諹<EFBFBD><EFBFBD><EFBFBD>?@wecom/crypto嚗?
  • <EFBFBD><EFBFBD>𧼮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?蝘坿<E89D98><E59DBF><EFBFBD>
  • <EFBFBD>喲睸霂齿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • 韐冽綉Worker<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝𡁜凝靽⊿<EFBFBD>𡁶䰻
  • 摰∟恣<EFBFBD><EFBFBD>霈啣<EFBFBD>
  • natapp <20><><EFBFBD>蝛輸<E89D9B><EFBFBD>蝵?

<EFBFBD>?敺<><E695BA><EFBFBD><EFBFBD><E99E9F><EFBFBD>

  • 靽嘥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝𡁜凝靽<EFBFBD><EFBFBD>RL<EFBFBD>滨蔭
  • <EFBFBD>滨蔭<EFBFBD>唳旿摨㮖葉<EFBFBD>?wechat_user_id嚗㇊I<EFBFBD><EFBFBD><EFBFBD>銝𡁜凝靽serID嚗?
  • 蝡臬<EFBFBD>蝡舀<EFBFBD>霂𤏪<EFBFBD>REDCap <20>?隡<><EFBFBD><EFBFBD><E588B8><EFBFBD>
  • LLM<EFBFBD>誩㦛霂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝥批<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
  • 撖寡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>凒憭帋<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵殷<EFBFBD><EFBFBD>函蔡<EFBFBD>訕AE<EFBFBD><EFBFBD>

<EFBFBD><EFBFBD> 銝衤<E98A9D>甇亥恣<E4BAA5>?

Day 3 銝见<E98A9D>/<2F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

  1. 靽嘥<EFBFBD><EFBFBD><EFBFBD>敺桐縑甇<EFBFBD><EFBFBD><EFBFBD>滨蔭嚗?<3F><><EFBFBD>嚗?

    • <EFBFBD><EFBFBD>銝𡁜凝靽∠恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摮睃<EFBFBD><EFBFBD>RL<EFBFBD>滨蔭
    • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦻖<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝐餃<EFBFBD>
  2. <EFBFBD>滨蔭憿寧𤌍<EFBFBD>𡁶䰻嚗?0<><30><EFBFBD>嚗?

    • <EFBFBD><EFBFBD> PI <20><><EFBFBD>銝𡁜凝靽?UserID
    • <EFBFBD>湔鰵<EFBFBD>唳旿摨?projects 銵函<E98AB5> notification_config 摮埈挾
  3. **蝡臬<E89DA1>蝡舀<E89DA1>霂?*嚗?0<><30><EFBFBD>嚗?

    • <EFBFBD>?REDCap 銝剖<E98A9D><E58996><EFBFBD>霂閙㺭<E99699>?
    • 撉諹<EFBFBD><EFBFBD><EFBFBD>敺桐縑<EFBFBD><EFBFBD>摰墧𧒄<EFBFBD>𡁶䰻
    • 瘚贝<EFBFBD>撖寡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?撣桀𨭌"<22>?瘙<><E79899>?蝑匧<E89D91><E58CA7><EFBFBD>嚗?

Day 4嚗<34><E59A97>蝏凋<E89D8F><E5878B><EFBFBD>

  1. LLM<EFBFBD>誩㦛霂<EFBFBD><EFBFBD>

    • <EFBFBD><EFBFBD> DeepSeek <20><EFBFBD>隞?LLM
    • 摰䂿緵<EFBFBD><EFBFBD><EFBFBD>?AI Agent 撖寡<E69296>
  2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>

    • <EFBFBD><EFBFBD>撖寡<EFBFBD><EFBFBD>箸艶嚗<EFBFBD><EFBFBD>格䰻霂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
    • <EFBFBD>躰秤憭<EFBFBD><EFBFBD>隡睃<EFBFBD>
    • <EFBFBD><EFBFBD><EFBFBD>烐綉
  3. <EFBFBD><EFBFBD>﹝蝻硋<EFBFBD>

    • 雿輻鍂<EFBFBD><EFBFBD>
    • API <20><>
    • <EFBFBD>函蔡<EFBFBD><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>獢?


<EFBFBD><EFBFBD> <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. <EFBFBD>?**<2A><><EFBFBD>舀䲮獢<E4B2AE>虾銵?*嚗鋣wecom/crypto 摨𤘪迤撣詨極雿?
  2. <EFBFBD>?**<2A><EFBFBD>霈曇恣<E69B87><E681A3><EFBFBD>**嚗𡁜<E59A97>甇亙<E79487>憭齿芋撘𤩺<E69298><F0A4A9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8BCAF>園䔮憸?
  3. <EFBFBD>?<EFBFBD><EFBFBD>韐券<EFBFBD><EFBFBD>臬末嚗朞祕蝏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂臬<EFBFBD><EFBFBD>?
  4. <EFBFBD>?**撘<><E69298><EFBFBD>蝔见<E89D94><E8A781>?*嚗𡁻䔮憸䀹<E686B8><E480B9><EFBFBD>瘚贝<E7989A>撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>扇敶?

*頝萘氖摰峕㟲<EFBFBD>?MVP <20>剔㴓<E58994>芸榆<E88AB8><E6A686><EFBFBD>𡒊<EFBFBD>蝡臬<E89DA1>蝡舀<E89DA1>霂蓥<E99C82>嚗?


**霈啣<E99C88>鈭?*嚗鋫I Assistant
**摰⊥瓲鈭?*嚗𡁜<E59A97><F0A1819C>穃𣪧<E7A983>? <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦嚗鯝1.0
**<2A><><EFBFBD>擧凒<E693A7>?*嚗?026-01-02 23:55:00