Browse Source

修改包的引用

renjiaojiao 2 years ago
parent
commit
40a9343b3f

+ 32 - 8
rpc/knowledge/internal/server/knowledgeserver.go

@@ -4,11 +4,11 @@
 package server
 
 import (
-	"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/knowledgeclient"
 	"context"
 
 	"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/internal/logic"
 	"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/internal/svc"
+	"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/knowledge"
 )
 
 type KnowledgeServer struct {
@@ -22,43 +22,67 @@ func NewKnowledgeServer(svcCtx *svc.ServiceContext) *KnowledgeServer {
 }
 
 // 知识新增
-func (s *KnowledgeServer) KnowledgeAdd(ctx context.Context, in *knowledgeclient.AddRequest) (*knowledgeclient.AddResponse, error) {
+func (s *KnowledgeServer) KnowledgeAdd(ctx context.Context, in *knowledge.AddRequest) (*knowledge.AddResponse, error) {
 	l := logic.NewKnowledgeAddLogic(ctx, s.svcCtx)
 	return l.KnowledgeAdd(in)
 }
 
 // 知识列表
-func (s *KnowledgeServer) KnowledgeList(ctx context.Context, in *knowledgeclient.ListRequest) (*knowledgeclient.ListResponse, error) {
+func (s *KnowledgeServer) KnowledgeList(ctx context.Context, in *knowledge.ListRequest) (*knowledge.ListResponse, error) {
 	l := logic.NewKnowledgeListLogic(ctx, s.svcCtx)
 	return l.KnowledgeList(in)
 }
 
 // 知识编辑
-func (s *KnowledgeServer) KnowledgeEdit(ctx context.Context, in *knowledgeclient.KnowledgeEditReq) (*knowledgeclient.AddResponse, error) {
+func (s *KnowledgeServer) KnowledgeEdit(ctx context.Context, in *knowledge.KnowledgeEditReq) (*knowledge.AddResponse, error) {
 	l := logic.NewKnowledgeEditLogic(ctx, s.svcCtx)
 	return l.KnowledgeEdit(in)
 }
 
 // 知识详情
-func (s *KnowledgeServer) KnowledgeInfo(ctx context.Context, in *knowledgeclient.KnowledgeEntity) (*knowledgeclient.InfoResponse, error) {
+func (s *KnowledgeServer) KnowledgeInfo(ctx context.Context, in *knowledge.KnowledgeEntity) (*knowledge.InfoResponse, error) {
 	l := logic.NewKnowledgeInfoLogic(ctx, s.svcCtx)
 	return l.KnowledgeInfo(in)
 }
 
 // 知识删除
-func (s *KnowledgeServer) KnowledgeDel(ctx context.Context, in *knowledgeclient.KnowledgeDelReq) (*knowledgeclient.AddResponse, error) {
+func (s *KnowledgeServer) KnowledgeDel(ctx context.Context, in *knowledge.KnowledgeDelReq) (*knowledge.AddResponse, error) {
 	l := logic.NewKnowledgeDelLogic(ctx, s.svcCtx)
 	return l.KnowledgeDel(in)
 }
 
 // 根据问题匹配答案
-func (s *KnowledgeServer) FindAnswer(ctx context.Context, in *knowledgeclient.FindAnswerReq) (*knowledgeclient.FindAnswerResp, error) {
+func (s *KnowledgeServer) FindAnswer(ctx context.Context, in *knowledge.FindAnswerReq) (*knowledge.FindAnswerResp, error) {
 	l := logic.NewFindAnswerLogic(ctx, s.svcCtx)
 	return l.FindAnswer(in)
 }
 
 // 推荐答案
-func (s *KnowledgeServer) RecommendAnswer(ctx context.Context, in *knowledgeclient.FindAnswerReq) (*knowledgeclient.RecommendAnswerResp, error) {
+func (s *KnowledgeServer) RecommendAnswer(ctx context.Context, in *knowledge.FindAnswerReq) (*knowledge.RecommendAnswerResp, error) {
 	l := logic.NewRecommendAnswerLogic(ctx, s.svcCtx)
 	return l.RecommendAnswer(in)
 }
+
+// 客服话术添加、编辑
+func (s *KnowledgeServer) CommonPhrasesAdd(ctx context.Context, in *knowledge.CommonPhrasesAddReq) (*knowledge.AddResponse, error) {
+	l := logic.NewCommonPhrasesAddLogic(ctx, s.svcCtx)
+	return l.CommonPhrasesAdd(in)
+}
+
+// 客服话术详情
+func (s *KnowledgeServer) CommonPhrasesInfo(ctx context.Context, in *knowledge.CommonPhrasesInfoReq) (*knowledge.CommonPhrasesInfoResp, error) {
+	l := logic.NewCommonPhrasesInfoLogic(ctx, s.svcCtx)
+	return l.CommonPhrasesInfo(in)
+}
+
+// 客服话术列表
+func (s *KnowledgeServer) CommonPhrasesList(ctx context.Context, in *knowledge.CommonPhrasesListReq) (*knowledge.CommonPhrasesListResp, error) {
+	l := logic.NewCommonPhrasesListLogic(ctx, s.svcCtx)
+	return l.CommonPhrasesList(in)
+}
+
+// 客服话术删除
+func (s *KnowledgeServer) CommonPhrasesDel(ctx context.Context, in *knowledge.CommonPhrasesInfoReq) (*knowledge.AddResponse, error) {
+	l := logic.NewCommonPhrasesDelLogic(ctx, s.svcCtx)
+	return l.CommonPhrasesDel(in)
+}

+ 50 - 0
rpc/knowledge/internal/service/commonPhrasesService.go

@@ -0,0 +1,50 @@
+package service
+
+import (
+	cm "app.yhyue.com/moapp/jybase/common"
+	. "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/entity"
+	"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/knowledgeclient"
+	"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/util"
+)
+
+type CommonPhrasesService struct{}
+
+// CommonPhrasesAdd 客服话术添加
+func (c *CommonPhrasesService) CommonPhrasesAdd(param *knowledgeclient.CommonPhrasesAddReq) int64 {
+	insertData := map[string]interface{}{
+		"entId":    param.EntId,
+		"appId":    param.AppId,
+		"classify": param.Classify,
+		"content":  param.Content,
+	}
+	in := Mysql.Insert(util.COMMONPHRASES, insertData)
+	return in
+}
+
+// CommonPhrasesInfo 客服话术详情
+func (c *CommonPhrasesService) CommonPhrasesInfo(id int64) (data *knowledgeclient.CommonPhrases, ok bool) {
+	info := Mysql.FindOne(util.COMMONPHRASES, map[string]interface{}{"id": id}, "", "")
+	if info != nil && *info != nil && len(*info) > 0 {
+		data.Id = cm.Int64All((*info)["id"])
+		data.Classify = cm.Int64All((*info)["classify"])
+		data.Content = cm.ObjToString((*info)["content"])
+		return data, true
+	}
+	return nil, false
+}
+
+// CommonPhrasesDel 客服话术删除
+func (c *CommonPhrasesService) CommonPhrasesDel(id int64) bool {
+	ok := Mysql.Delete(util.COMMONPHRASES, map[string]interface{}{"id": id})
+	return ok
+}
+
+// CommonPhrasesList 客服话术列表
+/*func (c *CommonPhrasesService) CommonPhrasesList(param *knowledgeclient.CommonPhrasesListReq) {
+	var commonPhrasesList knowledgeclient.CommonPhrasesList
+	var data []*knowledgeclient.CommonPhrases
+	count := Mysql.CountBySql(util.COMMONPHRASES, map[string]interface{}{})
+	if count > 0 {
+		dataList := Mysql.Find(util.COMMONPHRASES)
+	}
+}*/

+ 4 - 14
rpc/knowledge/internal/service/knowledgeService.go

@@ -39,20 +39,10 @@ func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest, segme
 		if keywords == "" {
 			keywords = param.Question
 		}
-		//通过entUserId获取创建人名称,调用用户中心
-		/*req := &usercenter.EntUserReq{
-			EntId:     param.EntId,
-			EntUserId: param.EntUserId,
-			AppId:     param.AppId,
-		}
-		resp, err := UserCenterLib.GetEntUserInfo(context.Background(), req)
-		if resp.ErrorCode != 0 {
-			logx.Info("查询用户中台创建人信息失败", param.EntId, param.EntUserId, "err:", err)
-			return false, "查询用户中台创建人信息失败"
-		}*/
+
 		createPerson := param.EntUserId
 		var answerId int64
-		nowTime := time.Now().Local().Format(util.Date_Full_Layout)
+		nowTime := time.Now().Local().Format(util.DateFullLayout)
 		fool := Mysql.ExecTx("添加知识", func(tx *sql.Tx) bool {
 			//插入答案
 			answerData := map[string]interface{}{
@@ -124,7 +114,7 @@ func (k *KnowledgeService) KnowledgeEdit(param *knowledgeclient.KnowledgeEditReq
 	fool := Mysql.ExecTx("编辑问题、答案", func(tx *sql.Tx) bool {
 		//修改答案
 		answerUpdate := map[string]interface{}{
-			"update_time": time.Now().Local().Format(util.Date_Full_Layout),
+			"update_time": time.Now().Local().Format(util.DateFullLayout),
 			"content":     param.Answer,
 		}
 		ok1 := Mysql.UpdateByTx(tx, util.ANSWER, map[string]interface{}{"id": param.AnswerId}, answerUpdate)
@@ -205,7 +195,7 @@ func (k *KnowledgeService) KnowledgeDel(answerId int64) (ok bool) {
 	ok = false
 	//修改答案
 	answerUpdate := map[string]interface{}{
-		"update_time": time.Now().Local().Format(util.Date_Full_Layout),
+		"update_time": time.Now().Local().Format(util.DateFullLayout),
 		"status":      0,
 	}
 	fool := Mysql.Update(util.ANSWER, map[string]interface{}{"id": answerId}, answerUpdate)

+ 45 - 1
rpc/knowledge/knowledge.proto

@@ -70,7 +70,7 @@ message KnowledgeEditReq{
   string answer = 2;//答案
   int64 answerId = 3;//答案标识
   int64 entUserId = 5;
-  int64 entId = 6;//租户id
+  int64 entId = 6;//企业id
   int64 knowledgeId = 7;//知识库id
   string appId = 8;
 }
@@ -83,6 +83,42 @@ message KnowledgeDelReq{
   int64 answerId = 1;
 }
 
+message CommonPhrasesAddReq{
+  int64 id = 1;
+  int64 classify = 2; //分类
+  string content = 3; //话术内容
+  int64 entId = 4;//企业id
+  string appId = 5;
+}
+message CommonPhrasesInfoReq{
+  int64 id = 1;
+}
+message CommonPhrasesListReq{
+  int64 pageSize = 1;//每页数据量
+  int64 pageIndex = 2;//页码;默认第一页
+  int64 entId = 3;//企业id
+  string appId = 4;
+}
+message CommonPhrases{
+  int64 id = 1;
+  int64 classify = 2; //分类
+  string content = 3; //话术内容
+}
+message CommonPhrasesInfoResp{
+  int64 error_code = 1; //响应代码
+  string error_msg = 2; //响应消息
+  CommonPhrases data = 3;
+}
+message CommonPhrasesList {
+  int64 total = 1;
+  repeated  CommonPhrases Data = 2;
+}
+message CommonPhrasesListResp{
+  int64 error_code = 1; //响应代码
+  string error_msg = 2; //响应消息
+  CommonPhrasesList data = 3; //响应内容
+}
+
 service knowledge {
   //知识新增
   rpc KnowledgeAdd(AddRequest) returns(AddResponse);
@@ -98,4 +134,12 @@ service knowledge {
   rpc FindAnswer(FindAnswerReq) returns(FindAnswerResp);
   //推荐答案
   rpc RecommendAnswer(FindAnswerReq) returns(RecommendAnswerResp);
+  //客服话术添加、编辑
+  rpc CommonPhrasesAdd(CommonPhrasesAddReq) returns(AddResponse);
+  //客服话术详情
+  rpc CommonPhrasesInfo(CommonPhrasesInfoReq) returns(CommonPhrasesInfoResp);
+  //客服话术列表
+  rpc CommonPhrasesList(CommonPhrasesListReq) returns(CommonPhrasesListResp);
+  //客服话术删除
+  rpc CommonPhrasesDel(CommonPhrasesInfoReq) returns(AddResponse);
 }

+ 828 - 67
rpc/knowledge/knowledge/knowledge.pb.go

@@ -695,7 +695,7 @@ type KnowledgeEditReq struct {
 	Answer      string `protobuf:"bytes,2,opt,name=answer,proto3" json:"answer,omitempty"`      //答案
 	AnswerId    int64  `protobuf:"varint,3,opt,name=answerId,proto3" json:"answerId,omitempty"` //答案标识
 	EntUserId   int64  `protobuf:"varint,5,opt,name=entUserId,proto3" json:"entUserId,omitempty"`
-	EntId       int64  `protobuf:"varint,6,opt,name=entId,proto3" json:"entId,omitempty"`             //租户id
+	EntId       int64  `protobuf:"varint,6,opt,name=entId,proto3" json:"entId,omitempty"`             //企业id
 	KnowledgeId int64  `protobuf:"varint,7,opt,name=knowledgeId,proto3" json:"knowledgeId,omitempty"` //知识库id
 	AppId       string `protobuf:"bytes,8,opt,name=appId,proto3" json:"appId,omitempty"`
 }
@@ -891,6 +891,447 @@ func (x *KnowledgeDelReq) GetAnswerId() int64 {
 	return 0
 }
 
+type CommonPhrasesAddReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id       int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	Classify int64  `protobuf:"varint,2,opt,name=classify,proto3" json:"classify,omitempty"` //分类
+	Content  string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"`    //话术内容
+	EntId    int64  `protobuf:"varint,4,opt,name=entId,proto3" json:"entId,omitempty"`       //企业id
+	AppId    string `protobuf:"bytes,5,opt,name=appId,proto3" json:"appId,omitempty"`
+}
+
+func (x *CommonPhrasesAddReq) Reset() {
+	*x = CommonPhrasesAddReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_knowledge_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CommonPhrasesAddReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonPhrasesAddReq) ProtoMessage() {}
+
+func (x *CommonPhrasesAddReq) ProtoReflect() protoreflect.Message {
+	mi := &file_knowledge_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonPhrasesAddReq.ProtoReflect.Descriptor instead.
+func (*CommonPhrasesAddReq) Descriptor() ([]byte, []int) {
+	return file_knowledge_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *CommonPhrasesAddReq) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *CommonPhrasesAddReq) GetClassify() int64 {
+	if x != nil {
+		return x.Classify
+	}
+	return 0
+}
+
+func (x *CommonPhrasesAddReq) GetContent() string {
+	if x != nil {
+		return x.Content
+	}
+	return ""
+}
+
+func (x *CommonPhrasesAddReq) GetEntId() int64 {
+	if x != nil {
+		return x.EntId
+	}
+	return 0
+}
+
+func (x *CommonPhrasesAddReq) GetAppId() string {
+	if x != nil {
+		return x.AppId
+	}
+	return ""
+}
+
+type CommonPhrasesInfoReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *CommonPhrasesInfoReq) Reset() {
+	*x = CommonPhrasesInfoReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_knowledge_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CommonPhrasesInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonPhrasesInfoReq) ProtoMessage() {}
+
+func (x *CommonPhrasesInfoReq) ProtoReflect() protoreflect.Message {
+	mi := &file_knowledge_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonPhrasesInfoReq.ProtoReflect.Descriptor instead.
+func (*CommonPhrasesInfoReq) Descriptor() ([]byte, []int) {
+	return file_knowledge_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *CommonPhrasesInfoReq) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+type CommonPhrasesListReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	PageSize  int64  `protobuf:"varint,1,opt,name=pageSize,proto3" json:"pageSize,omitempty"`   //每页数据量
+	PageIndex int64  `protobuf:"varint,2,opt,name=pageIndex,proto3" json:"pageIndex,omitempty"` //页码;默认第一页
+	EntId     int64  `protobuf:"varint,3,opt,name=entId,proto3" json:"entId,omitempty"`         //企业id
+	AppId     string `protobuf:"bytes,4,opt,name=appId,proto3" json:"appId,omitempty"`
+}
+
+func (x *CommonPhrasesListReq) Reset() {
+	*x = CommonPhrasesListReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_knowledge_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CommonPhrasesListReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonPhrasesListReq) ProtoMessage() {}
+
+func (x *CommonPhrasesListReq) ProtoReflect() protoreflect.Message {
+	mi := &file_knowledge_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonPhrasesListReq.ProtoReflect.Descriptor instead.
+func (*CommonPhrasesListReq) Descriptor() ([]byte, []int) {
+	return file_knowledge_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *CommonPhrasesListReq) GetPageSize() int64 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *CommonPhrasesListReq) GetPageIndex() int64 {
+	if x != nil {
+		return x.PageIndex
+	}
+	return 0
+}
+
+func (x *CommonPhrasesListReq) GetEntId() int64 {
+	if x != nil {
+		return x.EntId
+	}
+	return 0
+}
+
+func (x *CommonPhrasesListReq) GetAppId() string {
+	if x != nil {
+		return x.AppId
+	}
+	return ""
+}
+
+type CommonPhrases struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id       int64  `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+	Classify int64  `protobuf:"varint,2,opt,name=classify,proto3" json:"classify,omitempty"` //分类
+	Content  string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"`    //话术内容
+}
+
+func (x *CommonPhrases) Reset() {
+	*x = CommonPhrases{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_knowledge_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CommonPhrases) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonPhrases) ProtoMessage() {}
+
+func (x *CommonPhrases) ProtoReflect() protoreflect.Message {
+	mi := &file_knowledge_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonPhrases.ProtoReflect.Descriptor instead.
+func (*CommonPhrases) Descriptor() ([]byte, []int) {
+	return file_knowledge_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *CommonPhrases) GetId() int64 {
+	if x != nil {
+		return x.Id
+	}
+	return 0
+}
+
+func (x *CommonPhrases) GetClassify() int64 {
+	if x != nil {
+		return x.Classify
+	}
+	return 0
+}
+
+func (x *CommonPhrases) GetContent() string {
+	if x != nil {
+		return x.Content
+	}
+	return ""
+}
+
+type CommonPhrasesInfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrorCode int64          `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` //响应代码
+	ErrorMsg  string         `protobuf:"bytes,2,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"`     //响应消息
+	Data      *CommonPhrases `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *CommonPhrasesInfoResp) Reset() {
+	*x = CommonPhrasesInfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_knowledge_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CommonPhrasesInfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonPhrasesInfoResp) ProtoMessage() {}
+
+func (x *CommonPhrasesInfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_knowledge_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonPhrasesInfoResp.ProtoReflect.Descriptor instead.
+func (*CommonPhrasesInfoResp) Descriptor() ([]byte, []int) {
+	return file_knowledge_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *CommonPhrasesInfoResp) GetErrorCode() int64 {
+	if x != nil {
+		return x.ErrorCode
+	}
+	return 0
+}
+
+func (x *CommonPhrasesInfoResp) GetErrorMsg() string {
+	if x != nil {
+		return x.ErrorMsg
+	}
+	return ""
+}
+
+func (x *CommonPhrasesInfoResp) GetData() *CommonPhrases {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type CommonPhrasesList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Total int64            `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"`
+	Data  []*CommonPhrases `protobuf:"bytes,2,rep,name=Data,proto3" json:"Data,omitempty"`
+}
+
+func (x *CommonPhrasesList) Reset() {
+	*x = CommonPhrasesList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_knowledge_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CommonPhrasesList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonPhrasesList) ProtoMessage() {}
+
+func (x *CommonPhrasesList) ProtoReflect() protoreflect.Message {
+	mi := &file_knowledge_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonPhrasesList.ProtoReflect.Descriptor instead.
+func (*CommonPhrasesList) Descriptor() ([]byte, []int) {
+	return file_knowledge_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *CommonPhrasesList) GetTotal() int64 {
+	if x != nil {
+		return x.Total
+	}
+	return 0
+}
+
+func (x *CommonPhrasesList) GetData() []*CommonPhrases {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type CommonPhrasesListResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrorCode int64              `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` //响应代码
+	ErrorMsg  string             `protobuf:"bytes,2,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"`     //响应消息
+	Data      *CommonPhrasesList `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`                             //响应内容
+}
+
+func (x *CommonPhrasesListResp) Reset() {
+	*x = CommonPhrasesListResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_knowledge_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CommonPhrasesListResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CommonPhrasesListResp) ProtoMessage() {}
+
+func (x *CommonPhrasesListResp) ProtoReflect() protoreflect.Message {
+	mi := &file_knowledge_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CommonPhrasesListResp.ProtoReflect.Descriptor instead.
+func (*CommonPhrasesListResp) Descriptor() ([]byte, []int) {
+	return file_knowledge_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *CommonPhrasesListResp) GetErrorCode() int64 {
+	if x != nil {
+		return x.ErrorCode
+	}
+	return 0
+}
+
+func (x *CommonPhrasesListResp) GetErrorMsg() string {
+	if x != nil {
+		return x.ErrorMsg
+	}
+	return ""
+}
+
+func (x *CommonPhrasesListResp) GetData() *CommonPhrasesList {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
 var File_knowledge_proto protoreflect.FileDescriptor
 
 var file_knowledge_proto_rawDesc = []byte{
@@ -989,39 +1430,105 @@ var file_knowledge_proto_rawDesc = []byte{
 	0x67, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2d,
 	0x0a, 0x0f, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x52, 0x65,
 	0x71, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x49, 0x64, 0x32, 0xde, 0x03,
-	0x0a, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x4b,
-	0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x41, 0x64, 0x64, 0x12, 0x14, 0x2e, 0x74, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x64,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x4b, 0x6e, 0x6f, 0x77,
-	0x6c, 0x65, 0x64, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70,
-	0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x16, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x4b, 0x6e, 0x6f, 0x77,
-	0x6c, 0x65, 0x64, 0x67, 0x65, 0x45, 0x64, 0x69, 0x74, 0x12, 0x1a, 0x2e, 0x74, 0x65, 0x6d, 0x70,
-	0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x45, 0x64,
-	0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
-	0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d,
-	0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e,
-	0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64,
-	0x67, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c,
-	0x61, 0x74, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x12, 0x40, 0x0a, 0x0c, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x44, 0x65, 0x6c,
-	0x12, 0x19, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x6e, 0x6f, 0x77,
-	0x6c, 0x65, 0x64, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x74, 0x65,
-	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72,
-	0x12, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64,
-	0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x74, 0x65, 0x6d, 0x70,
+	0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x49, 0x64, 0x22, 0x87, 0x01,
+	0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x41,
+	0x64, 0x64, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66,
+	0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66,
+	0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65,
+	0x6e, 0x74, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49,
+	0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x26, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22,
+	0x7c, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73,
+	0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
+	0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
+	0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65,
+	0x78, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x55, 0x0a,
+	0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x12, 0x0e,
+	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a,
+	0x0a, 0x08, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x08, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50,
+	0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d,
+	0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a,
+	0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61,
+	0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c,
+	0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65,
+	0x73, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x56, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05,
+	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74,
+	0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22,
+	0x84, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65,
+	0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65,
+	0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f,
+	0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x43,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x9f, 0x06, 0x0a, 0x09, 0x6b, 0x6e, 0x6f, 0x77, 0x6c,
+	0x65, 0x64, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67,
+	0x65, 0x41, 0x64, 0x64, 0x12, 0x14, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e,
+	0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x74, 0x65, 0x6d,
+	0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x4c, 0x69,
+	0x73, 0x74, 0x12, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x65, 0x6d, 0x70,
+	0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x42, 0x0a, 0x0d, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x45, 0x64,
+	0x69, 0x74, 0x12, 0x1a, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x6e,
+	0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x45, 0x64, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15,
+	0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64,
+	0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
+	0x65, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74,
+	0x79, 0x1a, 0x16, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x49, 0x6e, 0x66,
+	0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0c, 0x4b, 0x6e, 0x6f,
+	0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x12, 0x19, 0x2e, 0x74, 0x65, 0x6d, 0x70,
+	0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x44, 0x65,
+	0x6c, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e,
+	0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x46,
+	0x69, 0x6e, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70,
 	0x6c, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52,
-	0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64,
-	0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
-	0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a,
-	0x1d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6d,
-	0x6d, 0x65, 0x6e, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0d,
-	0x5a, 0x0b, 0x2e, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x62, 0x06, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x65, 0x71, 0x1a, 0x18, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69,
+	0x6e, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x0f,
+	0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x12,
+	0x17, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41,
+	0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c,
+	0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x41, 0x6e, 0x73,
+	0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x41, 0x64, 0x64, 0x12, 0x1d, 0x2e, 0x74, 0x65,
+	0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72,
+	0x61, 0x73, 0x65, 0x73, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x74, 0x65, 0x6d,
+	0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x12, 0x54, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73,
+	0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
+	0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
+	0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x49,
+	0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x2e, 0x74,
+	0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68,
+	0x72, 0x61, 0x73, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x74,
+	0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68,
+	0x72, 0x61, 0x73, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a,
+	0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x44, 0x65,
+	0x6c, 0x12, 0x1e, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x1a, 0x15, 0x2e, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x64,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x6b, 0x6e,
+	0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1036,21 +1543,28 @@ func file_knowledge_proto_rawDescGZIP() []byte {
 	return file_knowledge_proto_rawDescData
 }
 
-var file_knowledge_proto_msgTypes = make([]protoimpl.MessageInfo, 13)
+var file_knowledge_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
 var file_knowledge_proto_goTypes = []interface{}{
-	(*Question)(nil),            // 0: template.Question
-	(*AddRequest)(nil),          // 1: template.AddRequest
-	(*AddResponse)(nil),         // 2: template.AddResponse
-	(*FindAnswerReq)(nil),       // 3: template.FindAnswerReq
-	(*FindAnswerResp)(nil),      // 4: template.FindAnswerResp
-	(*RecommendAnswerResp)(nil), // 5: template.RecommendAnswerResp
-	(*ListData)(nil),            // 6: template.ListData
-	(*ListRequest)(nil),         // 7: template.ListRequest
-	(*ListResponse)(nil),        // 8: template.ListResponse
-	(*KnowledgeEntity)(nil),     // 9: template.KnowledgeEntity
-	(*KnowledgeEditReq)(nil),    // 10: template.KnowledgeEditReq
-	(*InfoResponse)(nil),        // 11: template.InfoResponse
-	(*KnowledgeDelReq)(nil),     // 12: template.KnowledgeDelReq
+	(*Question)(nil),              // 0: template.Question
+	(*AddRequest)(nil),            // 1: template.AddRequest
+	(*AddResponse)(nil),           // 2: template.AddResponse
+	(*FindAnswerReq)(nil),         // 3: template.FindAnswerReq
+	(*FindAnswerResp)(nil),        // 4: template.FindAnswerResp
+	(*RecommendAnswerResp)(nil),   // 5: template.RecommendAnswerResp
+	(*ListData)(nil),              // 6: template.ListData
+	(*ListRequest)(nil),           // 7: template.ListRequest
+	(*ListResponse)(nil),          // 8: template.ListResponse
+	(*KnowledgeEntity)(nil),       // 9: template.KnowledgeEntity
+	(*KnowledgeEditReq)(nil),      // 10: template.KnowledgeEditReq
+	(*InfoResponse)(nil),          // 11: template.InfoResponse
+	(*KnowledgeDelReq)(nil),       // 12: template.KnowledgeDelReq
+	(*CommonPhrasesAddReq)(nil),   // 13: template.CommonPhrasesAddReq
+	(*CommonPhrasesInfoReq)(nil),  // 14: template.CommonPhrasesInfoReq
+	(*CommonPhrasesListReq)(nil),  // 15: template.CommonPhrasesListReq
+	(*CommonPhrases)(nil),         // 16: template.CommonPhrases
+	(*CommonPhrasesInfoResp)(nil), // 17: template.CommonPhrasesInfoResp
+	(*CommonPhrasesList)(nil),     // 18: template.CommonPhrasesList
+	(*CommonPhrasesListResp)(nil), // 19: template.CommonPhrasesListResp
 }
 var file_knowledge_proto_depIdxs = []int32{
 	0,  // 0: template.FindAnswerResp.data:type_name -> template.Question
@@ -1058,25 +1572,36 @@ var file_knowledge_proto_depIdxs = []int32{
 	9,  // 2: template.ListData.Data:type_name -> template.KnowledgeEntity
 	6,  // 3: template.ListResponse.data:type_name -> template.ListData
 	9,  // 4: template.InfoResponse.data:type_name -> template.KnowledgeEntity
-	1,  // 5: template.knowledge.KnowledgeAdd:input_type -> template.AddRequest
-	7,  // 6: template.knowledge.KnowledgeList:input_type -> template.ListRequest
-	10, // 7: template.knowledge.KnowledgeEdit:input_type -> template.KnowledgeEditReq
-	9,  // 8: template.knowledge.KnowledgeInfo:input_type -> template.KnowledgeEntity
-	12, // 9: template.knowledge.KnowledgeDel:input_type -> template.KnowledgeDelReq
-	3,  // 10: template.knowledge.FindAnswer:input_type -> template.FindAnswerReq
-	3,  // 11: template.knowledge.RecommendAnswer:input_type -> template.FindAnswerReq
-	2,  // 12: template.knowledge.KnowledgeAdd:output_type -> template.AddResponse
-	8,  // 13: template.knowledge.KnowledgeList:output_type -> template.ListResponse
-	2,  // 14: template.knowledge.KnowledgeEdit:output_type -> template.AddResponse
-	11, // 15: template.knowledge.KnowledgeInfo:output_type -> template.InfoResponse
-	2,  // 16: template.knowledge.KnowledgeDel:output_type -> template.AddResponse
-	4,  // 17: template.knowledge.FindAnswer:output_type -> template.FindAnswerResp
-	5,  // 18: template.knowledge.RecommendAnswer:output_type -> template.RecommendAnswerResp
-	12, // [12:19] is the sub-list for method output_type
-	5,  // [5:12] is the sub-list for method input_type
-	5,  // [5:5] is the sub-list for extension type_name
-	5,  // [5:5] is the sub-list for extension extendee
-	0,  // [0:5] is the sub-list for field type_name
+	16, // 5: template.CommonPhrasesInfoResp.data:type_name -> template.CommonPhrases
+	16, // 6: template.CommonPhrasesList.Data:type_name -> template.CommonPhrases
+	18, // 7: template.CommonPhrasesListResp.data:type_name -> template.CommonPhrasesList
+	1,  // 8: template.knowledge.KnowledgeAdd:input_type -> template.AddRequest
+	7,  // 9: template.knowledge.KnowledgeList:input_type -> template.ListRequest
+	10, // 10: template.knowledge.KnowledgeEdit:input_type -> template.KnowledgeEditReq
+	9,  // 11: template.knowledge.KnowledgeInfo:input_type -> template.KnowledgeEntity
+	12, // 12: template.knowledge.KnowledgeDel:input_type -> template.KnowledgeDelReq
+	3,  // 13: template.knowledge.FindAnswer:input_type -> template.FindAnswerReq
+	3,  // 14: template.knowledge.RecommendAnswer:input_type -> template.FindAnswerReq
+	13, // 15: template.knowledge.CommonPhrasesAdd:input_type -> template.CommonPhrasesAddReq
+	14, // 16: template.knowledge.CommonPhrasesInfo:input_type -> template.CommonPhrasesInfoReq
+	15, // 17: template.knowledge.CommonPhrasesList:input_type -> template.CommonPhrasesListReq
+	14, // 18: template.knowledge.CommonPhrasesDel:input_type -> template.CommonPhrasesInfoReq
+	2,  // 19: template.knowledge.KnowledgeAdd:output_type -> template.AddResponse
+	8,  // 20: template.knowledge.KnowledgeList:output_type -> template.ListResponse
+	2,  // 21: template.knowledge.KnowledgeEdit:output_type -> template.AddResponse
+	11, // 22: template.knowledge.KnowledgeInfo:output_type -> template.InfoResponse
+	2,  // 23: template.knowledge.KnowledgeDel:output_type -> template.AddResponse
+	4,  // 24: template.knowledge.FindAnswer:output_type -> template.FindAnswerResp
+	5,  // 25: template.knowledge.RecommendAnswer:output_type -> template.RecommendAnswerResp
+	2,  // 26: template.knowledge.CommonPhrasesAdd:output_type -> template.AddResponse
+	17, // 27: template.knowledge.CommonPhrasesInfo:output_type -> template.CommonPhrasesInfoResp
+	19, // 28: template.knowledge.CommonPhrasesList:output_type -> template.CommonPhrasesListResp
+	2,  // 29: template.knowledge.CommonPhrasesDel:output_type -> template.AddResponse
+	19, // [19:30] is the sub-list for method output_type
+	8,  // [8:19] is the sub-list for method input_type
+	8,  // [8:8] is the sub-list for extension type_name
+	8,  // [8:8] is the sub-list for extension extendee
+	0,  // [0:8] is the sub-list for field type_name
 }
 
 func init() { file_knowledge_proto_init() }
@@ -1241,6 +1766,90 @@ func file_knowledge_proto_init() {
 				return nil
 			}
 		}
+		file_knowledge_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonPhrasesAddReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_knowledge_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonPhrasesInfoReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_knowledge_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonPhrasesListReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_knowledge_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonPhrases); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_knowledge_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonPhrasesInfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_knowledge_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonPhrasesList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_knowledge_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CommonPhrasesListResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -1248,7 +1857,7 @@ func file_knowledge_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_knowledge_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   13,
+			NumMessages:   20,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
@@ -1288,6 +1897,14 @@ type KnowledgeClient interface {
 	FindAnswer(ctx context.Context, in *FindAnswerReq, opts ...grpc.CallOption) (*FindAnswerResp, error)
 	//推荐答案
 	RecommendAnswer(ctx context.Context, in *FindAnswerReq, opts ...grpc.CallOption) (*RecommendAnswerResp, error)
+	//客服话术添加、编辑
+	CommonPhrasesAdd(ctx context.Context, in *CommonPhrasesAddReq, opts ...grpc.CallOption) (*AddResponse, error)
+	//客服话术详情
+	CommonPhrasesInfo(ctx context.Context, in *CommonPhrasesInfoReq, opts ...grpc.CallOption) (*CommonPhrasesInfoResp, error)
+	//客服话术列表
+	CommonPhrasesList(ctx context.Context, in *CommonPhrasesListReq, opts ...grpc.CallOption) (*CommonPhrasesListResp, error)
+	//客服话术删除
+	CommonPhrasesDel(ctx context.Context, in *CommonPhrasesInfoReq, opts ...grpc.CallOption) (*AddResponse, error)
 }
 
 type knowledgeClient struct {
@@ -1361,6 +1978,42 @@ func (c *knowledgeClient) RecommendAnswer(ctx context.Context, in *FindAnswerReq
 	return out, nil
 }
 
+func (c *knowledgeClient) CommonPhrasesAdd(ctx context.Context, in *CommonPhrasesAddReq, opts ...grpc.CallOption) (*AddResponse, error) {
+	out := new(AddResponse)
+	err := c.cc.Invoke(ctx, "/template.knowledge/CommonPhrasesAdd", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *knowledgeClient) CommonPhrasesInfo(ctx context.Context, in *CommonPhrasesInfoReq, opts ...grpc.CallOption) (*CommonPhrasesInfoResp, error) {
+	out := new(CommonPhrasesInfoResp)
+	err := c.cc.Invoke(ctx, "/template.knowledge/CommonPhrasesInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *knowledgeClient) CommonPhrasesList(ctx context.Context, in *CommonPhrasesListReq, opts ...grpc.CallOption) (*CommonPhrasesListResp, error) {
+	out := new(CommonPhrasesListResp)
+	err := c.cc.Invoke(ctx, "/template.knowledge/CommonPhrasesList", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *knowledgeClient) CommonPhrasesDel(ctx context.Context, in *CommonPhrasesInfoReq, opts ...grpc.CallOption) (*AddResponse, error) {
+	out := new(AddResponse)
+	err := c.cc.Invoke(ctx, "/template.knowledge/CommonPhrasesDel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // KnowledgeServer is the server API for Knowledge service.
 type KnowledgeServer interface {
 	//知识新增
@@ -1377,6 +2030,14 @@ type KnowledgeServer interface {
 	FindAnswer(context.Context, *FindAnswerReq) (*FindAnswerResp, error)
 	//推荐答案
 	RecommendAnswer(context.Context, *FindAnswerReq) (*RecommendAnswerResp, error)
+	//客服话术添加、编辑
+	CommonPhrasesAdd(context.Context, *CommonPhrasesAddReq) (*AddResponse, error)
+	//客服话术详情
+	CommonPhrasesInfo(context.Context, *CommonPhrasesInfoReq) (*CommonPhrasesInfoResp, error)
+	//客服话术列表
+	CommonPhrasesList(context.Context, *CommonPhrasesListReq) (*CommonPhrasesListResp, error)
+	//客服话术删除
+	CommonPhrasesDel(context.Context, *CommonPhrasesInfoReq) (*AddResponse, error)
 }
 
 // UnimplementedKnowledgeServer can be embedded to have forward compatible implementations.
@@ -1404,6 +2065,18 @@ func (*UnimplementedKnowledgeServer) FindAnswer(context.Context, *FindAnswerReq)
 func (*UnimplementedKnowledgeServer) RecommendAnswer(context.Context, *FindAnswerReq) (*RecommendAnswerResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method RecommendAnswer not implemented")
 }
+func (*UnimplementedKnowledgeServer) CommonPhrasesAdd(context.Context, *CommonPhrasesAddReq) (*AddResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CommonPhrasesAdd not implemented")
+}
+func (*UnimplementedKnowledgeServer) CommonPhrasesInfo(context.Context, *CommonPhrasesInfoReq) (*CommonPhrasesInfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CommonPhrasesInfo not implemented")
+}
+func (*UnimplementedKnowledgeServer) CommonPhrasesList(context.Context, *CommonPhrasesListReq) (*CommonPhrasesListResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CommonPhrasesList not implemented")
+}
+func (*UnimplementedKnowledgeServer) CommonPhrasesDel(context.Context, *CommonPhrasesInfoReq) (*AddResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CommonPhrasesDel not implemented")
+}
 
 func RegisterKnowledgeServer(s *grpc.Server, srv KnowledgeServer) {
 	s.RegisterService(&_Knowledge_serviceDesc, srv)
@@ -1535,6 +2208,78 @@ func _Knowledge_RecommendAnswer_Handler(srv interface{}, ctx context.Context, de
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Knowledge_CommonPhrasesAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CommonPhrasesAddReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KnowledgeServer).CommonPhrasesAdd(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/template.knowledge/CommonPhrasesAdd",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KnowledgeServer).CommonPhrasesAdd(ctx, req.(*CommonPhrasesAddReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Knowledge_CommonPhrasesInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CommonPhrasesInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KnowledgeServer).CommonPhrasesInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/template.knowledge/CommonPhrasesInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KnowledgeServer).CommonPhrasesInfo(ctx, req.(*CommonPhrasesInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Knowledge_CommonPhrasesList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CommonPhrasesListReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KnowledgeServer).CommonPhrasesList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/template.knowledge/CommonPhrasesList",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KnowledgeServer).CommonPhrasesList(ctx, req.(*CommonPhrasesListReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Knowledge_CommonPhrasesDel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CommonPhrasesInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(KnowledgeServer).CommonPhrasesDel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/template.knowledge/CommonPhrasesDel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(KnowledgeServer).CommonPhrasesDel(ctx, req.(*CommonPhrasesInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _Knowledge_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "template.knowledge",
 	HandlerType: (*KnowledgeServer)(nil),
@@ -1567,6 +2312,22 @@ var _Knowledge_serviceDesc = grpc.ServiceDesc{
 			MethodName: "RecommendAnswer",
 			Handler:    _Knowledge_RecommendAnswer_Handler,
 		},
+		{
+			MethodName: "CommonPhrasesAdd",
+			Handler:    _Knowledge_CommonPhrasesAdd_Handler,
+		},
+		{
+			MethodName: "CommonPhrasesInfo",
+			Handler:    _Knowledge_CommonPhrasesInfo_Handler,
+		},
+		{
+			MethodName: "CommonPhrasesList",
+			Handler:    _Knowledge_CommonPhrasesList_Handler,
+		},
+		{
+			MethodName: "CommonPhrasesDel",
+			Handler:    _Knowledge_CommonPhrasesDel_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "knowledge.proto",

+ 52 - 13
rpc/knowledge/knowledgeclient/knowledge.go

@@ -13,19 +13,26 @@ import (
 )
 
 type (
-	FindAnswerReq       = knowledge.FindAnswerReq
-	FindAnswerResp      = knowledge.FindAnswerResp
-	KnowledgeEditReq    = knowledge.KnowledgeEditReq
-	Question            = knowledge.Question
-	AddResponse         = knowledge.AddResponse
-	ListData            = knowledge.ListData
-	ListRequest         = knowledge.ListRequest
-	ListResponse        = knowledge.ListResponse
-	KnowledgeEntity     = knowledge.KnowledgeEntity
-	InfoResponse        = knowledge.InfoResponse
-	KnowledgeDelReq     = knowledge.KnowledgeDelReq
-	AddRequest          = knowledge.AddRequest
-	RecommendAnswerResp = knowledge.RecommendAnswerResp
+	AddResponse           = knowledge.AddResponse
+	ListData              = knowledge.ListData
+	KnowledgeEntity       = knowledge.KnowledgeEntity
+	CommonPhrasesInfoReq  = knowledge.CommonPhrasesInfoReq
+	Question              = knowledge.Question
+	FindAnswerReq         = knowledge.FindAnswerReq
+	RecommendAnswerResp   = knowledge.RecommendAnswerResp
+	ListRequest           = knowledge.ListRequest
+	KnowledgeDelReq       = knowledge.KnowledgeDelReq
+	CommonPhrasesListReq  = knowledge.CommonPhrasesListReq
+	CommonPhrasesListResp = knowledge.CommonPhrasesListResp
+	InfoResponse          = knowledge.InfoResponse
+	CommonPhrases         = knowledge.CommonPhrases
+	CommonPhrasesInfoResp = knowledge.CommonPhrasesInfoResp
+	AddRequest            = knowledge.AddRequest
+	FindAnswerResp        = knowledge.FindAnswerResp
+	ListResponse          = knowledge.ListResponse
+	KnowledgeEditReq      = knowledge.KnowledgeEditReq
+	CommonPhrasesAddReq   = knowledge.CommonPhrasesAddReq
+	CommonPhrasesList     = knowledge.CommonPhrasesList
 
 	Knowledge interface {
 		// 知识新增
@@ -42,6 +49,14 @@ type (
 		FindAnswer(ctx context.Context, in *FindAnswerReq) (*FindAnswerResp, error)
 		// 推荐答案
 		RecommendAnswer(ctx context.Context, in *FindAnswerReq) (*RecommendAnswerResp, error)
+		// 客服话术添加、编辑
+		CommonPhrasesAdd(ctx context.Context, in *CommonPhrasesAddReq) (*AddResponse, error)
+		// 客服话术详情
+		CommonPhrasesInfo(ctx context.Context, in *CommonPhrasesInfoReq) (*CommonPhrasesInfoResp, error)
+		// 客服话术列表
+		CommonPhrasesList(ctx context.Context, in *CommonPhrasesListReq) (*CommonPhrasesListResp, error)
+		// 客服话术删除
+		CommonPhrasesDel(ctx context.Context, in *CommonPhrasesInfoReq) (*AddResponse, error)
 	}
 
 	defaultKnowledge struct {
@@ -96,3 +111,27 @@ func (m *defaultKnowledge) RecommendAnswer(ctx context.Context, in *FindAnswerRe
 	client := knowledge.NewKnowledgeClient(m.cli.Conn())
 	return client.RecommendAnswer(ctx, in)
 }
+
+// 客服话术添加、编辑
+func (m *defaultKnowledge) CommonPhrasesAdd(ctx context.Context, in *CommonPhrasesAddReq) (*AddResponse, error) {
+	client := knowledge.NewKnowledgeClient(m.cli.Conn())
+	return client.CommonPhrasesAdd(ctx, in)
+}
+
+// 客服话术详情
+func (m *defaultKnowledge) CommonPhrasesInfo(ctx context.Context, in *CommonPhrasesInfoReq) (*CommonPhrasesInfoResp, error) {
+	client := knowledge.NewKnowledgeClient(m.cli.Conn())
+	return client.CommonPhrasesInfo(ctx, in)
+}
+
+// 客服话术列表
+func (m *defaultKnowledge) CommonPhrasesList(ctx context.Context, in *CommonPhrasesListReq) (*CommonPhrasesListResp, error) {
+	client := knowledge.NewKnowledgeClient(m.cli.Conn())
+	return client.CommonPhrasesList(ctx, in)
+}
+
+// 客服话术删除
+func (m *defaultKnowledge) CommonPhrasesDel(ctx context.Context, in *CommonPhrasesInfoReq) (*AddResponse, error) {
+	client := knowledge.NewKnowledgeClient(m.cli.Conn())
+	return client.CommonPhrasesDel(ctx, in)
+}

+ 5 - 4
rpc/knowledge/util/model.go

@@ -1,8 +1,9 @@
 package util
 
 const (
-	Date_Full_Layout = "2006-01-02 15:04:05"
-	KNOWLEDGE        = "socialize_knowledge"
-	QUESTION         = "socialize_question"
-	ANSWER           = "socialize_answer"
+	DateFullLayout = "2006-01-02 15:04:05"
+	KNOWLEDGE      = "socialize_knowledge"
+	QUESTION       = "socialize_question"
+	ANSWER         = "socialize_answer"
+	COMMONPHRASES  = "socialize_common_phrases"
 )