protected async Task <Contact> FindOrCreateContact(SignUpDTO model)
        {
            // Check available contact
            var foundContact = await new FindContactActions(crm, currentLogger)
                               .LookForContact(model.Contact.Phone, model.Contact.Email, null);

            var contact = foundContact != null?foundContact.Adapt <Contact>(mapper) : new Contact();

            // Create contact
            if (foundContact == null)
            {
                var buildContact = new Common.BusinessLogicHelpers.Crm.Builders.ContactBuilder();
                buildContact.Name(model.Contact.Name)
                .Phone(model.Contact.Phone)
                .Email(model.Contact.Email)
                .City(model.Contact.City);
                contact = (Contact)buildContact;

                var contactDTO = contact.Adapt <ContactDTO>(mapper);

                try
                {
                    currentLogger.LogInformation("Подготовлен контакт для добавления - {@Contact}", contact);

                    var query = await crm.Contacts.Add(contactDTO);

                    contact = query.Adapt <Contact>(mapper);

                    currentLogger.LogInformation("Создан контакт {Name} | {Id}", contactDTO.Name, contact.Id);
                }
                catch (Exception ex)
                {
                    currentLogger.LogWarning(ex, "Ошибка создания контакта с сайта");
                    throw new Exception();
                }
            }

            return(contact);
        }
        public async Task <bool> CreateRecallTask(CallBackDTO model)
        {
            Contact contact;

            try
            {
                // Check available contact
                var action = new FindContactActions(crm, logger);
                var result = await action.LookForContact(phone : model.UserPhone);

                contact = result?.Adapt <Contact>(mapper);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Ошибка при поиске контакта в Crm");
                return(false);
            }

            // Create contact
            if (contact == null)
            {
                var buildContact = new Common.BusinessLogicHelpers.Crm.Builders.ContactBuilder();
                buildContact.Name(model.UserName);
                buildContact.Phone(model.UserPhone);
                contact = (Contact)buildContact;

                contact.ResponsibleUserId = GetManager(model);

                var contactDTO = contact.Adapt <ContactDTO>(mapper);

                try
                {
                    System.Threading.Tasks.Task taskPrepareContactLog = System.Threading.Tasks.Task.Factory.StartNew(
                        () => logger.LogInformation("Подготовлен контакт для добавления - {@Contact}", contact)
                        );

                    var query = crm.Contacts.Add(contactDTO).Result;
                    contact = query.Adapt <Contact>(mapper);

                    System.Threading.Tasks.Task taskreateContactLog = System.Threading.Tasks.Task.Factory.StartNew(
                        () => logger.LogInformation("Создан контакт {Name} | {Id}", contactDTO.Name, contact.Id)
                        );
                }
                catch (Exception ex)
                {
                    logger.LogWarning(ex, "Ошибка создания контакта с сайта");
                    return(false);
                }
            }

            if (contact != null)
            {
                var manager = GetManager(model);

                var modelTask = new TaskDTO()
                {
                    ElementId   = contact.Id,
                    ElementType = (int)ElementTypeEnum.Контакт,
                    Text        = "Клиент заказал обратный звонок!" + "\r\n"
                                  + "Со страницы мероприятия- " + model.ProgramTitle + "\r\n" +
                                  "URL.: " + model.Url,
                    ResponsibleUserId = manager,
                    CompleteTillAt    = DateTime.Now
                };

                logger.LogInformation("Подготовлена задача - {Task}", modelTask);

                try
                {
                    var tsk = crm.Tasks.Add(new[] { modelTask }).Result;
                }
                catch (Exception ex)
                {
                    logger.LogWarning(ex, "Ошибка создания задачи для контакта - " + contact.Id);
                    return(false);
                }
            }

            return(true);
        }