Esempio n. 1
0
 void PollVisitorMessage(VisitorMessageChat visitorMessage)
 {
     if (ChatServices.VisitorMessageChats.Any(v => v.VisitorMessageId == visitorMessage.VisitorMessageId))
     {
         ChatServices.PollVisitorMessageEvents(visitorMessage);
     }
 }
Esempio n. 2
0
        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;
        }