Пример #1
0
        /// <summary>
        /// Добавление запроса пользователя
        /// </summary>
        /// <param name="botUser"></param>
        /// <param name="type"></param>
        /// <param name="answer"></param>
        /// <param name="query"></param>
        /// <param name="TimeToStartAnswer"></param>
        /// <param name="buRequest"></param>
        public void AddBotQuery(BotUser botUser, FindedInformation answer, DateTime TimeToStartAnswer, BotUserRequest buRequest)
        {
            try
            {
                buRequest.BotUserID = botUser.BotUserID;
                buRequest.NowIs     = (MallBotWhatIsHappeningNow)botUser.NowIs;
                if (answer != null && answer.Result != null)
                {
                    buRequest.Answer = JsonConvert.SerializeObject(answer.Result);
                }
                var TimeToAnswer = DateTime.Now.Subtract(TimeToStartAnswer);
                buRequest.TimeToAnswer        = TimeToAnswer.Days.ToString() + ":" + TimeToAnswer.Hours.ToString() + ":" + TimeToAnswer.Minutes.ToString() + ":" + TimeToAnswer.Seconds.ToString() + ":" + TimeToAnswer.Milliseconds.ToString();
                buRequest.DateTime            = DateTime.Now;
                buRequest.BotUserID           = botUser.BotUserID;
                buRequest.CustomerCompositeID = botUser.CustomerCompositeID;
                buRequest.Name = botUser.Name;

                botUser.LastActivityDate = DateTime.Now;

                BotUserRequest.Add(buRequest);
                SaveChanges();
            }
            catch (Exception exc)
            {
                Logging.Logger.Error(exc);
            }
        }
Пример #2
0
        public MainAnswerHelper(BotUserRequest _thisRequest, object _Bot, SocialNetworkType _type, BotUser _botUser, List <MallBotContext> _dbContextes, List <VKApiRequestModel> _Requests = null)
        {
            botUser     = _botUser;
            dbContextes = _dbContextes;
            Requests    = _Requests;
            Bot         = _Bot;
            type        = _type;
            thisRequest = _thisRequest;

            #region Кэшируем
            string CachedItemKey = "MallBotData";
            var    datafromCache = cacher.Get(CachedItemKey);
            if (datafromCache == null)
            {
                datasOfBot = cacher.Update(CachedItemKey, dbContextes);
            }
            else
            {
                datasOfBot = (List <CachedDataModel>)datafromCache;
            }
            #endregion

            texter     = new BotTextHelper(botUser.Locale, type, datasOfBot[0].Texts);
            sender     = new ApiRouter(type, Bot, botUser, Requests);
            dataGetter = new GetDataHelper(datasOfBot);

            if (botUser.NowIs != MallBotWhatIsHappeningNow.SettingCustomer)
            {
                char usersdbID  = botUser.CustomerCompositeID[0];
                var  customerID = int.Parse(botUser.CustomerCompositeID.Remove(0, 1));
                currentCustomer = dataGetter.GetStructuredCustomers(true).FirstOrDefault(x => x.DBaseID == usersdbID).Customers.FirstOrDefault(x => x.CustomerID == customerID); //дает возможность работы в тц не из тестового режима
            }
        }
Пример #3
0
        public Result Convert(BotUserResult input)
        {
            BotUserRequest userRequest = _userRequestService.GetRequestById(input.requestId);
            Result         output      = new Result(Convert(userRequest), input.rawOutput, new TimeSpan(0, 0, 0, 0, input.Duration),
                                                    input.hasTimedOut);

            return(output);
        }
Пример #4
0
        /// <summary>
        /// Добавление запроса
        /// </summary>
        /// <param name="btrequest"></param>
        /// <param name="TimeToStartAnswer"></param>
        public void AddBotRequest(BotUserRequest btrequest, DateTime TimeToStartAnswer)
        {
            var TimeToAnswer = DateTime.Now.Subtract(TimeToStartAnswer);

            btrequest.TimeToAnswer = TimeToAnswer.Seconds.ToString() + ":" + TimeToAnswer.Milliseconds.ToString();

            BotUserRequest.Add(btrequest);
            SaveChanges();
        }
