void PollVisitorMessage(VisitorMessageChat visitorMessage) { if (ChatServices.VisitorMessageChats.Any(v => v.VisitorMessageId == visitorMessage.VisitorMessageId)) { ChatServices.PollVisitorMessageEvents(visitorMessage); } }
void ProcessVisitorMessages() { try { if (_processingVisitorMessages) { return; } _processingVisitorMessages = true; var useCallback = ChatController.UseCallbackForVMs(); var useWorkgroupFromProfile = ChatController.UseProfileWorkgroupForVMs(); var vmWorkgroup = ChatController.GetDefaultWorkgroupForVisitorMessages(); var repository = new Repository(); var targetWorkgroup = repository.Workgroups.FirstOrDefault(w => w.DisplayName.ToLower() == vmWorkgroup); if (repository.VisitorMessages.Any(v => !v.IsProcessed) && (targetWorkgroup != null || useWorkgroupFromProfile)) { //LoggingService.GetInstance().LogToFile("Visitor Messages Found", ChatServices.FolderNameSafeDate(), true); var visitorMessages = repository.VisitorMessages.Where(v => !v.IsProcessed).ToList(); var chatAttributes = new Dictionary <string, string>(); var chatSkills = new Collection <RoutingContext>(); foreach (var visitorMessage in visitorMessages) { if (!useCallback) { if (!ChatServices.VisitorMessageChats.Any(i => i.VisitorMessageId == visitorMessage.VisitorMessageId)) { var chatRequest = new ChatRequest { SupportedContentTypes = "text/plain", Participant = new Participant { Name = "visitormessage", Credentials = "" }, TranscriptRequired = false, EmailAddress = "*****@*****.**", Target = useWorkgroupFromProfile ? visitorMessage.Workgroup : targetWorkgroup.DisplayName, TargetType = "Workgroup", Language = "en-us", CustomInfo = "", Attributes = chatAttributes, RoutingContexts = chatSkills }; var chatResponse = ChatServices.StartChat(chatRequest); if (chatResponse != null && chatResponse.Status.Type == "success") { var vm = new VisitorMessageChat { VisitorMessageId = visitorMessage.VisitorMessageId, Message = visitorMessage.Message, ParticipantId = chatResponse.ParticipantID, State = VisitorMessageState.Connected }; ChatServices.VisitorMessageChats.Add(vm); } } } else { var callbackAttributes = new Dictionary <string, string>(); if (!String.IsNullOrWhiteSpace(visitorMessage.AttributeNames)) { var attrNames = visitorMessage.AttributeNames.Split('|'); var attrValues = visitorMessage.AttributeValues.Split('|'); if (attrNames.Length == attrValues.Length) { for (int i = 0; i < attrNames.Length; i++) { var name = attrNames[i]; var val = attrValues[i]; callbackAttributes.Add(name, val); } } } var callbackSkills = new Collection <CallbackRoutingContext>(); if (!String.IsNullOrWhiteSpace(visitorMessage.Skills)) { var skills = visitorMessage.Skills.Split(','); foreach (var skill in skills) { callbackSkills.Add(new CallbackRoutingContext { Category = "Product", Context = skill }); } } var subject = visitorMessage.Message.Length > 2000 ? visitorMessage.Message.Substring(0, 1999) : visitorMessage.Message; var callbackRequest = new CallbackRequest() { Participant = new CallbackParticipant { Name = "visitormessage", Credentials = "", Telephone = visitorMessage.PhoneNumber }, Target = useWorkgroupFromProfile ? visitorMessage.Workgroup : targetWorkgroup.DisplayName, TargetType = "Workgroup", Language = "en-us", CustomInfo = visitorMessage.CustomInfo, Subject = subject, Attributes = callbackAttributes, RoutingContexts = callbackSkills }; var callbackResponse = ChatServices.CreateCallback(callbackRequest); if (callbackResponse != null && callbackResponse.Status.Type == "success") { visitorMessage.IsProcessed = true; visitorMessage.Type = VisitorMessageType.Callback; repository.SaveChanges(); } } } } } catch (Exception e) { LoggingService.GetInstance().LogException(e); } _processingVisitorMessages = false; }