public async Task SendTypingState(LivechatMessagePack message) { var currentSession = await CurrentUserDetails(); await Clients .OthersInGroup(message.ChannelId) .SendAsync(HubMessages.TYPING_START, message); return; }
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); }
/// <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"); }
/// <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); } }
public async Task CreateLog(LivechatMessagePack pack) { await context.LivechatMessagePack.AddAsync(pack); await context.SaveChangesAsync(); }