Пример #5
0
        /// <summary>
        /// Добавление запроса
        /// </summary>
        /// <param name="btrequest"></param>
        /// <param name="TimeToStartAnswer"></param>
        public void AddBotRequest(Models.BotUserRequest btrequest, BotUser botUser, DateTime TimeToStartAnswer)
        {
            var TimeToAnswer = DateTime.Now.Subtract(TimeToStartAnswer);

            btrequest.TimeToAnswer   = TimeToAnswer.Seconds.ToString() + ":" + TimeToAnswer.Milliseconds.ToString();
            btrequest.DateTime       = DateTime.Now;
            btrequest.BotUserID      = botUser.BotUserID;
            btrequest.NowIs          = (MallBotWhatIsHappeningNow)botUser.NowIs;
            botUser.LastActivityDate = DateTime.Now;
            BotUserRequest.Add(btrequest);
            SaveChanges();
        }
Пример #6
0
        public Request Convert(BotUserRequest input)
        {
            Request output = new Request()
            {
                UserId      = input.userId,
                HasTimedOut = false,
                RawInput    = input.rawInput,
                StartedOn   = input.startedOn,
                Id          = input.id
            };

            return(output);
        }
Пример #7
0
        public int Add(string rawInput, int userId)
        {
            BotUserRequest request = new BotUserRequest()
            {
                rawInput  = rawInput,
                userId    = userId,
                startedOn = DateTimeOffset.UtcNow
            };
            UnitOfWork uow = new UnitOfWork();

            uow.BotUserRequestRepository.Insert(request);
            uow.Save();
            return(request.id);
        }
Пример #8
0
        public MainAnswerHelper(DBHelpers.Models.MFCModels.BotUser _botUser, MFCBotContext _context, BotUserRequest _thisRequest, List <VKApiRequestModel> _requests)
        {
            context     = _context;
            botUser     = _botUser;
            thisRequest = _thisRequest;
            requests    = _requests;

            string key           = "MFCDATAOFBOT";
            var    datafromCache = cacheHelper.Get(key);

            if (datafromCache == null)
            {
                mfcDataOfBot = cacheHelper.Update(key, context);
            }
            else
            {
                mfcDataOfBot = (MFCBotModel)datafromCache;
            }

            if (botUser.NowIs != MFCBotWhatIsHappeningNow.SettingOffice)
            {
                var usersOffice = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID);
                if (usersOffice.Name == "Ярмарка")
                {
                    usersOffice.OfficeID = 326;
                }
                //получаем все секции, которые относятся к выбранному филиалу
                mfcDataOfBot.Sections = mfcDataOfBot.AllSections.
                                        Where(x => mfcDataOfBot.SectionOffices.
                                              Where(z => z.OfficeID == usersOffice.OfficeID).
                                              Select(y => y.SectionID).Contains(x.SectionID)).DistinctBy(x => x.Name).ToList();
                //сохраняем из них только листья
                mfcDataOfBot.RetainLeafs();
            }

            sendHelper = new ApiRouter(SocialNetworkType.VK, null, botUser, requests);
            textHelper = new BotTextHelper(botUser.Locale, SocialNetworkType.VK, mfcDataOfBot.Texts);
        }
