from wecom_sdk.schemas.base import BaseSchema from typing import List, Optional class TextAttr(BaseSchema): value: str class WebAttr(BaseSchema): url: str title: str class MiniProgramAttr(BaseSchema): appid: str pagepath: str title: str class ExternalAttr(BaseSchema): type: int name: str text: Optional[TextAttr] = None web: Optional[WebAttr] = None miniprogram: Optional[MiniProgramAttr] = None class ExternalProfile(BaseSchema): external_attr: List[ExternalAttr] class ExternalContact(BaseSchema): external_userid: str name: str position: Optional[str] = None avatar: Optional[str] = None corp_name: Optional[str] = None corp_full_name: Optional[str] = None type: int gender: int unionid: Optional[str] = None external_profile: Optional[ExternalProfile] = None class Tag(BaseSchema): group_name: str tag_name: str tag_id: Optional[str] = None type: int class WechatChannels(BaseSchema): nickname: str source: int class FollowUser(BaseSchema): userid: str remark: Optional[str] = None description: Optional[str] = None createtime: int tags: Optional[List[Tag]] = None remark_corp_name: Optional[str] = None remark_mobiles: Optional[List[str]] = None oper_userid: str add_way: int state: Optional[str] = None wechat_channels: Optional[WechatChannels] = None class ContactResponse(BaseSchema): errcode: int errmsg: str external_contact: ExternalContact follow_user: List[FollowUser] next_cursor: Optional[str] = None