private void HandleBotResponse(object sender, BotResponseEventArgs e) { Debug.Log($"Response from Bot of type: {e.EventType}"); switch (e.EventType) { case EventTypes.None: break; case EventTypes.ConversationStarted: OnConversationStarted?.Invoke(this, e.ConversationId); break; case EventTypes.MessageSent: OnMessageSent?.Invoke(this, e.SentMessageId); break; case EventTypes.MessageReceived: OnMessagesReceived?.Invoke(this, e.Messages); break; case EventTypes.Error: break; } }
public async void ReadMessage() { var client = new ClientWebSocket(); var cts = new CancellationTokenSource(); await client.ConnectAsync(new Uri(_Conversation.StreamUrl), cts.Token); await Task.Factory.StartNew(async() => { while (true) { WebSocketReceiveResult result; var message = new ArraySegment <byte>(new byte[4096]); do { result = await client.ReceiveAsync(message, cts.Token); if (result.MessageType != WebSocketMessageType.Text) { break; } var messageBytes = message.Skip(message.Offset).Take(result.Count).ToArray(); string messageJSON = Encoding.UTF8.GetString(messageBytes); BotsResponse botsResponse = JsonConvert.DeserializeObject <BotsResponse>(messageJSON); var args = new BotResponseEventArgs(); args.Activities = botsResponse.Activities; MessageReceived?.Invoke(this, args); }while (!result.EndOfMessage); } }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
private void _botServiceHelper_MessageRecieved(object sender, BotResponseEventArgs e) { e.Activities?.Where(activity => activity.From.Id != "user1") .ForEach(activity => Messages.Add(new ChatMessage { Text = activity.Text, IsIncoming = true })); }
/// <summary> /// Retrieves the activities of the given conversation. /// </summary> /// <param name="conversationId">The conversation ID.</param> /// <param name="watermark">Indicates the most recent message seen (optional).</param> /// <returns></returns> public IEnumerator GetMessagesCoroutine(string conversationId, string watermark = null) { if (string.IsNullOrEmpty(conversationId)) { throw new ArgumentException("Conversation ID cannot be null or empty"); } if (IsInitialized) { Debug.Log("GetMessagesCoroutine: " + conversationId); string uri = DirectLineConversationsApiUri + "/" + conversationId + "/" + DirectLineActivitiesApiUriPostfix; if (!string.IsNullOrEmpty(watermark)) { uri += "?" + BotJsonProtocol.KeyWatermark + "=" + watermark; } UnityWebRequest webRequest = CreateWebRequest(WebRequestMethods.Get, uri); yield return(webRequest.Send()); if (webRequest.isNetworkError) { Debug.Log("Web request failed: " + webRequest.error); } else { string responseAsString = webRequest.downloadHandler.text; if (!string.IsNullOrEmpty(responseAsString)) { //Debug.Log("Received response:\n" + responseAsString); BotResponseEventArgs eventArgs = CreateBotResponseEventArgs(responseAsString); if (BotResponse != null) { BotResponse.Invoke(this, eventArgs); } } else { Debug.Log("Received an empty response"); } } } else { Debug.Log("Bot Direct Line manager is not initialized"); yield return(null); } }
void BotHelper_MessageReceived(object sender, BotResponseEventArgs e) { foreach (var activity in e.Activities) { if (activity.From.Id != "usuario1") { Messages.Add(new ChatMessage { IsIncoming = true, Message = activity.Text }); } } }
/// <summary> /// Sends the given message to the given conversation. /// </summary> /// <param name="conversationId">The conversation ID.</param> /// <param name="fromId">The ID of the sender.</param> /// <param name="message">The message to sent.</param> /// <param name="fromName">The name of the sender (optional).</param> /// <returns></returns> public IEnumerator SendMessageCoroutine(string conversationId, string fromId, string message, string fromName = null) { if (string.IsNullOrEmpty(conversationId)) { throw new ArgumentException("Conversation ID cannot be null or empty"); } if (IsInitialized) { Debug.Log("SendMessageCoroutine: " + conversationId + "; " + message); UnityWebRequest webRequest = CreateWebRequest( WebRequestMethods.Post, DirectLineConversationsApiUri + "/" + conversationId + "/" + DirectLineActivitiesApiUriPostfix, new MessageActivity(fromId, message, DirectLineChannelId, null, fromName).ToJsonString()); yield return(webRequest.Send()); if (webRequest.isNetworkError) { Debug.Log("Web request failed: " + webRequest.error); } else { string responseAsString = webRequest.downloadHandler.text; if (!string.IsNullOrEmpty(responseAsString)) { //Debug.Log("Received response:\n" + responseAsString); BotResponseEventArgs eventArgs = CreateBotResponseEventArgs(responseAsString); if (BotResponse != null) { BotResponse.Invoke(this, eventArgs); } } else { Debug.Log("Received an empty response"); } } } else { Debug.Log("Bot Direct Line manager is not initialized"); yield return(null); } }
/// <summary> /// Creates a new BotResponseEventArgs instance based on the given response. /// </summary> /// <param name="responseAsString"></param> /// <returns></returns> private BotResponseEventArgs CreateBotResponseEventArgs(string responseAsString) { if (string.IsNullOrEmpty(responseAsString)) { throw new ArgumentException("Response cannot be null or empty"); } JSONNode responseJsonRootNode = JSONNode.Parse(responseAsString); JSONNode jsonNode = null; BotResponseEventArgs eventArgs = new BotResponseEventArgs(); if ((jsonNode = responseJsonRootNode[BotJsonProtocol.KeyError]) != null) { eventArgs.EventType = EventTypes.Error; eventArgs.Code = jsonNode[BotJsonProtocol.KeyCode]; string message = jsonNode[BotJsonProtocol.KeyMessage]; if (!string.IsNullOrEmpty(message)) { eventArgs.Message = message; } } else if (responseJsonRootNode[BotJsonProtocol.KeyConversationId] != null) { eventArgs.EventType = EventTypes.ConversationStarted; eventArgs.ConversationId = responseJsonRootNode[BotJsonProtocol.KeyConversationId]; } else if (responseJsonRootNode[BotJsonProtocol.KeyId] != null) { eventArgs.EventType = EventTypes.MessageSent; eventArgs.SentMessageId = responseJsonRootNode[BotJsonProtocol.KeyId]; } else if ((jsonNode = responseJsonRootNode[BotJsonProtocol.KeyActivities]) != null) { eventArgs.EventType = EventTypes.MessageReceived; eventArgs.Watermark = responseJsonRootNode[BotJsonProtocol.KeyWatermark]; JSONArray jsonArray = jsonNode.AsArray; foreach (JSONNode activityNode in jsonArray) { MessageActivity messageActivity = MessageActivity.FromJson(activityNode); eventArgs.Messages.Add(messageActivity); } } return(eventArgs); }
private void Invoke(string responseAsString) { if (!string.IsNullOrEmpty(responseAsString)) { Debug.Log("Received response:\n" + responseAsString); BotResponseEventArgs eventArgs = CreateBotResponseEventArgs(responseAsString); if (BotResponse != null) { BotResponse.Invoke(this, eventArgs); } } else { Debug.Log("Received an empty response"); } }
/// <summary> /// Starts a new conversation with the bot. /// </summary> /// <returns></returns> public IEnumerator StartConversationCoroutine() { if (IsInitialized) { UnityWebRequest webRequest = CreateWebRequest(WebRequestMethods.Post, DirectLineConversationsApiUri); yield return(webRequest.Send()); if (webRequest.isNetworkError) { Debug.Log("Web request failed: " + webRequest.error); } else { string responseAsString = webRequest.downloadHandler.text; if (!string.IsNullOrEmpty(responseAsString)) { BotResponseEventArgs eventArgs = CreateBotResponseEventArgs(responseAsString); if (BotResponse != null) { BotResponse.Invoke(this, eventArgs); } } else { Debug.Log("Received an empty response"); } } } else { Debug.Log("Bot Direct Line manager is not initialized"); yield return(null); } }