def get(self, id, name): """访问项目功能""" staff = current_staff proj = staff.app.projects.filter_by(id=id).one() # 判断是否有权限 if not proj_biz.staff_has_perm_for_project(staff, proj): raise errors.BizError(errors.ERR_PERMISSION_DENIED, 'staff has no permission for this project', dict(uid=staff.uid, id=proj.id)) args = access_function_args.parse_args() uid = args.get('uid') if uid and not (uid == proj.owner.uid or any(c.uid == uid for c in proj.customers)): # 指定的uid不是owner也不是customers raise errors.BizError(errors.ERR_INVALID_PARAMS, 'invalid uid', dict(uid=uid)) elif not uid: uid = proj.owner.uid app = staff.app app_client = app_clients.get_client(app.appid, app.appkey, app.urls) url = app_client.build_access_function_url(proj.domain, proj.type, proj.biz_id, proj.owner.uid, name, id=proj.id, uid=uid) return dict(url=url)
def post(self): """转发其它渠道的消息到客服系统""" app = current_application data = request.get_json() proj = biz.get_project(app, data.get('project_id', data.get('id')), data.get('project_domain'), data.get('project_type'), data.get('project_biz_id', data.get('biz_id'))) uid = data['uid'] try: customer = next(filter(lambda c: c.uid == uid, proj.customers)) except StopIteration: raise errors.BizError(errors.ERR_PERMISSION_DENIED, 'customer is not the member of the project', dict(uid=uid)) content = data['content'] if isinstance(content, dict): content = json.dumps(content) rx_key, ts = proj_biz.send_channel_message(proj, customer, data['channel'], data.get('domain', ''), data['type'], content) return dict(rx_key=rx_key, ts=ts), 200
def get(self, id=None, domain=None, type=None, biz_id=None): """获取项目当前会话信息""" app = current_application proj = biz.get_project(app, id, domain, type, biz_id) current_session = proj.current_session if current_session is None: raise errors.BizError(errors.ERR_ITEM_NOT_FOUND, 'no current session', dict(id=proj.id)) return current_session
def get(self, id): """尝试接待项目""" staff = current_staff proj = staff.app.projects.filter_by(id=id).one() # 判断是否有权限 if not proj_biz.staff_has_perm_for_project(staff, proj): raise errors.BizError(errors.ERR_PERMISSION_DENIED, 'can not handle this project', dict(uid=staff.uid, id=proj.id)) return proj_proj_biz.try_handle_project(proj, staff)
def get(self, id): """获取项目扩展数据""" staff = current_staff proj = staff.app.projects.filter_by(id=id).one() # 判断是否有权限 if not proj_biz.staff_has_perm_for_project(staff, proj): raise errors.BizError(errors.ERR_PERMISSION_DENIED, 'staff has no permission for this project', dict(uid=staff.uid, id=proj.id)) proj_biz.fetch_ext_data(staff, proj) return None, 204
def get(self, id): """获取项目消息""" staff = current_staff proj = staff.app.projects.filter_by(id=id).one() # 判断是否有权限 if not proj_biz.staff_has_perm_for_project(staff, proj): raise errors.BizError(errors.ERR_PERMISSION_DENIED, 'staff has no permission for this project', dict(uid=staff.uid, id=proj.id)) args = fetch_msgs_arguments.parse_args() msgs, has_more, no_more = proj_biz.fetch_project_msgs(proj, **args) return dict(msgs=msgs, has_more=has_more, no_more=no_more)
def get(self, id=None, domain=None, type=None, biz_id=None): """尝试接待项目""" app = current_application args = try_handle_project_arguments.parse_args() uid = args['uid'] staff = app.staffs.filter_by(uid=uid).one() proj = biz.get_project(app, id, domain, type, biz_id) # 判断是否有权限 if not proj_biz.staff_has_perm_for_project(staff, proj): raise errors.BizError(errors.ERR_PERMISSION_DENIED, 'staff can not handle this project', dict(uid=uid, id=proj.id)) return proj_proj_biz.try_handle_project(proj, staff)