def open_chat(self, open_id='', open_chat_id=''): """打开一个小程序或者小程序中的一个页面 :param open_id: 用户 open_id :type open_id: str :param open_chat_id: 用会话ID,包括单聊会话和群聊会话 :type open_chat_id: str :return: url :rtype: str 使用示例 使用 open_id 打开聊天页面 lark_cli.app_link().open_chat(open_id='1234567890') # https://applink.feishu.cn/client/chat/open?openId=1234567890 """ qs = [('openId', open_id), ('openChatId', open_chat_id)] for i in self.qs: if i[1]: qs.append((i[0], i[1])) base = 'https://{}/client/mini_program/open'.format(self.host) return join_url(base, qs, sep='?')
def get_role_user_list(self, role_id, page_size=20, page_token=''): """获取角色成员列表 :type self: OpenLark :param role_id: 角色 id :type role_id: str :param page_size: 分页大小,最大支持 200;默认为 20 :type page_size: int :param page_token: 分页标记,分页查询还有更多群时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取更多 :type page_token: str :return: (has_more, page_token, user_list) :rtype: (bool, str, list[SimpleUser]) 该接口用于获取角色下的用户列表,调用该接口需要有该企业的通讯录读权限或写权限。返回结果为该应用通讯录权限范围内的角色成员列表。 https://open.feishu.cn/document/ukTMukTMukTM/uczMwUjL3MDM14yNzATN """ base = self._gen_request_url('/open-apis/contact/v2/role/members') url = join_url(base, [ ('role_id', role_id), ('page_size', page_size), ('page_token', page_token), ]) res = self._get(url, with_tenant_token=True) data = res['data'] has_more = data.get('has_more', False) page_token = data.get('page_token', '') user_list = [ make_datatype(SimpleUser, i) for i in data.get('user_list', []) ] # type: List[SimpleUser] return has_more, page_token, user_list
def get_department_detail_user_list(self, department_id, page_size=20, page_token='', fetch_child=False): """获取部门用户详情列表 :type self: OpenLark :param department_id: 部门 ID :type department_id: str :param page_size: 分页大小,最大支持 100 :type page_size: str :param page_token: 分页标记,分页查询还有更多群时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取更多 :type page_token: str :param fetch_child: 是否递归返回子部门列表,默认不递归 :type fetch_child: bool :return: has_more, page_token, departments :rtype: (bool, str, list[DepartmentUser]) 获取部门用户详情,需要有该部门的通讯录授权。 https://open.feishu.cn/document/ukTMukTMukTM/uYzN3QjL2czN04iN3cDN https://bytedance.feishu.cn/docs/doccnOcR1fnxBACchoY9tlg7Amg# """ url = self._gen_request_url( '/open-apis/contact/v2/department/user/detail/list') qs = [ ('id', department_id), ('page_token', page_token), ('page_size', page_size), ('fetch_child', fetch_child), ] url = join_url(url, qs, sep='?') res = self._get(url, with_tenant_token=True) data = res['data'] has_more = data.get('has_more', False) page_token = data.get('page_token', '') users = [ make_datatype(DepartmentUser, i) for i in data.get('users', []) ] return has_more, page_token, users
def get_department(self, department_id): """获取部门详情 :type self: OpenLark :param department_id: 部门ID :type department_id: str :return: 创建后的部门 :rtype: Department 该接口用于获取部门详情信息。 https://open.feishu.cn/document/ukTMukTMukTM/uAzNz4CM3MjLwczM """ url = self._gen_request_url( '/open-apis/contact/v1/department/info/get') url = join_url(url, [('department_id', department_id)], sep='?') res = self._get(url, with_tenant_token=True) return _make_v1_department_info(res) # type: Department
def get_pay_orders(self, status='all', page_size=20, page_token='', tenant_key=None): """查询租户购买的付费方案 :type self: OpenLark :param status: 获取用户购买套餐信息设置的过滤条件,normal为正常状态,refund为已退款,为空或者all表示所有,未支付的订单无法查到 :type status: str :param page_size: 每页显示的订单数量 :type page_size: str :param page_token: 翻页标识,可以从上次请求的响应中获取,不填或者为空时表示从开头获取 :type page_token: str :param tenant_key: 购买应用的租户唯一标识,为空表示获取应用下所有订单,有值表示获取应用下该租户购买的订单 :type tenant_key: str 查询应用租户下的付费订单 该接口用于分页查询应用租户下的已付费订单,每次购买对应一个唯一的订单,订单会记录购买的套餐的相关信息, 业务方需要自行处理套餐的有效期和付费方案的升级。 https://open.feishu.cn/document/ukTMukTMukTM/uETNwUjLxUDM14SM1ATN """ url = self._gen_request_url('/open-apis/pay/v1/order/list') qs = [('status', status), ('page_size', page_size), ('page_token', page_token), ('tenant_key', tenant_key)] url = join_url(url, qs, sep='?') res = self._get(url, with_app_token=True) data = res['data'] total = data.get('total') has_more = data.get('has_more') page_token = data.get('page_token') orders = [ make_datatype(PayOrder, i) for i in data.get('order_list', []) ] return has_more, page_token, total, orders
def open_mini_program(self, app_id, mode='', path='', path_android='', path_ios='', path_pc=''): """打开一个小程序或者小程序中的一个页面 :param app_id: 小程序 app_id :type app_id: str :param mode: PC 必填 PC小程序的三种模式:sidebar-semi、window、appCenter :type mode: str :param path: 需要跳转的页面路径,路径后可以带参数。也可以使用path_android、path_ios、path_pc参数对不同的客户端指定不同的path :type path: str :param path_android: 同 path 参数,Android 端会优先使用该参数,如果该参数不存在,则会使用 ptah 参数 :type path_android: str :param path_ios: 同 path 参数,iOS 端会优先使用该参数,如果该参数不存在,则会使用 ptah 参数 :type path_ios: str :param path_pc: 同 path 参数,PC 端会优先使用该参数,如果该参数不存在,则会使用 ptah 参数 :type path_pc: str :return: url :rtype: str 使用示例 1. 打开小程序 lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window') # https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window 2. 打开小程序的一个页面 pages/home lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window', path='pages/home') # https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window&path=pages%2Fhome 3. 打开小程序的一个页面带参数 pages/home?xid=123 lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window', path='pages/home?xid=123') # https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window& path=pages%2Fhome%3Fxid%3D123 4. 在 PC 端打开页面 pages/pc_home?pid=123,在其他端打开页面 pages/home?xid=123 lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window', path='pages/home?xid=123', path_pc='pages/pc_home?pid=123') # https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window& path=pages%2Fhome%3Fxid%3D123&path_pc=pages%2Fpc_home%3Fpid%3D123 5. 在 PC 4.2.0 及以上版本支持打开小程序,PC 4.2.0 以下版本提示不支持 lark_cli.app_link(min_ver_pc='4.2.0').open_mini_program(app_id='1234567890', mode='window') # https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window&min_lk_ver_pc=4.2.0 """ qs = [ ('appId', app_id), ('mode', mode), ('path', quote(path, safe='') if path else ''), ('path_android', quote(path_android, safe='') if path_android else ''), ('path_ios', quote(path_ios, safe='') if path_ios else ''), ('path_pc', quote(path_pc, safe='') if path_pc else ''), ] for i in self.qs: qs.append((i[0], i[1])) base = 'https://{}/client/mini_program/open'.format(self.host) return join_url(base, qs, sep='?')
def open_client(self): """唤起飞书客户端的 app_link 链接 """ base = 'https://{}/client/op/open'.format(self.host) return join_url(base, self.qs, sep='?')