JeffreySu/WeiXinMPSDK · error · UnknownRequestMsgTypeException
未知的客户群变更事件Event.CHANGE_EXTERNAL_CHAT下属请求信息
Error message
未知的客户群变更事件Event.CHANGE_EXTERNAL_CHAT下属请求信息
What it means
OnEventRequestAsync dispatches Event.CHANGE_EXTERNAL_CHAT (customer group change) callbacks by ExternalChatChangeType (create, update, dismiss). The default case throws UnknownRequestMsgTypeException when the ChangeType matches none of the handled values. The message text is mislabeled as '客户群变更' vs the tag branch, but it guards the chat-change dispatch.
Solutions
- Upgrade Senparc.Weixin.Work so the current ExternalChatChangeType enum and dispatch cases are available
- Override the chat-change dispatch in a derived handler to add handling for the unknown ChangeType
- Catch UnknownRequestMsgTypeException in the message-handler pipeline, log the ChangeType, and respond 'success' to WeCom
Example fix
// before
var response = await handler.BuildResponseMessageAsync();
// after
try { var response = await handler.BuildResponseMessageAsync(); }
catch (UnknownRequestMsgTypeException ex) { _logger.LogWarning(ex, "Unhandled change_external_chat ChangeType"); return "success"; } Defensive patterns
Strategy: try-catch
Validate before calling
if (!Enum.IsDefined(typeof(ExternalChatChangeType), chatEvent.ChangeType)) { return null; } Type guard
bool IsKnownExternalChatChange(RequestMessageEvent_Change_External_Chat_Base e) => Enum.IsDefined(typeof(ExternalChatChangeType), e.ChangeType);
Try / catch
try { response = await handler.OnEventRequestAsync(evt); } catch (UnknownRequestMsgTypeException ex) { _logger.LogWarning(ex, "Unhandled change_external_chat ChangeType"); return "success"; } Prevention
- Update the SDK when enabling 客户群 (customer group) features
- Log raw event XML for unknown group-change sub-types
- Return 'success' for unhandled ChangeType values
- Test against a WeCom test suite before production rollout
When it happens
Trigger: A 'change_external_chat' callback arrives with a ChangeType outside {create, update, dismiss} — e.g. a new WeCom group-change sub-event not present in your library version.
Common situations: Group chat (客户群) feature events arriving at older library versions; WeCom introducing new group lifecycle events; callback URL configured to a broader event scope than expected.
Related errors
- 未知的Event.change_contact下属请求信息
- 未知的外部联系人事件Event.CHANGE_EXTERNAL_CONTACT下属请求信息
- 未知的企业客户标签变更事件Event.CHANGE_EXTERNAL_Tag下属请求信息
- 未知的Event下属请求信息
- 未知的InfoType请求类型
AI-assisted analysis of JeffreySu/WeiXinMPSDK@be573f6f94 (2026-09-12).
Data as JSON: /api/errors/79c816406f9a00d2.
Report an issue: GitHub.
Appendix: source
Thrown at src/Senparc.Weixin.Work/Senparc.Weixin.Work/MessageHandlers/Async/WorkMessageHandler.Async.cs:404
RequestMessage as RequestMessageEvent_Change_External_Tag_Create);
break;
case ExternalTagChangeType.update:
responseMessage = await
OnEvent_ChangeExternalTagUpdateRequestAsync(
RequestMessage as RequestMessageEvent_Change_External_Tag_Update);
break;
case ExternalTagChangeType.delete:
responseMessage = await
OnEvent_ChangeExternalTagDeleteRequestAsync(
RequestMessage as RequestMessageEvent_Change_External_Tag_Delete);
break;
case ExternalTagChangeType.shuffle:
responseMessage = await
OnEvent_ChangeExternalTagShuffleRequestAsync(
RequestMessage as RequestMessageEvent_Change_External_Tag_Shuffle);
break;
default:
throw new UnknownRequestMsgTypeException("未知的客户群变更事件Event.CHANGE_EXTERNAL_CHAT下属请求信息",
null);
}
break;
case Event.LIVING_STATUS_CHANGE: //直播事件回调
responseMessage = await
OnEvent_Living_Status_ChangeRequestAsync(
RequestMessage as RequestMessageEvent_Living_Status_Change_Base);
break;
case Event.SYS_APPROVAL_CHANGE: //系统应用审批状态变化通知回调
responseMessage = await
OnEvent_Sys_Approval_Change_Status_ChangeRequestAsync(
RequestMessage as RequestMessageEvent_SysApprovalChange);
break;
case Event.OPEN_APPROVAL_CHANGE: //自建应用审批状态变化通知回调
responseMessage = await
OnEvent_Open_Approval_Change_Status_ChangeRequestAsync(
RequestMessage as RequestMessageEvent_OpenApprovalChange);View on GitHub (pinned to be573f6f94)