# coding: utf-8 from __future__ import absolute_import, division, print_function, unicode_literals from typing import List import attr from utils.feishu.dt_code import SimpleUser from utils.feishu.dt_help import to_json_decorator @to_json_decorator @attr.s class EventMessageMergeForward(object): root_id = attr.ib(type=str, default=None) parent_id = attr.ib(type=str, default=None) open_chat_id = attr.ib(type=str, default=None) msg_type = attr.ib(type=str, default=None) open_id = attr.ib(type=str, default=None) open_message_id = attr.ib(type=str, default=None) is_mention = attr.ib(type=bool, default=None) image_key = attr.ib(type=str, default=None) image_url = attr.ib(type=str, default=None) create_time = attr.ib(type=int, default=None) @to_json_decorator @attr.s class EventMessage(object): """消息事件 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) # 租户 key type = attr.ib(type=str, default=None) # 消息事件公共 root_id = attr.ib(type=str, default=None) # 回复的祖先消息id parent_id = attr.ib(type=str, default=None) # 回复的消息id open_chat_id = attr.ib(type=str, default=None) # 本次消息所发生的对话,注意:私聊也有这个 chat_type = attr.ib(type=str, default=None) # 私聊private,群聊group msg_type = attr.ib(type=str, default=None) # 消息类型 open_id = attr.ib(type=str, default=None) open_message_id = attr.ib(type=str, default=None) # 本校消息的 id is_mention = attr.ib(type=bool, default=None) # 文本消息、富文本消息含有的 text = attr.ib(type=str, default='') # 文本(text 和 post) text_without_at_bot = attr.ib(type=str, default='') # 消息内容,会过滤掉at你的机器人的内容(text 和 post) # 富文本消息 image_keys = attr.ib(type=List[str], default=attr.Factory(list)) # image_key的列表(post) title = attr.ib(type=str, default='') # 标题(post) # 图片消息独有的 image_height = attr.ib(type=str, default='') # 图片高度(image) image_width = attr.ib(type=str, default='') # 图片宽度(image) image_url = attr.ib(type=str, default='') # 图片的url(image) image_key = attr.ib(type=str, default='') # 图片的key(image) # 合并转发消息,(日历卡片、投票消息、会话记录等不支持合并转发) msg_list = attr.ib(type=List[EventMessageMergeForward], default=attr.Factory(list)) # 合并转发消息的每个消息体 @to_json_decorator @attr.s class EventApproval(object): """"审批通过 订阅审批定义后,该定义产生的审批实例在结束时,会推送事件消息。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) definition_code = attr.ib(type=str, default=None) # 审批定义Code definition_name = attr.ib(type=str, default=None) # 审批定义名称 instance_code = attr.ib(type=str, default=None) # 审批实例Code start_time = attr.ib(type=int, default=None) # 审批发起时间,10位秒级 end_time = attr.ib(type=int, default=None) # 审批结束时间,10位秒级 event = attr.ib(type=str, default=None) # 审批结果 approve:通过 reject:拒绝 cancel:取消 @to_json_decorator @attr.s class EventLeaveApproval(object): """"请假审批 请假审批通过后, 开放平台推送 leave_approval 事件到请求网址。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) instance_code = attr.ib(type=str, default=None) # 审批实例Code employee_id = attr.ib(type=str, default=None) # 用户id start_time = attr.ib(type=int, default=None) # 审批发起时间,10位秒级 end_time = attr.ib(type=int, default=None) # 审批结束时间,10位秒级 leave_type = attr.ib(type=str, default=None) # 请假类型 leave_unit = attr.ib(type=int, default=None) # 请假单位:1:半天,2:一天 leave_start_time = attr.ib(type=str, default=None) # 请假开始时间 "2018-12-01 12:00:00" leave_end_time = attr.ib(type=str, default=None) # 请假结束时间 leave_interval = attr.ib(type=int, default=None) # 请假时长,单位(秒) leave_reason = attr.ib(type=str, default=None) # 请假事由 @to_json_decorator @attr.s class EventWorkApproval(object): """加班审批 加班审批通过后推送消息,开放平台推送 work_approval 事件到请求网址。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) instance_code = attr.ib(type=str, default=None) # 审批实例Code employee_id = attr.ib(type=str, default=None) # 用户id start_time = attr.ib(type=int, default=None) # 审批发起时间,10位秒级 end_time = attr.ib(type=int, default=None) # 审批结束时间,10位秒级 work_type = attr.ib(type=str, default=None) # 加班类型 work_start_time = attr.ib(type=str, default=None) # 加班开始时间 2018-12-01 12:00:00 work_end_time = attr.ib(type=str, default=None) # 加班结束时间 work_interval = attr.ib(type=int, default=None) # 加班时长,单位(秒) work_reason = attr.ib(type=str, default=None) # 加班事由 @to_json_decorator @attr.s class EventShiftApproval(object): """换班审批 换班审批通过后推送消息,开放平台推送 shift_approval 事件到请求网址。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) instance_code = attr.ib(type=str, default=None) # 审批实例Code employee_id = attr.ib(type=str, default=None) # 用户id start_time = attr.ib(type=int, default=None) # 审批发起时间,10位秒级 end_time = attr.ib(type=int, default=None) # 审批结束时间,10位秒级 shift_time = attr.ib(type=str, default=None) # 换班时间 2018-12-01 12:00:00 return_time = attr.ib(type=str, default=None) # 还班时间 2018-12-01 12:00:00 shift_reason = attr.ib(type=str, default=None) # 换班事由 @to_json_decorator @attr.s class EventRemedyApproval(object): """补卡审批 补卡审批通过后, 开放平台推送 remedy_approval 事件到请求网址。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) instance_code = attr.ib(type=str, default=None) # 审批实例Code employee_id = attr.ib(type=str, default=None) # 用户id start_time = attr.ib(type=int, default=None) # 审批发起时间 end_time = attr.ib(type=int, default=None) # 审批结束时间 remedy_time = attr.ib(type=str, default=None) # 补卡时间 2018-12-01 12:00:00 remedy_reason = attr.ib(type=str, default=None) # 补卡原因 @to_json_decorator @attr.s class EventTripApprovalSchedule(object): trip_start_time = attr.ib(type=str, default=None) # 行程开始时间,"2018-12-01 12:00:00" trip_end_time = attr.ib(type=str, default=None) # 行程结束时间,"2018-12-01 12:00:00" trip_interval = attr.ib(type=int, default=None) # 行程时长(秒) departure = attr.ib(type=str, default=None) # 出发地 destination = attr.ib(type=str, default=None) # 目的地 transportation = attr.ib(type=str, default=None) # 目的地 trip_type = attr.ib(type=str, default=None) # 单程/往返 remark = attr.ib(type=str, default=None) # 备注 @to_json_decorator @attr.s class EventTripApproval(object): """出差审批 出差审批通过后推送消息,开放平台推送 trip_approval 事件到请求网址。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) instance_code = attr.ib(type=str, default=None) # 审批实例Code employee_id = attr.ib(type=str, default=None) # 用户id start_time = attr.ib(type=int, default=None) # 审批发起时间 end_time = attr.ib(type=int, default=None) # 审批结束时间 trip_interval = attr.ib(type=int, default=None) # 行程总时长(秒) trip_reason = attr.ib(type=str, default=None) # 出差事由 trip_peers = attr.ib(type=List[str], default=attr.Factory(list)) # 同行人 schedules = attr.ib(type=List[EventTripApprovalSchedule], default=attr.Factory(list)) @to_json_decorator @attr.s class EventAppOpenUser(object): open_id = attr.ib(type=str, default=None) # 申请者的open_id user_id = attr.ib(type=str, default=None) # 申请者的user_id @to_json_decorator @attr.s class EventAppOpen(object): """开通应用 当企业管理员在管理员后台开通应用时,开放平台推送 app_open 事件到请求网址。 """ app_id = attr.ib(type=str, default=None) # 应用ID tenant_key = attr.ib(type=str, default=None) # 企业ID type = attr.ib(type=str, default=None) # 事件类型 applicants = attr.ib(type=List[EventAppOpenUser], default=attr.Factory(list)) # 申请者的open_id installer = attr.ib(type=EventAppOpenUser, default=None) # 申请者的user_id @to_json_decorator @attr.s class EventContactUser(object): """通讯录变更 应用申请通讯录读权限,平台会自动给相应应用订阅通讯录变更事件。 通讯录用户相关变更事件,包括 user_add, user_update 和 user_leave 事件类型 """ type = attr.ib(type=str, default=None) # 事件类型,包括 user_add, user_update, user_leave app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) # 企业标识 open_id = attr.ib(type=str, default=None) employee_id = attr.ib(type=str, default='') # 企业自建应用返回 @to_json_decorator @attr.s class EventContactDepartment(object): """通讯录变更 应用申请通讯录读权限,平台会自动给相应应用订阅通讯录变更事件。 通讯录部门相关变更事件,包括 dept_add, dept_update 和 dept_delete """ type = attr.ib(type=str, default=None) # 事件类型,包括 dept_add,dept_update,dept_delete app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) # 企业标识 open_department_id = attr.ib(type=str, default=None) # 部门的Id @to_json_decorator @attr.s class EventContactScope(object): """当企业管理员在企业管理后台变更权限范围时,开放平台通知 contact_scope_change 到请求网址 """ type = attr.ib(type=str, default=None) # 事件类型 app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) # 企业标识 @to_json_decorator @attr.s class EventRemoveAddBotI18NTitle(object): en_us = attr.ib(type=str, default=None) zh_cn = attr.ib(type=str, default=None) @to_json_decorator @attr.s class EventAppTicket(object): """app_ticket 事件 对于应用商店应用,开放平台会定时发送 app_ticket 事件到请求网址,应用通过该 app_ticket 获取 app_access_token。 """ app_id = attr.ib(type=str, default=None) app_ticket = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) @to_json_decorator @attr.s class EventRemoveAddBot(object): """机器人被移出群聊/机器人被邀请进入群聊 机器人被邀请进入群聊时/被从群聊中移除时,平台推送 add_bot/remove_bot 通知事件到请求网址。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) chat_name = attr.ib(type=str, default=None) # 群名称 chat_owner_employee_id = attr.ib(type=str, default=None) # 群主的employee_id(如果群主是机器人则没有这个字段) chat_owner_name = attr.ib(type=str, default=None) # 群主名称 chat_owner_open_id = attr.ib(type=str, default=None) # 群主的open_id open_chat_id = attr.ib(type=str, default=None) operator_employee_id = attr.ib(type=str, default=None) # 操作者的emplolyee_id operator_name = attr.ib(type=str, default=None) # 操作者姓名 operator_open_id = attr.ib(type=str, default=None) # 操作者的open_id owner_is_bot = attr.ib(type=bool, default=False) # 群主是否是机器人 chat_i18n_names = attr.ib(type=EventRemoveAddBotI18NTitle, default=None) # 群名称国际化字段 @to_json_decorator @attr.s class EventP2PCreateChatUser(object): open_id = attr.ib(type=str, default=None) user_id = attr.ib(type=str, default=None) name = attr.ib(type=str, default=None) @to_json_decorator @attr.s class EventP2PCreateChat(object): """会话第一次创建的事件 机器人和用户的会话第一次创建的时候会发送通知。 """ app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) type = attr.ib(type=str, default=None) chat_id = attr.ib(type=str, default=None) # 机器人和用户的会话id # 如果是机器人发起的,operator里面是机器人的open_id。如果是用户发起operator里面是用户的open_id和user_id operator = attr.ib(type=EventP2PCreateChatUser, default=None) user = attr.ib(type=EventP2PCreateChatUser, default=None) @to_json_decorator @attr.s class EventUserInAndOutChat(object): """用户进出群聊 """ # ISV 应用没有 “user_id” 字段 app_id = attr.ib(type=str, default=None) tenant_key = attr.ib(type=str, default=None) # 用户进群 add_user_to_chat" # 用户出群 remove_user_from_chat # 撤销加人 revoke_add_user_from_chat type = attr.ib(type=str, default=None) chat_id = attr.ib(type=str, default=None) # 用户主动退群的话,operator 就是user自己 operator = attr.ib(type=SimpleUser, default=None) users = attr.ib(type=List[SimpleUser], default=attr.Factory(list))