Пример #9
0
        public async Task <HttpResponseMessage> PostMessage(JObject Responce)
        {
            try
            {
                DateTime TimeToStartAnswer = DateTime.Now;

                FacebookResponce facebookeResponce = Responce.ToObject <FacebookResponce>();

                Logging.Logger.Debug($"Facebook PostMessage message={Responce}");

                if (facebookeResponce == null)
                {
                    Logging.Logger.Error("Facebook. Empty request!");
                    return(result);
                }

                if (facebookeResponce.Object != ObjectTypes.page)
                {
                    Logging.Logger.Error($"Facebook. It's not a message!");
                    return(result);
                }

                //long unixTimestamp = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                //if (unixTimestamp - facebookTimestamp > long.Parse(ConfigurationManager.AppSettings["TimeToNotice"]))
                //{
                //    Logging.Logger.Debug($"Faceboooook  !!!!  An old message occurred {unixTimestamp}  sub = {unixTimestamp - facebookTimestamp}");
                //    return result;
                //}



                // создание объекта - Бота
                var FacebookBot = new FacebookApiHelper(_token);
                // создание объекта для логирования запроса
                var thisRequest = new BotUserRequest();

                // подключаем главную базу
                var dbContextes = new List <MallBotContext>();
                dbContextes.Add(new MallBotContext($"A{ConfigurationManager.AppSettings["dbTest"]}"));
                // Находим пользователя
                var botUsers = dbContextes[0].BotUser.ToList();
                var stringID = facebookeResponce.entry[0].messaging[0].sender.Id.ToString();
                var botUser  = botUsers.FirstOrDefault(x => x.BotUserFacebookID == stringID);

                if (botUser == null)
                {
                    dbContextes[0]    = dbContextes[0].AddBotUser(SocialNetworkType.Facebook, FacebookBot, stringID);
                    botUser           = dbContextes[0].BotUser.FirstOrDefault(x => x.BotUserFacebookID == stringID);
                    botUser.IsNewUser = true;
                }
                else
                {
                    if (botUser.NowIs == MallBotWhatIsHappeningNow.SettingCustomer && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 240)
                    {
                        botUser.IsNewUser = true;
                    }
                    else
                    {
                        botUser.IsNewUser = false;
                    }
                    // если пользователь не завершил диалог с ботом и вернулся больше, чем через пол часа, то данные сбросятся к поиску организации. // кэш почистится в MainAnswerHelper
                    if ((botUser.NowIs == MallBotWhatIsHappeningNow.SearchingWay || botUser.NowIs == MallBotWhatIsHappeningNow.GettingAllOrganizations) && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 30)
                    {
                        botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization;
                    }
                }

                //проверка на актуальность сообщения
                long facebookTimestamp = (long)facebookeResponce.entry[0].messaging[0].timestamp / 1000;
                if (ConfigurationManager.AppSettings["IgnoreOldEvents"] == "Enabled" && !TimeHelper.IsNewEvent((int)facebookTimestamp, botUser.BotUserID))
                {
                    return(result);
                }

                // помечаем сообщение как прочитанное.
                thisRequest.IsSendingError = await FacebookBot.SendAction(facebookeResponce.entry[0].messaging[0].sender.Id, SenderActionType.typing_on);

                //проверяем, что сообщение не пусто
                var trimmedLoweredQuery = "";
                if (!string.IsNullOrWhiteSpace(facebookeResponce.entry[0].messaging[0].message?.text))
                {
                    trimmedLoweredQuery = facebookeResponce.entry[0].messaging[0].message.text.ToLower().Trim(AnalyseHelper.splitters);
                }
                else
                {
                    if (facebookeResponce.entry[0].messaging[0].postback != null)
                    {
                        trimmedLoweredQuery = facebookeResponce.entry[0].messaging[0].postback.payload;
                        facebookeResponce.entry[0].messaging[0].message = new FacebookMessage {
                            text = trimmedLoweredQuery
                        };
                    }
                }

                if (string.IsNullOrWhiteSpace(trimmedLoweredQuery) || (facebookeResponce.entry[0].messaging[0].message?.attachments != null && facebookeResponce.entry[0].messaging[0].message?.attachments[0].type != AttachmentType.location)) //что-то непонятное пришло
                {
                    var simpleAnaliser = new AnalyseHelper();
                    thisRequest.IsSendingError = await simpleAnaliser.AnalyseBadRequest(botUser, SocialNetworkType.Facebook, FacebookBot, dbContextes[0].BotText.ToList());

                    dbContextes[0].AddBotQuery(botUser, null, TimeToStartAnswer, thisRequest);
                    return(result);
                }

                var analyser = new MainAnswerHelper(thisRequest, FacebookBot, SocialNetworkType.Facebook, botUser, dbContextes);
                FindedInformation answer;
                // если была прислана геолокация, то ищем по ней. Иначе по тексту
                if (facebookeResponce.entry[0].messaging[0].message?.attachments != null && facebookeResponce.entry[0].messaging[0].message?.attachments[0].type == AttachmentType.location)
                {
                    botUser.InputDataType = InputDataType.GeoLocation;
                    botUser.NowIs         = MallBotWhatIsHappeningNow.SettingCustomer;

                    var temp = $"POINT({facebookeResponce.entry[0].messaging[0].message.attachments[0].payload.coordinates.Long} {facebookeResponce.entry[0].messaging[0].message.attachments[0].payload.coordinates.lat})";
                    temp             = temp.Replace(',', '.');
                    thisRequest.Text = temp;

                    answer = await analyser.Main(DbGeography.FromText(temp));
                }
                else
                {
                    botUser.InputDataType = InputDataType.Text;
                    thisRequest.Text      = facebookeResponce.entry[0].messaging[0].message.text;
                    answer = await analyser.Main(trimmedLoweredQuery);
                }

                //сохраняем полезные данные по юзеру
                botUser.LastActivityDate = DateTime.Now;
                dbContextes[0].SaveChanges();

                //пишем в базу запрос
                dbContextes[0].AddBotQuery(botUser, answer, TimeToStartAnswer, thisRequest);
                return(result);
            }
            catch (Exception ex)
            {
                Logging.Logger.Error(ex, "Facebook");
                return(result);
            }
        }
