diff --git a/internal/rpc/rtc/signal.go b/internal/rpc/rtc/signal.go index b20e02d36..393f1f2bc 100644 --- a/internal/rpc/rtc/signal.go +++ b/internal/rpc/rtc/signal.go @@ -108,6 +108,19 @@ func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq, } } + // 从主叫用户资料获取铃声 URL,注入到邀请信息中,被叫方收到后播放主叫方铃声 + if inviterInfo, err := s.userClient.GetUserInfo(ctx, req.UserID); err == nil && inviterInfo.CallRingtoneURL != "" { + inv.CallerRingtoneURL = inviterInfo.CallRingtoneURL + } + + // 查询被叫方铃声 URL,供主叫方在等待时播放 + var calleeRingtoneURL string + if len(inv.InviteeUserIDList) > 0 { + if inviteeInfo, err := s.userClient.GetUserInfo(ctx, inv.InviteeUserIDList[0]); err == nil { + calleeRingtoneURL = inviteeInfo.CallRingtoneURL + } + } + if _, err := s.roomClient.CreateRoom(ctx, &livekit.CreateRoomRequest{Name: inv.RoomID}); err != nil { log.ZError(ctx, "handleInvite", err, "r", err.Error()) return nil, errs.WrapMsg(err, "LiveKit CreateRoom failed", "roomID", inv.RoomID) @@ -147,9 +160,10 @@ func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq, log.ZDebug(ctx, "handleInvite", "token", token, "roomID", inv.RoomID, "liveURL", s.config.RpcConfig.LiveKit.ExternalAddress) return &rtc.SignalInviteResp{ - Token: token, - RoomID: inv.RoomID, - LiveURL: s.config.RpcConfig.LiveKit.ExternalAddress, + Token: token, + RoomID: inv.RoomID, + LiveURL: s.config.RpcConfig.LiveKit.ExternalAddress, + CalleeRingtoneURL: calleeRingtoneURL, }, nil } @@ -164,6 +178,19 @@ func (s *rtcServer) handleInviteInGroup(ctx context.Context, req *rtc.SignalInvi inv.InviterUserID = req.UserID inv.InitiateTime = time.Now().UnixMilli() + // 从主叫用户资料获取铃声 URL,注入到邀请信息中,被叫方收到后播放主叫方铃声 + if inviterInfo, err := s.userClient.GetUserInfo(ctx, req.UserID); err == nil && inviterInfo.CallRingtoneURL != "" { + inv.CallerRingtoneURL = inviterInfo.CallRingtoneURL + } + + // 查询第一位被叫的铃声 URL,供主叫方在等待时播放 + var calleeRingtoneURL string + if len(inv.InviteeUserIDList) > 0 { + if inviteeInfo, err := s.userClient.GetUserInfo(ctx, inv.InviteeUserIDList[0]); err == nil { + calleeRingtoneURL = inviteeInfo.CallRingtoneURL + } + } + if _, err := s.roomClient.CreateRoom(ctx, &livekit.CreateRoomRequest{Name: inv.RoomID}); err != nil { return nil, errs.WrapMsg(err, "LiveKit CreateRoom failed", "roomID", inv.RoomID) } @@ -206,9 +233,10 @@ func (s *rtcServer) handleInviteInGroup(ctx context.Context, req *rtc.SignalInvi } return &rtc.SignalInviteInGroupResp{ - Token: token, - RoomID: inv.RoomID, - LiveURL: s.config.RpcConfig.LiveKit.ExternalAddress, + Token: token, + RoomID: inv.RoomID, + LiveURL: s.config.RpcConfig.LiveKit.ExternalAddress, + CalleeRingtoneURL: calleeRingtoneURL, }, nil } diff --git a/pkg/common/convert/user.go b/pkg/common/convert/user.go index 8305f56c8..b49c7b7c5 100644 --- a/pkg/common/convert/user.go +++ b/pkg/common/convert/user.go @@ -49,6 +49,7 @@ func UserDB2Pb(user *relationtb.User) *sdkws.UserInfo { PhoneVisibility: user.PhoneVisibility, CallAcceptSetting: user.CallAcceptSetting, MsgReceiveSetting: user.MsgReceiveSetting, + CallRingtoneURL: user.CallRingtoneURL, } } @@ -59,16 +60,17 @@ func UsersDB2Pb(users []*relationtb.User) []*sdkws.UserInfo { func UserPb2DB(user *sdkws.UserInfo) *relationtb.User { fullName := BuildFullName(user.FirstName, user.LastName) return &relationtb.User{ - UserID: user.UserID, - Nickname: user.Nickname, - FaceURL: user.FaceURL, - Ex: user.Ex, - CreateTime: time.UnixMilli(user.CreateTime), - AppMangerLevel: user.AppMangerLevel, + UserID: user.UserID, + Nickname: user.Nickname, + FaceURL: user.FaceURL, + Ex: user.Ex, + CreateTime: time.UnixMilli(user.CreateTime), + AppMangerLevel: user.AppMangerLevel, GlobalRecvMsgOpt: user.GlobalRecvMsgOpt, - FirstName: user.FirstName, - LastName: user.LastName, - FullName: fullName, + FirstName: user.FirstName, + LastName: user.LastName, + FullName: fullName, + CallRingtoneURL: user.CallRingtoneURL, } } @@ -85,6 +87,7 @@ func UserPb2DBMap(user *sdkws.UserInfo) map[string]any { "last_name": user.LastName, "app_manager_level": user.AppMangerLevel, "global_recv_msg_opt": user.GlobalRecvMsgOpt, + "call_ringtone_url": user.CallRingtoneURL, } for key, value := range fields { if v, ok := value.(string); ok && v != "" { @@ -147,5 +150,8 @@ func UserPb2DBMapEx(user *sdkws.UserInfoWithEx) map[string]any { if user.MsgReceiveSetting != nil { val["msg_receive_setting"] = user.MsgReceiveSetting.Value } + if user.CallRingtoneURL != nil { + val["call_ringtone_url"] = user.CallRingtoneURL.Value + } return val } diff --git a/pkg/common/storage/model/user.go b/pkg/common/storage/model/user.go index 8c2e18167..fa6786947 100644 --- a/pkg/common/storage/model/user.go +++ b/pkg/common/storage/model/user.go @@ -57,6 +57,8 @@ type User struct { PhoneVisibility int32 `bson:"phone_visibility"` CallAcceptSetting int32 `bson:"call_accept_setting"` MsgReceiveSetting int32 `bson:"msg_receive_setting"` + // CallRingtoneURL 用户自定义来电铃声 URL;对方来电时播放此铃声 + CallRingtoneURL string `bson:"call_ringtone_url"` } func (u *User) GetNickname() string { diff --git a/protocol b/protocol index 0db6a7324..8bdb641d1 160000 --- a/protocol +++ b/protocol @@ -1 +1 @@ -Subproject commit 0db6a732426df40792921f861112e32785405e8d +Subproject commit 8bdb641d1356efc61620c0d37647a86f5dc94973