Example #1
0
    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='?')
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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='?')
Example #7
0
    def open_client(self):
        """唤起飞书客户端的 app_link 链接
        """

        base = 'https://{}/client/op/open'.format(self.host)
        return join_url(base, self.qs, sep='?')