Пример #10
0
        public async Task <HttpResponseMessage> PostMessage(JObject jsonResponce)
        {
            try
            {
                DateTime TimeToStartAnswer = DateTime.Now;

                var telegramResponce = jsonResponce.ToObject <Update>();

                Logging.Logger.Debug($"Telegram PostMessage message={jsonResponce}");

                if (telegramResponce == null)
                {
                    Logging.Logger.Error("Telegram  Empty request");
                    return(result);
                }
                if (telegramResponce.Type == UpdateType.MessageUpdate)
                {
                    // создание объекта - Бота
                    var TelegramBot = new Telegram.Bot.TelegramBotClient(_token);
                    // создание объекта для логирования запроса
                    var thisRequest = new BotUserRequest();


                    // подключаем главную базу
                    var dbContextes = new List <MallBotContext>();
                    dbContextes.Add(new MallBotContext($"A{ConfigurationManager.AppSettings["dbTest"]}"));
                    // Находим пользователя
                    var botUsers = dbContextes[0].BotUser.ToList();
                    var stringID = telegramResponce.Message.Chat.Id.ToString();
                    var botUser  = botUsers.FirstOrDefault(x => x.BotUserTelegramID == stringID);

                    if (botUser == null)
                    {
                        dbContextes[0]    = dbContextes[0].AddBotUser(SocialNetworkType.Telegram, TelegramBot, stringID, telegramResponce.Message.From.FirstName, telegramResponce.Message.From.LastName);
                        botUser           = dbContextes[0].BotUser.FirstOrDefault(x => x.BotUserTelegramID == stringID);
                        botUser.IsNewUser = true;
                    }
                    else
                    {
                        if (botUser.NowIs == MallBotWhatIsHappeningNow.SettingCustomer && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 240)
                        {
                            botUser.IsNewUser = true;
                        }
                        else
                        {
                            botUser.IsNewUser = false;
                        }
                        // если пользователь не завершил диалог с ботом и вернулся больше, чем через пол часа, то данные сбросятся к поиску организации. // кэш почистится в MainAnswerHelper
                        if ((botUser.NowIs == MallBotWhatIsHappeningNow.SearchingWay || botUser.NowIs == MallBotWhatIsHappeningNow.GettingAllOrganizations) && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 30)
                        {
                            botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization;
                        }
                    }

                    //проверка на актуальность сообщения
                    long thisTimestamp = (int)(telegramResponce.Message.Date.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                    if (ConfigurationManager.AppSettings["IgnoreOldEvents"] == "Enabled" && !TimeHelper.IsNewEvent((int)thisTimestamp, botUser.BotUserID))
                    {
                        return(result);
                    }

                    thisRequest.IsSendingError = 0;
                    await TelegramBot.SendChatActionAsync(telegramResponce.Message.Chat.Id, ChatAction.Typing); // бот сделает вид что набирает сообщение

                    //проверяем, что сообщение не пусто
                    var trimmedLoweredQuery = "";
                    if (!string.IsNullOrWhiteSpace(telegramResponce.Message.Text))
                    {
                        trimmedLoweredQuery = telegramResponce.Message.Text.ToLower().Trim(AnalyseHelper.splitters);
                    }

                    if (telegramResponce.Message.Text == null && telegramResponce.Message.Location == null)
                    {
                        var simpleAnaliser = new AnalyseHelper();
                        thisRequest.IsSendingError = await simpleAnaliser.AnalyseBadRequest(botUser, SocialNetworkType.Telegram, TelegramBot, dbContextes[0].BotText.ToList());

                        dbContextes[0].AddBotQuery(botUser, null, TimeToStartAnswer, thisRequest);
                        return(result);
                    }

                    var analyser = new MainAnswerHelper(thisRequest, TelegramBot, SocialNetworkType.Telegram, botUser, dbContextes);
                    FindedInformation answer;
                    // если была прислана геолокация, то ищем по ней. Иначе по тексту
                    if (telegramResponce.Message.Location != null)
                    {
                        botUser.InputDataType = InputDataType.GeoLocation;
                        botUser.NowIs         = MallBotWhatIsHappeningNow.SettingCustomer;
                        var temp = $"POINT({telegramResponce.Message.Location.Longitude} {telegramResponce.Message.Location.Latitude})";
                        temp             = temp.Replace(',', '.');
                        thisRequest.Text = temp;

                        answer = await analyser.Main(DbGeography.FromText(temp));
                    }
                    else
                    {
                        botUser.InputDataType = InputDataType.Text;
                        thisRequest.Text      = telegramResponce.Message.Text;
                        answer = await analyser.Main(trimmedLoweredQuery);
                    }

                    //сохраняем полезные данные по юзеру
                    botUser.LastActivityDate = DateTime.Now;
                    dbContextes[0].SaveChanges();

                    //пишем в базу запрос
                    dbContextes[0].AddBotQuery(botUser, answer, TimeToStartAnswer, thisRequest);
                    return(result);
                }
                return(result);
            }
            catch (Exception ex)
            {
                Logging.Logger.Error(ex, "Telegram");
                return(result);
            }
        }
Пример #11
0
        public async Task <HttpResponseMessage> PostMessage(JObject jsonResponce)
        {
            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("ok"),
            };

            try
            {
                DateTime TimeToStartAnswer = DateTime.Now;

                var vkResponce = jsonResponce.ToObject <VKResponce>();

                Logging.Logger.Debug($"VK PostMessage message={jsonResponce}");

                if (vkResponce == null)
                {
                    Logging.Logger.Error("VK Empry request");
                    return(result);
                }
                if (vkResponce.GroupId != 120366480 && vkResponce.GroupId != 127789119)
                {
                    Logging.Logger.Error($"VK group with ID   {vkResponce.GroupId}  is not supporting by MOLOKO");
                    result.Content =
                        new StringContent($"VK group with ID   {vkResponce.GroupId}  is not supporting by MOLOKO");
                    return(result);
                }

                if (vkResponce.Type == "confirmation")
                {
                    if (vkResponce.GroupId == 120366480)
                    {
                        return(new HttpResponseMessage
                        {
                            Content = new StringContent("da3aa7a7"),
                        });
                    }
                    if (vkResponce.GroupId == 127789119)
                    {
                        return(new HttpResponseMessage
                        {
                            Content = new StringContent("38ffe9fe"),
                        });
                    }
                }

                if (vkResponce.Type == "message_new")
                {
                    var vkMessage = jsonResponce["object"].ToObject <VKMessage>();

                    // создание объекта - Бота
                    VK vk = null;
                    if (vkResponce.GroupId == 120366480)
                    {
                        var token = "af48a9fdfdb50e827c09799047c71bcb1ac8ef0f874000d1e2ba30e416735e535badacec4f0f48af3fed4";
                        vk = new VK(token);
                    }
                    else
                    {
                        var token = "157c278b4e80a8bcade8eab4f4c0a99e2d6bc3f6fb9f0736763e8600e3682e3a0471f126a34a52e37534e";
                        vk = new VK(token);
                    }

                    // создание объекта для логирования запроса
                    var thisRequest = new BotUserRequest();
                    thisRequest.IsSendingError = 0;
                    // помечаем сообщение как прочитанное.
                    thisRequest.IsSendingError = AsyncHelper.RunSync(() => vk.markAsRead(vkMessage.Id));// сообщение помечено как прочитанное
                    // подключаем главную базу
                    var dbContextes = new List <MallBotContext>();
                    dbContextes.Add(new MallBotContext($"A{ConfigurationManager.AppSettings["dbTest"]}"));
                    // Находим пользователя
                    var botUsers = dbContextes[0].BotUser.ToList();
                    var botUser  = botUsers.FirstOrDefault(x => x.BotUserVKID == vkMessage.UserId.ToString());

                    if (botUser == null)
                    {
                        var temp = vkMessage.UserId.ToString();
                        dbContextes[0]    = dbContextes[0].AddBotUser(SocialNetworkType.VK, vk, temp);
                        botUser           = dbContextes[0].BotUser.FirstOrDefault(x => x.BotUserVKID == temp);
                        botUser.IsNewUser = true;
                    }
                    else
                    {
                        if (botUser.NowIs == MallBotWhatIsHappeningNow.SettingCustomer && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 240)
                        {
                            botUser.IsNewUser = true;
                        }
                        else
                        {
                            botUser.IsNewUser = false;
                        }
                        // если пользователь не завершил диалог с ботом и вернулся больше, чем через пол часа, то данные сбросятся к поиску организации. // кэш почистится в MainAnswerHelper
                        if ((botUser.NowIs == MallBotWhatIsHappeningNow.SearchingWay || botUser.NowIs == MallBotWhatIsHappeningNow.GettingAllOrganizations) && TimeHelper.GetMinutes((DateTime)botUser.LastActivityDate) > 30)
                        {
                            botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization;
                        }
                    }

                    //проверка на актуальность сообщения
                    if (ConfigurationManager.AppSettings["IgnoreOldEvents"] == "Enabled" && !TimeHelper.IsNewEvent(vkMessage.Date, botUser.BotUserID))
                    {
                        return(result);
                    }

                    // сборщик запросов к апи
                    var Requests = new List <VKApiRequestModel>();
                    //проверяем, что сообщение не пусто
                    var trimmedLoweredQuery = vkMessage.Body.ToLower().Trim(AnalyseHelper.splitters);
                    if (string.IsNullOrWhiteSpace(trimmedLoweredQuery) && vkMessage.geo == null)
                    {
                        var simpleAnaliser = new AnalyseHelper();
                        thisRequest.IsSendingError = await simpleAnaliser.AnalyseBadRequest(botUser, SocialNetworkType.VK, vk, dbContextes[0].BotText.ToList(), Requests);

                        // отправка данных во вконтаке
                        thisRequest.IsSendingError = AsyncHelper.RunSync(() => vk.SendAllRequests(Requests));
                        dbContextes[0].AddBotQuery(botUser, null, TimeToStartAnswer, thisRequest);
                        return(result);
                    }


                    var analyser = new MainAnswerHelper(thisRequest, vk, SocialNetworkType.VK, botUser, dbContextes, Requests);
                    FindedInformation answer;
                    // если была прислана геолокация, то ищем по ней. Иначе по тексту
                    if (vkMessage.geo != null)
                    {
                        botUser.InputDataType = InputDataType.GeoLocation;
                        botUser.NowIs         = MallBotWhatIsHappeningNow.SettingCustomer;
                        thisRequest.Text      = vkMessage.geo.coordinates;

                        var geo  = vkMessage.geo.coordinates.Split(' ');
                        var temp = $"POINT({geo[1]} {geo[0]})";
                        temp   = temp.Replace(',', '.');
                        answer = await analyser.Main(DbGeography.FromText(temp));
                    }
                    else
                    {
                        botUser.InputDataType = InputDataType.Text;
                        thisRequest.Text      = vkMessage.Body;
                        answer = await analyser.Main(trimmedLoweredQuery);
                    }

                    // отправка данных во вконтаке
                    thisRequest.IsSendingError = AsyncHelper.RunSync(() => vk.SendAllRequests(Requests));

                    //сохраняем полезные данные по юзеру
                    botUser.LastActivityDate = DateTime.Now;
                    dbContextes[0].SaveChanges();

                    //пишем в базу запрос
                    dbContextes[0].AddBotQuery(botUser, answer, TimeToStartAnswer, thisRequest);
                    return(result);
                }
                if (vkResponce.Type == "group_join")
                {
                    return(result);
                }
                return(result);
            }
            catch (Exception ex)
            {
                Logging.Logger.Error(ex, "VK");
                return(result);
            }
        }