Example #1
0
        public async Task SendTypingState(LivechatMessagePack message)
        {
            var currentSession = await CurrentUserDetails();

            await Clients
            .OthersInGroup(message.ChannelId)
            .SendAsync(HubMessages.TYPING_START, message);

            return;
        }
Example #2
0
        public async Task SendGroupMessage(LivechatMessagePack messagePack)
        {
            if (messagePack.FromConnectionId == null)
            {
                messagePack.FromConnectionId = hubContext.ConnectionId;
            }

            if (messagePack.IsPersistent)
            {
                await messageLogger.CreateLog(messagePack);
            }

            await clientsManager
            .Group(messagePack.ChannelId)
            .SendAsync(HubMessages.SEND, messagePack);
        }
Example #3
0
        /// <summary>
        /// It should be call when a user ends a chat
        /// </summary>
        /// <param name="channelId">Channel to be closed</param>
        /// <param name="message">Message to be pushed</param>
        /// <returns>Async obj</returns>
        public async Task CustomerEndChat(string channelId, LivechatMessagePack message)
        {
            var userDetails = await CurrentUserDetails();

            if (userDetails.Role != NopRoles.LIVECHAT_USER)
            {
                return;
            }

            var user = userDetails
                       .Channels
                       .Any(t => t.Id == channelId);

            if (!user)
            {
                Context.Connection.Abort();
                return;
            }

            message.LivechatUserId = userDetails.LivechatUserId;

            // Send a push like message to others in group
            var package = new Dictionary <string, string>
            {
                { "body", message.Message },
                { "title", message.FromName },
                { "icon", "/static/img/launcher-icon-4x.png" },
                { "priority", "high" },
                { "channelId", message.ChannelId },
                { "sound", "default" }
            };

            if (userDetails.Role != "LivechatAgent")
            {
                await Clients
                .OthersInGroup(message.ChannelId)
                .SendAsync(HubMessages.END_CHAT_MESSAGE, package);
            }

            var chatConversationHandler = CreateHumanAgentConversation();
            await chatConversationHandler.EndChat(channelId);

            await CurrentUser.SendAsync(HubMessages.FORWARD_URL, "https://mautic.moveleiros.com.br/form/20");
        }
Example #4
0
        /// <summary>
        /// It handles group message coming from clients
        /// </summary>
        /// <param name="message">Pack with message to be sent</param>
        /// <returns></returns>
        public async Task SendGroupMessage(LivechatMessagePack message)
        {
            var userDetails = await CurrentUserDetails();

            message.LivechatUserId = userDetails.LivechatUserId;

            var conversationHandler = CreateHubManager();
            await conversationHandler.SendGroupMessage(message);

            // Send a push like message to others in group
            var package = new Dictionary <string, string>
            {
                { "body", message.Message },
                { "title", message.FromName },
                { "icon", "/static/img/launcher-icon-4x.png" },
                { "priority", "high" },
                { "channelId", message.ChannelId },
                { "sound", "default" }
            };

            if (userDetails.Role != "LivechatAgent")
            {
                await Clients
                .OthersInGroup(message.ChannelId)
                .SendAsync(HubMessages.NEW_GROUP_MESSAGE, package);

                var agent = await livechatRules.GetAgentsOnChannels(message.ChannelId, message.LivechatUserId);

                if (agent == null)
                {
                    return;
                }

                var userTokenRep = uow.GetRepository <LivechatUserTokenRepository>();
                var agentTokens  = await userTokenRep.GetLivechatAgentTokens(agent.LivechatUserId);

                var tokensToSend = new List <TokenDetail>();

                foreach (var tk in agentTokens)
                {
                    if (tokensToSend.Any(t => t.Token == tk.PushToken))
                    {
                        continue;
                    }

                    tokensToSend.Add(new TokenDetail
                    {
                        LivechatUserId = tk.LivechatUserId,
                        Device         = tk.Device,
                        Token          = tk.PushToken
                    });
                }

                await pushNotificationService.SendPushMessages(tokensToSend,
                                                               message.ChannelId,
                                                               userTokenRep,
                                                               defaultDataAction : HubMessages.NEW_GROUP_MESSAGE,
                                                               defaultNotificationTitle : message.FromName,
                                                               defaultNotificationBody : message.Message);
            }
        }
Example #5
0
        public async Task CreateLog(LivechatMessagePack pack)
        {
            await context.LivechatMessagePack.AddAsync(pack);

            await context.SaveChangesAsync();
        }