{"record":{"id":"98328afd83187580","repo":"JeffreySu/WeiXinMPSDK","slug":"event-change-external-tag","errorCode":null,"errorMessage":"未知的企业客户标签变更事件Event.CHANGE_EXTERNAL_Tag下属请求信息","messagePattern":"未知的企业客户标签变更事件Event\\.CHANGE_EXTERNAL_Tag下属请求信息","errorType":"exception","errorClass":"UnknownRequestMsgTypeException","httpStatus":null,"severity":"error","filePath":"src/Senparc.Weixin.Work/Senparc.Weixin.Work/MessageHandlers/Async/WorkMessageHandler.Async.cs","lineNumber":373,"sourceCode":"                    switch (cechat.ChangeType)\n                    {\n                        case ExternalChatChangeType.create:\n                            responseMessage = await\n                                OnEvent_ChangeExternalChatCreateRequestAsync(\n                                    RequestMessage as RequestMessageEvent_Change_External_Chat_Create);\n                            break;\n                        case ExternalChatChangeType.update:\n                            responseMessage = await\n                                OnEvent_ChangeExternalChatUpdateRequestAsync(\n                                    RequestMessage as RequestMessageEvent_Change_External_Chat_Update);\n                            break;\n                        case ExternalChatChangeType.dismiss:\n                            responseMessage = await\n                                OnEvent_ChangeExternalChatDismissRequestAsync(\n                                    RequestMessage as RequestMessageEvent_Change_External_Chat_Dismiss);\n                            break;\n                        default:\n                            throw new UnknownRequestMsgTypeException(\"未知的企业客户标签变更事件Event.CHANGE_EXTERNAL_Tag下属请求信息\",\n                                null);\n                    }\n\n                    break;\n                case Event.CHANGE_EXTERNAL_TAG: //企业客户标签变更事件\n                    var tag = RequestMessage as RequestMessageEvent_Change_External_Tag_Base;\n\n                    switch (tag.ChangeType)\n                    {\n                        case ExternalTagChangeType.create:\n                            responseMessage = await\n                                OnEvent_ChangeExternalTagCreateRequestAsync(\n                                    RequestMessage as RequestMessageEvent_Change_External_Tag_Create);\n                            break;\n                        case ExternalTagChangeType.update:\n                            responseMessage = await\n                                OnEvent_ChangeExternalTagUpdateRequestAsync(\n                                    RequestMessage as RequestMessageEvent_Change_External_Tag_Update);","sourceCodeStart":355,"sourceCodeEnd":391,"githubUrl":"https://github.com/JeffreySu/WeiXinMPSDK/blob/be573f6f94bdbf718dd5f6cdecb137fbc7ff651e/src/Senparc.Weixin.Work/Senparc.Weixin.Work/MessageHandlers/Async/WorkMessageHandler.Async.cs#L355-L391","documentation":"This guard fires in OnEventRequestAsync for Event.CHANGE_EXTERNAL_TAG (enterprise customer tag change) callbacks when the ExternalTagChangeType has no matching case. Note the message text is misleadingly phrased ('CHANGE_EXTERNAL_Tag', and duplicated with the external-chat message), but it is the tag-change dispatch's default case.","triggerScenarios":"A 'change_external_tag' WeCom callback arrives whose ExternalTagChangeType (add, update, dismiss, shuffle, etc.) is unrecognized — a sub-type added by Tencent after your library version or an unexpected payload value.","commonSituations":"Library versions predating a new tag-change sub-event; WeCom sending tag events to apps whose callback config receives all contact events; hand-written test ChangeType strings.","solutions":["Upgrade Senparc.Weixin.Work to support the latest ExternalTagChangeType members","Override the tag-event dispatch in a derived WorkMessageHandler and handle the missing sub-type","Catch UnknownRequestMsgTypeException at the callback boundary, log the ChangeType, and return 'success' to acknowledge the callback"],"exampleFix":"// before\nvar response = await handler.OnEventRequestAsync(tagEvent);\n// after\ntry { var response = await handler.OnEventRequestAsync(tagEvent); }\ncatch (UnknownRequestMsgTypeException ex) { _logger.LogWarning(ex, \"Unhandled change_external_tag ChangeType\"); return \"success\"; }","handlingStrategy":"try-catch","validationCode":"if (!Enum.IsDefined(typeof(ExternalTagChangeType), tagEvent.ChangeType)) { return null; }","typeGuard":"bool IsKnownExternalTagChange(RequestMessageEvent_Change_External_Tag_Base e) => Enum.IsDefined(typeof(ExternalTagChangeType), e.ChangeType);","tryCatchPattern":"try { response = await handler.OnEventRequestAsync(evt); } catch (UnknownRequestMsgTypeException ex) { _logger.LogWarning(ex, \"Unhandled change_external_tag ChangeType\"); return \"success\"; }","preventionTips":["Keep the SDK current for tag-management sub-events","Scope suite callback URLs to handled event categories","Log unknown ChangeType values for postmortem","Acknowledge unknown events with 'success'"],"tags":["wechat-work","external-tag-event","unknown-event"],"backgroundTag":"unsupported-enum-value","analyzedSha":"be573f6f94bdbf718dd5f6cdecb137fbc7ff651e","analyzedAt":"2026-09-12T10:01:50.733Z","contentChangedAt":"2026-09-12T10:01:50.733Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}