diff --git a/src/ntqqapi/api/msg.ts b/src/ntqqapi/api/msg.ts
index 57f22d5..fa04a68 100644
--- a/src/ntqqapi/api/msg.ts
+++ b/src/ntqqapi/api/msg.ts
@@ -153,7 +153,17 @@ export class NTQQMsgApi extends Service {
         afterFirstCmd: false,
         cmdCB: payload => {
           for (const msgRecord of payload.msgList) {
-            if (msgRecord.peerUid === destPeer.peerUid && msgRecord.senderUid === selfUid) {
+            if (
+              msgRecord.msgType === 11 &&
+              msgRecord.subMsgType === 7 &&
+              msgRecord.peerUid === destPeer.peerUid &&
+              msgRecord.senderUid === selfUid
+            ) {
+              const element = msgRecord.elements[0]
+              const data = JSON.parse(element.arkElement!.bytesData)
+              if (data.app !== 'com.tencent.multimsg' || !data.meta.detail.resid) {
+                continue
+              }
               return true
             }
           }
@@ -161,20 +171,12 @@ export class NTQQMsgApi extends Service {
         }
       }
     )
-    for (const msg of data.msgList) {
-      const arkElement = msg.elements.find(ele => ele.arkElement)
-      if (!arkElement) {
-        continue
+    return data.msgList.find(msgRecord => {
+      const { arkElement } = msgRecord.elements[0]
+      if (arkElement?.bytesData.includes('com.tencent.multimsg')) {
+        return true
       }
-      const forwardData = JSON.parse(arkElement.arkElement!.bytesData)
-      if (forwardData.app !== 'com.tencent.multimsg') {
-        continue
-      }
-      if (msg.peerUid === destPeer.peerUid && msg.senderUid === selfUid) {
-        return msg
-      }
-    }
-    throw new Error('转发消息超时')
+    })!
   }
 
   async getSingleMsg(peer: Peer, msgSeq: string) {
diff --git a/src/onebot11/action/go-cqhttp/SendForwardMsg.ts b/src/onebot11/action/go-cqhttp/SendForwardMsg.ts
index 818ba42..d6a1fa7 100644
--- a/src/onebot11/action/go-cqhttp/SendForwardMsg.ts
+++ b/src/onebot11/action/go-cqhttp/SendForwardMsg.ts
@@ -19,7 +19,7 @@ interface Payload {
 
 interface Response {
   message_id: number
-  forward_id?: string
+  forward_id: string
 }
 
 export class SendForwardMsg extends BaseAction<Payload, Response> {
@@ -60,14 +60,11 @@ export class SendForwardMsg extends BaseAction<Payload, Response> {
       }
     }
 
-    let msg: RawMessage
     if (fake && this.ctx.app.native.activated) {
-      msg = await this.handleFakeForwardNode(peer, nodes)
+      return await this.handleFakeForwardNode(peer, nodes)
     } else {
-      msg = await this.handleForwardNode(peer, nodes)
+      return await this.handleForwardNode(peer, nodes)
     }
-    const msgShortId = this.ctx.store.createMsgShortId({ chatType: msg.chatType, peerUid: msg.peerUid }, msg.msgId)
-    return { message_id: msgShortId }
   }
 
   private parseNodeContent(nodes: OB11MessageNode[]) {
@@ -82,7 +79,7 @@ export class SendForwardMsg extends BaseAction<Payload, Response> {
     })
   }
 
-  private async handleFakeForwardNode(peer: Peer, nodes: OB11MessageNode[]) {
+  private async handleFakeForwardNode(peer: Peer, nodes: OB11MessageNode[]): Promise<Response> {
     const encoder = new MessageEncoder(this.ctx, peer)
     const raw = await encoder.generate(nodes)
     const transmit = Msg.PbMultiMsgTransmit.encode({ pbItemList: raw.multiMsgItems }).finish()
@@ -122,7 +119,11 @@ export class SendForwardMsg extends BaseAction<Payload, Response> {
           })
         }
       }], 1800)
-      return msg!
+      const msgShortId = this.ctx.store.createMsgShortId({
+        chatType: msg!.chatType,
+        peerUid: msg!.peerUid
+      }, msg!.msgId)
+      return { message_id: msgShortId, forward_id: resid }
     } catch (e) {
       this.ctx.logger.error('合并转发失败', e)
       throw new Error(`发送伪造合并转发消息失败 (res_id: ${resid} `)
@@ -153,7 +154,7 @@ export class SendForwardMsg extends BaseAction<Payload, Response> {
   }
 
   // 返回一个合并转发的消息id
-  private async handleForwardNode(destPeer: Peer, messageNodes: OB11MessageNode[]) {
+  private async handleForwardNode(destPeer: Peer, messageNodes: OB11MessageNode[]): Promise<Response> {
     const selfPeer = {
       chatType: ChatType.C2C,
       peerUid: selfInfo.uid,
@@ -245,8 +246,13 @@ export class SendForwardMsg extends BaseAction<Payload, Response> {
     if (retMsgIds.length === 0) {
       throw Error('转发消息失败,节点为空')
     }
-    const returnMsg = await this.ctx.ntMsgApi.multiForwardMsg(srcPeer!, destPeer, retMsgIds)
-    return returnMsg
+    const msg = await this.ctx.ntMsgApi.multiForwardMsg(srcPeer!, destPeer, retMsgIds)
+    const resid = JSON.parse(msg.elements[0].arkElement!.bytesData).meta.detail.resid
+    const msgShortId = this.ctx.store.createMsgShortId({
+      chatType: msg.chatType,
+      peerUid: msg.peerUid
+    }, msg.msgId)
+    return { message_id: msgShortId, forward_id: resid }
   }
 }
 
diff --git a/src/onebot11/helper/createMultiMessage.ts b/src/onebot11/helper/createMultiMessage.ts
index a12cfaf..9c3a044 100644
--- a/src/onebot11/helper/createMultiMessage.ts
+++ b/src/onebot11/helper/createMultiMessage.ts
@@ -174,7 +174,7 @@ export class MessageEncoder {
     const { type, data } = segment
     if (type === OB11MessageDataType.Node) {
       await this.render(data.content as OB11MessageData[])
-      const id = data.id ?? data.user_id
+      const id = data.uin ?? data.user_id
       this.uin = id ? +id : undefined
       this.name = data.name ?? data.nickname
       await this.flush()