Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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);
        }
    }
Beispiel #5
0
 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);
        }
    }
Beispiel #7
0
    /// <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);
    }
Beispiel #8
0
    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);
        }
    }