Пример #1
0
        //public static DirectLineClient client;
        //public static Microsoft.Bot.Connector.DirectLine.Conversation dconversation;
        //public static string watermark = null;
        //public static ConnectorClient connector;
        //public static Microsoft.Bot.Connector.Activity activity;

        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task <HttpResponseMessage> Post([FromBody] Microsoft.Bot.Connector.Activity int_activity)
        {
            UserStuff user = null;

            if (users.ContainsKey(int_activity.From.Id))
            {
                user = users[int_activity.From.Id];
            }
            else
            {
                users[int_activity.From.Id] = new UserStuff()
                {
                    activity = int_activity
                };
                user = users[int_activity.From.Id];
            }

            try
            {
                if (int_activity.Type == Microsoft.Bot.Connector.ActivityTypes.Message)
                {
                    Trace.WriteLine("Got Message");
                    Trace.WriteLine(int_activity.ToString());
                    //create connector service
                    user.connector = new ConnectorClient(new Uri(int_activity.ServiceUrl));

                    //var rply = int_activity.CreateReply($"Successful connection for {JsonConvert.SerializeObject(int_activity, Formatting.Indented)}");
                    //await user.connector.Conversations.ReplyToActivityAsync(rply);
                    //conv = await connector.Conversations.CreateDirectConversationAsync(activity.Recipient, activity.From);
                    //activity.Conversation.Id = conv.Id;

                    if (user.client == null)
                    {
                        user.client = new DirectLineClient(directLineSecret);
                    }

                    if (user.dconversation == null)
                    {
                        user.dconversation = await user.client.Conversations.StartConversationAsync();

                        new System.Threading.Thread(async() => await user.ReadBotMessagesAsync()).Start();
                    }

                    // send user's input to health service bot
                    Microsoft.Bot.Connector.DirectLine.Activity dact = new Microsoft.Bot.Connector.DirectLine.Activity()
                    {
                        From = new Microsoft.Bot.Connector.DirectLine.ChannelAccount("some user"),
                        Text = int_activity.Text,
                        Type = Microsoft.Bot.Connector.DirectLine.ActivityTypes.Message
                    };
                    await user.client.Conversations.PostActivityAsync(user.dconversation.ConversationId, dact);
                }
                else
                {
                    HandleSystemMessage(int_activity);
                }
                var response = Request.CreateResponse(HttpStatusCode.OK);
                return(response);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                throw;
            }
        }