From 680902796dd3d1045e382e6e89db7be0503261a7 Mon Sep 17 00:00:00 2001 From: Yevhen Shevchuk Date: Wed, 2 Sep 2026 02:52:50 +0300 Subject: [PATCH] feat: allow transfer of a call to a dialplan (WTEL-10261, WTEL-10263) Wire allow_transfer through model/store/app/grpc_api (WTEL-10261). Add allow_transfer search filter and blind transfer to dialplan (call_bt_dialplan WS action + BlindTransferCallToDialplan setting transfer_to_schema_id) (WTEL-10263). Regenerate gen for acr_routing_out_call. --- app/call.go | 16 + app/flow_routing_out_call.go | 1 + controller/call.go | 9 + gen/engine/acr_routing_out_call.pb.go | 549 ++++++++++-------- grpc_api/flow_routing_out_call.go | 50 +- model/call.go | 6 + model/flow.go | 45 +- store/sqlstore/flow_routing_out_call_store.go | 73 +-- wsapi/call.go | 29 + 9 files changed, 465 insertions(+), 313 deletions(-) diff --git a/app/call.go b/app/call.go index 4e0ae085..204b3441 100644 --- a/app/call.go +++ b/app/call.go @@ -663,6 +663,22 @@ func (app *App) BlindTransferCallToQueue(ctx context.Context, domainId int64, re }) } +func (app *App) BlindTransferCallToDialplan(ctx context.Context, domainId int64, req *model.BlindTransferCallToDialplan) model.AppError { + if req.Variables == nil { + req.Variables = make(map[string]string) + } + + s := strconv.Itoa(req.SchemaId) + + req.Variables["transfer_to_schema_id"] = s + + return app.BlindTransferCallExt(ctx, domainId, &model.BlindTransferCall{ + UserCallRequest: req.UserCallRequest, + Destination: s, + Variables: req.Variables, + }) +} + func (app *App) BlindTransferCall(ctx context.Context, domainId int64, req *model.BlindTransferCall) model.AppError { var cli call_manager.CallClient var err model.AppError diff --git a/app/flow_routing_out_call.go b/app/flow_routing_out_call.go index 66a1fbd2..0817e383 100644 --- a/app/flow_routing_out_call.go +++ b/app/flow_routing_out_call.go @@ -33,6 +33,7 @@ func (app *App) UpdateRoutingOutboundCall(ctx context.Context, routing *model.Ro oldRouting.Description = routing.Description oldRouting.Pattern = routing.Pattern oldRouting.Disabled = routing.Disabled + oldRouting.AllowTransfer = routing.AllowTransfer oldRouting.UpdatedAt = routing.UpdatedAt if routing.GetSchemaId() != nil { diff --git a/controller/call.go b/controller/call.go index 9a033e2c..bbca9ac6 100644 --- a/controller/call.go +++ b/controller/call.go @@ -171,6 +171,15 @@ func (c *Controller) BlindTransferCallToQueue(ctx context.Context, session *auth return c.app.BlindTransferCallToQueue(ctx, session.Domain(domainId), req) } +func (c *Controller) BlindTransferCallToDialplan(ctx context.Context, session *auth_manager.Session, domainId int64, req *model.BlindTransferCallToDialplan) model.AppError { + permission := session.GetPermission(model.PERMISSION_SCOPE_CALL) + if !permission.CanUpdate() { + return c.app.MakePermissionError(session, permission, auth_manager.PERMISSION_ACCESS_UPDATE) + } + + return c.app.BlindTransferCallToDialplan(ctx, session.Domain(domainId), req) +} + func (c *Controller) CallToQueue(ctx context.Context, session *auth_manager.Session, userId int64, parentId string, cp model.CallParameters, queueId, agentId *int) (string, model.AppError) { permission := session.GetPermission(model.PERMISSION_SCOPE_CALL) if !permission.CanCreate() { diff --git a/gen/engine/acr_routing_out_call.pb.go b/gen/engine/acr_routing_out_call.pb.go index 7304d115..c88dabaa 100644 --- a/gen/engine/acr_routing_out_call.pb.go +++ b/gen/engine/acr_routing_out_call.pb.go @@ -10,6 +10,7 @@ import ( _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -136,14 +137,15 @@ type PatchRoutingOutboundCallRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - Schema *Lookup `protobuf:"bytes,4,opt,name=schema,proto3" json:"schema,omitempty"` - Pattern string `protobuf:"bytes,5,opt,name=pattern,proto3" json:"pattern,omitempty"` - Disabled bool `protobuf:"varint,7,opt,name=disabled,proto3" json:"disabled,omitempty"` - Fields []string `protobuf:"bytes,8,rep,name=fields,proto3" json:"fields,omitempty"` - DomainId int64 `protobuf:"varint,9,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Schema *Lookup `protobuf:"bytes,4,opt,name=schema,proto3" json:"schema,omitempty"` + Pattern string `protobuf:"bytes,5,opt,name=pattern,proto3" json:"pattern,omitempty"` + Disabled bool `protobuf:"varint,7,opt,name=disabled,proto3" json:"disabled,omitempty"` + AllowTransfer bool `protobuf:"varint,10,opt,name=allow_transfer,json=allowTransfer,proto3" json:"allow_transfer,omitempty"` + Fields []string `protobuf:"bytes,8,rep,name=fields,proto3" json:"fields,omitempty"` + DomainId int64 `protobuf:"varint,9,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` } func (x *PatchRoutingOutboundCallRequest) Reset() { @@ -220,6 +222,13 @@ func (x *PatchRoutingOutboundCallRequest) GetDisabled() bool { return false } +func (x *PatchRoutingOutboundCallRequest) GetAllowTransfer() bool { + if x != nil { + return x.AllowTransfer + } + return false +} + func (x *PatchRoutingOutboundCallRequest) GetFields() []string { if x != nil { return x.Fields @@ -294,13 +303,14 @@ type UpdateRoutingOutboundCallRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - Schema *Lookup `protobuf:"bytes,4,opt,name=schema,proto3" json:"schema,omitempty"` - Pattern string `protobuf:"bytes,5,opt,name=pattern,proto3" json:"pattern,omitempty"` - Disabled bool `protobuf:"varint,7,opt,name=disabled,proto3" json:"disabled,omitempty"` - DomainId int64 `protobuf:"varint,8,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Schema *Lookup `protobuf:"bytes,4,opt,name=schema,proto3" json:"schema,omitempty"` + Pattern string `protobuf:"bytes,5,opt,name=pattern,proto3" json:"pattern,omitempty"` + Disabled bool `protobuf:"varint,7,opt,name=disabled,proto3" json:"disabled,omitempty"` + AllowTransfer bool `protobuf:"varint,9,opt,name=allow_transfer,json=allowTransfer,proto3" json:"allow_transfer,omitempty"` + DomainId int64 `protobuf:"varint,8,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` } func (x *UpdateRoutingOutboundCallRequest) Reset() { @@ -377,6 +387,13 @@ func (x *UpdateRoutingOutboundCallRequest) GetDisabled() bool { return false } +func (x *UpdateRoutingOutboundCallRequest) GetAllowTransfer() bool { + if x != nil { + return x.AllowTransfer + } + return false +} + func (x *UpdateRoutingOutboundCallRequest) GetDomainId() int64 { if x != nil { return x.DomainId @@ -444,16 +461,17 @@ type SearchRoutingOutboundCallRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` - Size int32 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` - Q string `protobuf:"bytes,3,opt,name=q,proto3" json:"q,omitempty"` - Sort string `protobuf:"bytes,4,opt,name=sort,proto3" json:"sort,omitempty"` - Fields []string `protobuf:"bytes,5,rep,name=fields,proto3" json:"fields,omitempty"` - Id []uint32 `protobuf:"varint,6,rep,packed,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` - SchemaId []uint32 `protobuf:"varint,8,rep,packed,name=schema_id,json=schemaId,proto3" json:"schema_id,omitempty"` - Pattern string `protobuf:"bytes,9,opt,name=pattern,proto3" json:"pattern,omitempty"` - Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` + Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` + Size int32 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` + Q string `protobuf:"bytes,3,opt,name=q,proto3" json:"q,omitempty"` + Sort string `protobuf:"bytes,4,opt,name=sort,proto3" json:"sort,omitempty"` + Fields []string `protobuf:"bytes,5,rep,name=fields,proto3" json:"fields,omitempty"` + Id []uint32 `protobuf:"varint,6,rep,packed,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` + SchemaId []uint32 `protobuf:"varint,8,rep,packed,name=schema_id,json=schemaId,proto3" json:"schema_id,omitempty"` + Pattern string `protobuf:"bytes,9,opt,name=pattern,proto3" json:"pattern,omitempty"` + Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` + AllowTransfer *wrapperspb.BoolValue `protobuf:"bytes,11,opt,name=allow_transfer,json=allowTransfer,proto3" json:"allow_transfer,omitempty"` } func (x *SearchRoutingOutboundCallRequest) Reset() { @@ -558,17 +576,25 @@ func (x *SearchRoutingOutboundCallRequest) GetDescription() string { return "" } +func (x *SearchRoutingOutboundCallRequest) GetAllowTransfer() *wrapperspb.BoolValue { + if x != nil { + return x.AllowTransfer + } + return nil +} + type CreateRoutingOutboundCallRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Schema *Lookup `protobuf:"bytes,3,opt,name=schema,proto3" json:"schema,omitempty"` - Pattern string `protobuf:"bytes,4,opt,name=pattern,proto3" json:"pattern,omitempty"` - Disabled bool `protobuf:"varint,6,opt,name=disabled,proto3" json:"disabled,omitempty"` - DomainId int64 `protobuf:"varint,7,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Schema *Lookup `protobuf:"bytes,3,opt,name=schema,proto3" json:"schema,omitempty"` + Pattern string `protobuf:"bytes,4,opt,name=pattern,proto3" json:"pattern,omitempty"` + Disabled bool `protobuf:"varint,6,opt,name=disabled,proto3" json:"disabled,omitempty"` + AllowTransfer bool `protobuf:"varint,8,opt,name=allow_transfer,json=allowTransfer,proto3" json:"allow_transfer,omitempty"` + DomainId int64 `protobuf:"varint,7,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` } func (x *CreateRoutingOutboundCallRequest) Reset() { @@ -638,6 +664,13 @@ func (x *CreateRoutingOutboundCallRequest) GetDisabled() bool { return false } +func (x *CreateRoutingOutboundCallRequest) GetAllowTransfer() bool { + if x != nil { + return x.AllowTransfer + } + return false +} + func (x *CreateRoutingOutboundCallRequest) GetDomainId() int64 { if x != nil { return x.DomainId @@ -650,17 +683,18 @@ type RoutingOutboundCall struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - CreatedAt int64 `protobuf:"varint,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - CreatedBy *Lookup `protobuf:"bytes,3,opt,name=created_by,json=createdBy,proto3" json:"created_by,omitempty"` - UpdatedAt int64 `protobuf:"varint,4,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - UpdatedBy *Lookup `protobuf:"bytes,5,opt,name=updated_by,json=updatedBy,proto3" json:"updated_by,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` - Schema *Lookup `protobuf:"bytes,8,opt,name=schema,proto3" json:"schema,omitempty"` - Pattern string `protobuf:"bytes,9,opt,name=pattern,proto3" json:"pattern,omitempty"` - Disabled bool `protobuf:"varint,11,opt,name=disabled,proto3" json:"disabled,omitempty"` - DomainId int64 `protobuf:"varint,12,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + CreatedAt int64 `protobuf:"varint,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + CreatedBy *Lookup `protobuf:"bytes,3,opt,name=created_by,json=createdBy,proto3" json:"created_by,omitempty"` + UpdatedAt int64 `protobuf:"varint,4,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + UpdatedBy *Lookup `protobuf:"bytes,5,opt,name=updated_by,json=updatedBy,proto3" json:"updated_by,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` + Schema *Lookup `protobuf:"bytes,8,opt,name=schema,proto3" json:"schema,omitempty"` + Pattern string `protobuf:"bytes,9,opt,name=pattern,proto3" json:"pattern,omitempty"` + Disabled bool `protobuf:"varint,11,opt,name=disabled,proto3" json:"disabled,omitempty"` + AllowTransfer bool `protobuf:"varint,13,opt,name=allow_transfer,json=allowTransfer,proto3" json:"allow_transfer,omitempty"` + DomainId int64 `protobuf:"varint,12,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` } func (x *RoutingOutboundCall) Reset() { @@ -765,6 +799,13 @@ func (x *RoutingOutboundCall) GetDisabled() bool { return false } +func (x *RoutingOutboundCall) GetAllowTransfer() bool { + if x != nil { + return x.AllowTransfer + } + return false +} + func (x *RoutingOutboundCall) GetDomainId() int64 { if x != nil { return x.DomainId @@ -777,14 +818,15 @@ type RoutingOutboundCallCompact struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` - Schema *Lookup `protobuf:"bytes,8,opt,name=schema,proto3" json:"schema,omitempty"` - Pattern string `protobuf:"bytes,9,opt,name=pattern,proto3" json:"pattern,omitempty"` - Disabled bool `protobuf:"varint,11,opt,name=disabled,proto3" json:"disabled,omitempty"` - Position int32 `protobuf:"varint,12,opt,name=position,proto3" json:"position,omitempty"` - DomainId int64 `protobuf:"varint,13,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"` + Schema *Lookup `protobuf:"bytes,8,opt,name=schema,proto3" json:"schema,omitempty"` + Pattern string `protobuf:"bytes,9,opt,name=pattern,proto3" json:"pattern,omitempty"` + Disabled bool `protobuf:"varint,11,opt,name=disabled,proto3" json:"disabled,omitempty"` + Position int32 `protobuf:"varint,12,opt,name=position,proto3" json:"position,omitempty"` + AllowTransfer bool `protobuf:"varint,14,opt,name=allow_transfer,json=allowTransfer,proto3" json:"allow_transfer,omitempty"` + DomainId int64 `protobuf:"varint,13,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` } func (x *RoutingOutboundCallCompact) Reset() { @@ -868,6 +910,13 @@ func (x *RoutingOutboundCallCompact) GetPosition() int32 { return 0 } +func (x *RoutingOutboundCallCompact) GetAllowTransfer() bool { + if x != nil { + return x.AllowTransfer + } + return false +} + func (x *RoutingOutboundCallCompact) GetDomainId() int64 { if x != nil { return x.DomainId @@ -937,7 +986,9 @@ var file_acr_routing_out_call_proto_rawDesc = []byte{ 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x1a, 0x0b, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73, 0x0a, 0x26, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x72, 0x6f, @@ -949,7 +1000,7 @@ var file_acr_routing_out_call_proto_rawDesc = []byte{ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x1f, 0x50, 0x61, + 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0xa1, 0x02, 0x0a, 0x1f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, @@ -962,178 +1013,194 @@ var file_acr_routing_out_call_proto_rawDesc = []byte{ 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xe3, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x4d, 0x0a, - 0x1e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x81, 0x02, 0x0a, - 0x20, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, + 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x4f, 0x0a, + 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0xd3, 0x01, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xf2, 0x02, 0x0a, 0x13, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2d, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2d, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x8a, + 0x02, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, + 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1b, + 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x1e, 0x52, + 0x65, 0x61, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xc4, 0x02, 0x0a, 0x20, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, + 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x01, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, + 0x69, 0x64, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, + 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x22, 0xfa, 0x01, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, + 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x99, + 0x03, 0x0a, 0x13, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x2d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, + 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x42, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, + 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1b, 0x0a, + 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xa0, 0x02, 0x0a, 0x1a, 0x52, + 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, + 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x26, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, - 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, - 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xf9, 0x01, 0x0a, 0x1a, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x67, 0x0a, + 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x12, 0x38, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, + 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x52, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x32, 0x99, 0x08, 0x0a, 0x1a, 0x52, 0x6f, 0x75, 0x74, 0x69, + 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, - 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x67, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, - 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, - 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x32, 0x99, 0x08, 0x0a, 0x1a, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x86, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, + 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, + 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, + 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x87, + 0x01, 0x0a, 0x19, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, + 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x65, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, + 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, + 0x17, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x61, + 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, + 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x26, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x61, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, + 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1e, 0x12, 0x1c, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0x8b, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, - 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, + 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, - 0x17, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, - 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, - 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, - 0x6c, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x72, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x61, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x26, - 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, - 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x61, 0x6c, 0x6c, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x72, 0x6f, + 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, + 0x1c, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, + 0x0a, 0x18, 0x50, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, + 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x27, 0x2e, 0x65, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, + 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, + 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x32, 0x1c, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x19, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, - 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x27, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, 0x2f, 0x72, 0x6f, 0x75, 0x74, + 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x1f, 0x4d, 0x6f, + 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, + 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x2e, 0x2e, + 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x3a, 0x01, 0x2a, 0x32, 0x2c, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x27, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, - 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x32, 0x1c, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, - 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x1f, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x2e, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, - 0x3a, 0x01, 0x2a, 0x32, 0x2c, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, - 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x66, 0x72, - 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x6f, 0x2f, 0x7b, 0x74, 0x6f, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, - 0x28, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x6e, 0x67, 0x69, - 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, - 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x42, 0x22, 0x5a, 0x20, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x77, 0x65, 0x62, 0x69, 0x74, - 0x65, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x73, 0x2f, 0x7b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x6f, 0x2f, + 0x7b, 0x74, 0x6f, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, + 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x22, 0x24, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6f, + 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x42, 0x22, 0x5a, 0x20, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x77, 0x65, 0x62, 0x69, 0x74, 0x65, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, + 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1162,35 +1229,37 @@ var file_acr_routing_out_call_proto_goTypes = []interface{}{ (*RoutingOutboundCallCompact)(nil), // 9: engine.RoutingOutboundCallCompact (*ListRoutingOutboundCall)(nil), // 10: engine.ListRoutingOutboundCall (*Lookup)(nil), // 11: engine.Lookup + (*wrapperspb.BoolValue)(nil), // 12: google.protobuf.BoolValue } var file_acr_routing_out_call_proto_depIdxs = []int32{ 11, // 0: engine.PatchRoutingOutboundCallRequest.schema:type_name -> engine.Lookup 11, // 1: engine.UpdateRoutingOutboundCallRequest.schema:type_name -> engine.Lookup - 11, // 2: engine.CreateRoutingOutboundCallRequest.schema:type_name -> engine.Lookup - 11, // 3: engine.RoutingOutboundCall.created_by:type_name -> engine.Lookup - 11, // 4: engine.RoutingOutboundCall.updated_by:type_name -> engine.Lookup - 11, // 5: engine.RoutingOutboundCall.schema:type_name -> engine.Lookup - 11, // 6: engine.RoutingOutboundCallCompact.schema:type_name -> engine.Lookup - 9, // 7: engine.ListRoutingOutboundCall.items:type_name -> engine.RoutingOutboundCallCompact - 7, // 8: engine.RoutingOutboundCallService.CreateRoutingOutboundCall:input_type -> engine.CreateRoutingOutboundCallRequest - 6, // 9: engine.RoutingOutboundCallService.SearchRoutingOutboundCall:input_type -> engine.SearchRoutingOutboundCallRequest - 5, // 10: engine.RoutingOutboundCallService.ReadRoutingOutboundCall:input_type -> engine.ReadRoutingOutboundCallRequest - 4, // 11: engine.RoutingOutboundCallService.UpdateRoutingOutboundCall:input_type -> engine.UpdateRoutingOutboundCallRequest - 2, // 12: engine.RoutingOutboundCallService.PatchRoutingOutboundCall:input_type -> engine.PatchRoutingOutboundCallRequest - 0, // 13: engine.RoutingOutboundCallService.MovePositionRoutingOutboundCall:input_type -> engine.MovePositionRoutingOutboundCallRequest - 3, // 14: engine.RoutingOutboundCallService.DeleteRoutingOutboundCall:input_type -> engine.DeleteRoutingOutboundCallRequest - 8, // 15: engine.RoutingOutboundCallService.CreateRoutingOutboundCall:output_type -> engine.RoutingOutboundCall - 10, // 16: engine.RoutingOutboundCallService.SearchRoutingOutboundCall:output_type -> engine.ListRoutingOutboundCall - 8, // 17: engine.RoutingOutboundCallService.ReadRoutingOutboundCall:output_type -> engine.RoutingOutboundCall - 8, // 18: engine.RoutingOutboundCallService.UpdateRoutingOutboundCall:output_type -> engine.RoutingOutboundCall - 8, // 19: engine.RoutingOutboundCallService.PatchRoutingOutboundCall:output_type -> engine.RoutingOutboundCall - 1, // 20: engine.RoutingOutboundCallService.MovePositionRoutingOutboundCall:output_type -> engine.MovePositionRoutingOutboundCallResponse - 8, // 21: engine.RoutingOutboundCallService.DeleteRoutingOutboundCall:output_type -> engine.RoutingOutboundCall - 15, // [15:22] is the sub-list for method output_type - 8, // [8:15] 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 + 12, // 2: engine.SearchRoutingOutboundCallRequest.allow_transfer:type_name -> google.protobuf.BoolValue + 11, // 3: engine.CreateRoutingOutboundCallRequest.schema:type_name -> engine.Lookup + 11, // 4: engine.RoutingOutboundCall.created_by:type_name -> engine.Lookup + 11, // 5: engine.RoutingOutboundCall.updated_by:type_name -> engine.Lookup + 11, // 6: engine.RoutingOutboundCall.schema:type_name -> engine.Lookup + 11, // 7: engine.RoutingOutboundCallCompact.schema:type_name -> engine.Lookup + 9, // 8: engine.ListRoutingOutboundCall.items:type_name -> engine.RoutingOutboundCallCompact + 7, // 9: engine.RoutingOutboundCallService.CreateRoutingOutboundCall:input_type -> engine.CreateRoutingOutboundCallRequest + 6, // 10: engine.RoutingOutboundCallService.SearchRoutingOutboundCall:input_type -> engine.SearchRoutingOutboundCallRequest + 5, // 11: engine.RoutingOutboundCallService.ReadRoutingOutboundCall:input_type -> engine.ReadRoutingOutboundCallRequest + 4, // 12: engine.RoutingOutboundCallService.UpdateRoutingOutboundCall:input_type -> engine.UpdateRoutingOutboundCallRequest + 2, // 13: engine.RoutingOutboundCallService.PatchRoutingOutboundCall:input_type -> engine.PatchRoutingOutboundCallRequest + 0, // 14: engine.RoutingOutboundCallService.MovePositionRoutingOutboundCall:input_type -> engine.MovePositionRoutingOutboundCallRequest + 3, // 15: engine.RoutingOutboundCallService.DeleteRoutingOutboundCall:input_type -> engine.DeleteRoutingOutboundCallRequest + 8, // 16: engine.RoutingOutboundCallService.CreateRoutingOutboundCall:output_type -> engine.RoutingOutboundCall + 10, // 17: engine.RoutingOutboundCallService.SearchRoutingOutboundCall:output_type -> engine.ListRoutingOutboundCall + 8, // 18: engine.RoutingOutboundCallService.ReadRoutingOutboundCall:output_type -> engine.RoutingOutboundCall + 8, // 19: engine.RoutingOutboundCallService.UpdateRoutingOutboundCall:output_type -> engine.RoutingOutboundCall + 8, // 20: engine.RoutingOutboundCallService.PatchRoutingOutboundCall:output_type -> engine.RoutingOutboundCall + 1, // 21: engine.RoutingOutboundCallService.MovePositionRoutingOutboundCall:output_type -> engine.MovePositionRoutingOutboundCallResponse + 8, // 22: engine.RoutingOutboundCallService.DeleteRoutingOutboundCall:output_type -> engine.RoutingOutboundCall + 16, // [16:23] is the sub-list for method output_type + 9, // [9:16] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_acr_routing_out_call_proto_init() } diff --git a/grpc_api/flow_routing_out_call.go b/grpc_api/flow_routing_out_call.go index b858e190..bd67ea70 100644 --- a/grpc_api/flow_routing_out_call.go +++ b/grpc_api/flow_routing_out_call.go @@ -42,7 +42,8 @@ func (api *routingOutboundCall) CreateRoutingOutboundCall(ctx context.Context, i Schema: model.Lookup{ Id: int(in.GetSchema().GetId()), }, - Disabled: in.Disabled, + Disabled: in.Disabled, + AllowTransfer: in.AllowTransfer, } if routing, err = api.ctrl.CreateRoutingOutboundCall(ctx, session, routing); err != nil { @@ -75,6 +76,10 @@ func (api *routingOutboundCall) SearchRoutingOutboundCall(ctx context.Context, i Description: GetStringPointer(in.Description), } + if in.AllowTransfer != nil { + req.AllowTransfer = model.NewBool(in.GetAllowTransfer().GetValue()) + } + list, isEndList, err = api.ctrl.SearchRoutingOutboundCall(ctx, session, req) if err != nil { @@ -130,8 +135,9 @@ func (api *routingOutboundCall) UpdateRoutingOutboundCall(ctx context.Context, i Schema: model.Lookup{ Id: int(in.GetSchema().GetId()), }, - Pattern: in.Pattern, - Disabled: in.Disabled, + Pattern: in.Pattern, + Disabled: in.Disabled, + AllowTransfer: in.AllowTransfer, } routing, err = api.ctrl.UpdateRoutingOutboundCall(ctx, session, routing) @@ -165,6 +171,8 @@ func (api *routingOutboundCall) PatchRoutingOutboundCall(ctx context.Context, in patch.Pattern = model.NewString(in.GetPattern()) case "disabled": patch.Disabled = model.NewBool(in.GetDisabled()) + case "allow_transfer": + patch.AllowTransfer = model.NewBool(in.GetAllowTransfer()) } } @@ -211,16 +219,17 @@ func (api *routingOutboundCall) DeleteRoutingOutboundCall(ctx context.Context, i func transformRoutingOutboundCall(src *model.RoutingOutboundCall) *engine.RoutingOutboundCall { dst := &engine.RoutingOutboundCall{ - Id: src.Id, - DomainId: src.DomainId, - CreatedAt: src.CreatedAt, - CreatedBy: GetProtoLookup(src.CreatedBy), - UpdatedAt: src.UpdatedAt, - UpdatedBy: GetProtoLookup(src.UpdatedBy), - Description: src.Description, - Name: src.Name, - Pattern: src.Pattern, - Disabled: src.Disabled, + Id: src.Id, + DomainId: src.DomainId, + CreatedAt: src.CreatedAt, + CreatedBy: GetProtoLookup(src.CreatedBy), + UpdatedAt: src.UpdatedAt, + UpdatedBy: GetProtoLookup(src.UpdatedBy), + Description: src.Description, + Name: src.Name, + Pattern: src.Pattern, + Disabled: src.Disabled, + AllowTransfer: src.AllowTransfer, } if src.GetSchemaId() != nil { @@ -235,13 +244,14 @@ func transformRoutingOutboundCall(src *model.RoutingOutboundCall) *engine.Routin func toRoutingOutboundCallCompact(src *model.RoutingOutboundCall) *engine.RoutingOutboundCallCompact { dst := &engine.RoutingOutboundCallCompact{ - Id: src.Id, - DomainId: src.DomainId, - Description: src.Description, - Name: src.Name, - Pattern: src.Pattern, - Disabled: src.Disabled, - Position: int32(src.Position), + Id: src.Id, + DomainId: src.DomainId, + Description: src.Description, + Name: src.Name, + Pattern: src.Pattern, + Disabled: src.Disabled, + AllowTransfer: src.AllowTransfer, + Position: int32(src.Position), } if src.GetSchemaId() != nil { diff --git a/model/call.go b/model/call.go index 01246f27..c710090b 100644 --- a/model/call.go +++ b/model/call.go @@ -172,6 +172,12 @@ type BlindTransferCallToQueue struct { Variables map[string]string } +type BlindTransferCallToDialplan struct { + UserCallRequest + SchemaId int + Variables map[string]string +} + type BridgeCall struct { FromId string `json:"from_id" db:"from_id"` ToId string `json:"to_id" db:"to_id"` diff --git a/model/flow.go b/model/flow.go index fffb7094..cf89c20b 100644 --- a/model/flow.go +++ b/model/flow.go @@ -121,21 +121,23 @@ func (r *RoutingVariable) IsValid() AppError { type RoutingOutboundCall struct { DomainRecord - Name string `json:"name" db:"name"` - Description string `json:"description" db:"description"` - Schema Lookup `json:"schema" db:"schema"` - Position int `json:"position" db:"position"` - Pattern string `json:"pattern" db:"pattern"` - Disabled bool `json:"disabled" db:"disabled"` + Name string `json:"name" db:"name"` + Description string `json:"description" db:"description"` + Schema Lookup `json:"schema" db:"schema"` + Position int `json:"position" db:"position"` + Pattern string `json:"pattern" db:"pattern"` + Disabled bool `json:"disabled" db:"disabled"` + AllowTransfer bool `json:"allow_transfer" db:"allow_transfer"` } type SearchRoutingOutboundCall struct { ListRequest - Ids []uint32 - Name *string - SchemaIds []uint32 - Pattern *string - Description *string + Ids []uint32 + Name *string + SchemaIds []uint32 + Pattern *string + Description *string + AllowTransfer *bool } func (RoutingOutboundCall) DefaultOrder() string { @@ -144,12 +146,12 @@ func (RoutingOutboundCall) DefaultOrder() string { func (a RoutingOutboundCall) AllowFields() []string { return []string{"id", "domain_id", "name", "description", "created_at", "created_by", "updated_at", "updated_by", - "pattern", "disabled", "schema", "position"} + "pattern", "disabled", "allow_transfer", "schema", "position"} } func (a RoutingOutboundCall) DefaultFields() []string { return []string{"id", "name", "description", - "pattern", "disabled", "schema", "position"} + "pattern", "disabled", "allow_transfer", "schema", "position"} } func (a RoutingOutboundCall) EntityName() string { @@ -157,12 +159,13 @@ func (a RoutingOutboundCall) EntityName() string { } type RoutingOutboundCallPatch struct { - UpdatedById int - Name *string `json:"name" db:"name"` - Description *string `json:"description" db:"description"` - Schema *Lookup `json:"schema" db:"scheme"` - Pattern *string `json:"pattern" db:"pattern"` - Disabled *bool `json:"disabled" db:"disabled"` + UpdatedById int + Name *string `json:"name" db:"name"` + Description *string `json:"description" db:"description"` + Schema *Lookup `json:"schema" db:"scheme"` + Pattern *string `json:"pattern" db:"pattern"` + Disabled *bool `json:"disabled" db:"disabled"` + AllowTransfer *bool `json:"allow_transfer" db:"allow_transfer"` } func (r *RoutingOutboundCall) Patch(patch *RoutingOutboundCallPatch) { @@ -185,6 +188,10 @@ func (r *RoutingOutboundCall) Patch(patch *RoutingOutboundCallPatch) { if patch.Disabled != nil { r.Disabled = *patch.Disabled } + + if patch.AllowTransfer != nil { + r.AllowTransfer = *patch.AllowTransfer + } } func (r *RoutingOutboundCall) GetSchemaId() *int { diff --git a/store/sqlstore/flow_routing_out_call_store.go b/store/sqlstore/flow_routing_out_call_store.go index eab4b659..3ffe179e 100644 --- a/store/sqlstore/flow_routing_out_call_store.go +++ b/store/sqlstore/flow_routing_out_call_store.go @@ -24,28 +24,29 @@ func (s SqlRoutingOutboundCallStore) Create(ctx context.Context, routing *model. var out *model.RoutingOutboundCall err := s.GetMaster().WithContext(ctx).SelectOne(&out, `with tmp as ( insert into flow.acr_routing_outbound_call (domain_id, name, description, created_at, created_by, updated_at, updated_by, - scheme_id, pattern, disabled) - values (:DomainId, :Name, :Description, :CreatedAt, :CreatedBy, :UpdatedAt, :UpdatedBy, :SchemeId, :Pattern, :Disabled) + scheme_id, pattern, disabled, allow_transfer) + values (:DomainId, :Name, :Description, :CreatedAt, :CreatedBy, :UpdatedAt, :UpdatedBy, :SchemeId, :Pattern, :Disabled, :AllowTransfer) returning * ) select tmp.id, tmp.domain_id, tmp.name, tmp.description, tmp.created_at, call_center.cc_get_lookup(c.id,c.name) as created_by, tmp.created_at, call_center.cc_get_lookup(u.id, u.name) as updated_by, tmp.updated_at, call_center.cc_get_lookup(arst.id, arst.name) as schema, - tmp.pattern, disabled + tmp.pattern, disabled, allow_transfer from tmp left join directory.wbt_user c on c.id = tmp.created_by left join directory.wbt_user u on u.id = tmp.updated_by inner join flow.acr_routing_scheme arst on tmp.scheme_id = arst.id`, map[string]interface{}{ - "DomainId": routing.DomainId, - "Name": routing.Name, - "Description": routing.Description, - "CreatedAt": routing.CreatedAt, - "CreatedBy": routing.CreatedBy.GetSafeId(), - "UpdatedAt": routing.UpdatedAt, - "UpdatedBy": routing.UpdatedBy.GetSafeId(), - "SchemeId": routing.Schema.Id, - "Pattern": routing.Pattern, - "Disabled": routing.Disabled, + "DomainId": routing.DomainId, + "Name": routing.Name, + "Description": routing.Description, + "CreatedAt": routing.CreatedAt, + "CreatedBy": routing.CreatedBy.GetSafeId(), + "UpdatedAt": routing.UpdatedAt, + "UpdatedBy": routing.UpdatedBy.GetSafeId(), + "SchemeId": routing.Schema.Id, + "Pattern": routing.Pattern, + "Disabled": routing.Disabled, + "AllowTransfer": routing.AllowTransfer, }) if err != nil { @@ -65,13 +66,14 @@ func (s SqlRoutingOutboundCallStore) GetAllPage(ctx context.Context, domainId in var routing []*model.RoutingOutboundCall f := map[string]interface{}{ - "DomainId": domainId, - "Q": search.GetQ(), - "Ids": pq.Array(search.Ids), - "Name": search.Name, - "Description": search.Description, - "SchemaIds": pq.Array(search.SchemaIds), - "Pattern": search.Pattern, + "DomainId": domainId, + "Q": search.GetQ(), + "Ids": pq.Array(search.Ids), + "Name": search.Name, + "Description": search.Description, + "SchemaIds": pq.Array(search.SchemaIds), + "Pattern": search.Pattern, + "AllowTransfer": search.AllowTransfer, } err := s.ListQueryFromSchema(ctx, &routing, "flow", search.ListRequest, @@ -82,6 +84,7 @@ func (s SqlRoutingOutboundCallStore) GetAllPage(ctx context.Context, domainId in and (:Name::text isnull or name = :Name) and (:Description::text isnull or description = :Description) and (:Pattern::text isnull or pattern = :Pattern) + and (:AllowTransfer::bool isnull or allow_transfer = :AllowTransfer) `, model.RoutingOutboundCall{}, f) if err != nil { @@ -96,8 +99,8 @@ func (s SqlRoutingOutboundCallStore) Get(ctx context.Context, domainId, id int64 if err := s.GetReplica().WithContext(ctx).SelectOne(&routing, `select tmp.id, tmp.domain_id, tmp.name, tmp.description, tmp.created_at, call_center.cc_get_lookup(c.id, c.name) as created_by, - tmp.created_at, call_center.cc_get_lookup(u.id, u.name) as updated_by, call_center.cc_get_lookup(arst.id, arst.name) as schema, - tmp.pattern, disabled + tmp.created_at, call_center.cc_get_lookup(u.id, u.name) as updated_by, call_center.cc_get_lookup(arst.id, arst.name) as schema, + tmp.pattern, disabled, allow_transfer from flow.acr_routing_outbound_call tmp left join directory.wbt_user c on c.id = tmp.created_by left join directory.wbt_user u on u.id = tmp.updated_by @@ -123,27 +126,29 @@ func (s SqlRoutingOutboundCallStore) Update(ctx context.Context, routing *model. updated_by = :UpdatedBy, scheme_id = :SchemeId, pattern = :Pattern, - disabled = :Disabled + disabled = :Disabled, + allow_transfer = :AllowTransfer where r.id = :Id and r.domain_id = :Domain returning * ) select tmp.id, tmp.domain_id, tmp.name, tmp.description, tmp.created_at, call_center.cc_get_lookup(c.id, c.name) as created_by, - tmp.created_at, call_center.cc_get_lookup(u.id, u.name) as updated_by, tmp.updated_at, call_center.cc_get_lookup(arst.id, arst.name) as schema, - tmp.pattern, disabled + tmp.created_at, call_center.cc_get_lookup(u.id, u.name) as updated_by, tmp.updated_at, call_center.cc_get_lookup(arst.id, arst.name) as schema, + tmp.pattern, disabled, allow_transfer from tmp left join directory.wbt_user c on c.id = tmp.created_by left join directory.wbt_user u on u.id = tmp.updated_by inner join flow.acr_routing_scheme arst on tmp.scheme_id = arst.id`, map[string]interface{}{ - "Id": routing.Id, - "Domain": routing.DomainId, - "Name": routing.Name, - "Description": routing.Description, - "UpdatedAt": routing.UpdatedAt, - "UpdatedBy": routing.UpdatedBy.GetSafeId(), - "SchemeId": routing.Schema.Id, - "Pattern": routing.Pattern, - "Disabled": routing.Disabled, + "Id": routing.Id, + "Domain": routing.DomainId, + "Name": routing.Name, + "Description": routing.Description, + "UpdatedAt": routing.UpdatedAt, + "UpdatedBy": routing.UpdatedBy.GetSafeId(), + "SchemeId": routing.Schema.Id, + "Pattern": routing.Pattern, + "Disabled": routing.Disabled, + "AllowTransfer": routing.AllowTransfer, }) if err != nil { diff --git a/wsapi/call.go b/wsapi/call.go index d4964088..fbbbfc8c 100644 --- a/wsapi/call.go +++ b/wsapi/call.go @@ -24,6 +24,7 @@ func (api *API) InitCall() { api.Router.Handle("call_mute", api.ApiWebSocketHandler(api.callMute)) api.Router.Handle("call_bt_queue", api.ApiWebSocketHandler(api.callBTQueue)) + api.Router.Handle("call_bt_dialplan", api.ApiWebSocketHandler(api.callBTDialplan)) api.Router.Handle("call_to_queue", api.ApiWebSocketHandler(api.callToQueue)) api.Router.Handle("call_blind_transfer", api.ApiWebSocketHandler(api.callBlindTransfer)) @@ -203,6 +204,34 @@ func (api *API) callBTQueue(ctx context.Context, conn *app.WebConn, req *model.W return nil, nil } +func (api *API) callBTDialplan(ctx context.Context, conn *app.WebConn, req *model.WebSocketRequest) (map[string]interface{}, model.AppError) { + var ok bool + var id string + var schemaId float64 + + if id, ok = req.Data["id"].(string); !ok { + return nil, NewInvalidWebSocketParamError(req.Action, "id") + } + + if schemaId, ok = req.Data["schema_id"].(float64); !ok { + return nil, NewInvalidWebSocketParamError(req.Action, "schema_id") + } + + err := api.ctrl.BlindTransferCallToDialplan(ctx, conn.GetSession(), conn.DomainId, &model.BlindTransferCallToDialplan{ + UserCallRequest: model.UserCallRequest{ + Id: id, + }, + Variables: variablesFromMap(req.Data, "variables"), + SchemaId: int(schemaId), + }) + + if err != nil { + return nil, err + } + + return nil, nil +} + func (api *API) callToQueue(ctx context.Context, conn *app.WebConn, req *model.WebSocketRequest) (map[string]interface{}, model.AppError) { var cp model.CallParameters var queueId *int