public async Task <demoResult> CallToNumber([FromBody] CallToNumberDto model)
        {
            if (model.Extension == default)
            {
                _logger.Warning("External number not set");
                return(BadRequest(ErrorCodes.ValidationError));
            }

            var result = await _callManagementService.CallToNumber(GetUserId(), model);

            if (result.IsFailure)
            {
                _logger.Warning($"Ошибка при звонке на внешний номер. {result.ErrorMessage}");
                return(BadRequest(result.ErrorCode));
            }

            if (result.Value == CallBackToApplicantStatus.AlreadyInCall)
            {
                _logger.Warning("Ошибка при звонке на внешний номер. Вызываемый участник уже участвует в разговоре.");
                return(BadRequest(ErrorCodes.CallBackToApplicantAlreadyInCall));
            }

            return(Ok());
        }
        /// <summary>
        /// Позвонить на указанный номер.
        /// </summary>
        public async Task <Result <CallBackToApplicantStatus> > CallToNumber(Guid userId, CallToNumberDto model)
        {
            using (_unitOfWork.Begin())
            {
                Result <UserClientDto> userResult = await _userManagementServiceClient.GetUserById(userId);

                if (userResult.IsFailure)
                {
                    _logger.Warning($"CallToNumber. Error get user by Id. {userResult.ErrorMessage}");
                    return(Result.Failure(ErrorCodes.UserNotFound));
                }

                var user             = _mapper.Map <UserDto>(userResult.Value);
                var contactDtoResult = await _contactManagementClient.GetContactByNumber(model.Extension);

                Participant participant;
                if (contactDtoResult.IsFailure)
                {
                    _logger.Warning($"CallToNumber. Error getting contact. {contactDtoResult.ErrorMessage}");
                    participant = new Applicant(model.Extension);
                }
                else
                {
                    var contactDto = contactDtoResult.Value;
                    var routeName  = contactDto.Phones?.FirstOrDefault(x => x.Number == model.Extension)?.ContactRouteName;
                    participant = new Contact(model.Extension, contactDto.Name, contactDto.Organization, contactDto.Position, routeName);
                }

                await _participantRepository.Add(participant);

                var clientModel = new CallToNumberClientDto
                {
                    ParticipantId        = participant.Id,
                    UserExtension        = user.Extension,
                    ParticipantExtension = model.Extension
                };

                var result = await _callManagementServiceClient.CallToNumber(clientModel);

                if (result.IsFailure)
                {
                    _logger.Warning($"CallToNumber. {result.ErrorMessage}");
                    return(Result.Failure <CallBackToApplicantStatus>(ErrorCodes.UnableToCallToNumber));
                }

                await _unitOfWork.CommitAsync();

                await _phoneHubMessageService.NotifyUserAboutStartedExternalCall(userId, result.Value.LineId);

                return(Result.Success(CallBackToApplicantStatus.Ok));
            }
        }