Ejemplo n.º 1
0
        /// <summary>
        /// Add a new QnAKnowledgebase to the database, and call EFQnARepository to
        /// create the new knowledgebase to QnAMaker.ai
        /// </summary>
        /// <param name="b">QnAKnowledgeBase name</param>
        /// <returns>true if registered, false if not</returns>
        public async Task <bool> AddNewQnAKnowledgeBaseAsync(QnAKnowledgeBase b)
        {
            string[] result = new string[2];

            var q = await GetQnABotByIdAsync(b.QnABotId);

            b.RegDate  = DateTime.Now;
            b.LastEdit = DateTime.Now;
            b.IsActive = false;

            var r = await qnaRepository.RegisterNewQnAKnowledgeBaseAsync(q, b);

            if (r != null)
            {
                b.KnowledgeBaseID = r;
                await db.AddAsync(b);

                if (await db.SaveChangesAsync() > 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
        public IActionResult AddNewQnAKnowledgeBaseAsync(int id)
        {
            var q = new QnAKnowledgeBase
            {
                QnABotId = id
            };

            return(View(q));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Register a new chatbot in the database
        /// </summary>
        /// <param name="qnabot">QnABaseClass chatbot to be registered</param>
        /// <returns>r[0] = operationresult, r[1] = chatbotname, r[2] = result from QnAKnowledgeBase creation</returns>
        public async Task <string[]> RegisterNewQnABotAsync(QnABaseClass qnabot)
        {
            string[] r   = new string[3];
            var      qna = new QnABaseClass
            {
                chatbotName     = qnabot.chatbotName,
                regDate         = DateTime.Now,
                lastEdit        = DateTime.Now,
                isActive        = false,
                subscriptionKey = qnabot.subscriptionKey,
                knowledgeBaseID = qnabot.knowledgeBaseID
            };
            await db.QnABaseClass.AddAsync(qna);

            if (await db.SaveChangesAsync() > 0)
            {
                r[0] = "success";
                r[1] = qna.chatbotName;
            }
            else
            {
                r[0] = "error";
                r[1] = qna.chatbotName;
            }

            var q = await GetQnABotByNameAsync(qna.chatbotName);

            if (qna.knowledgeBaseID != null)
            {
                var klb = new QnAKnowledgeBase
                {
                    KnowledgeBaseID  = q.knowledgeBaseID,
                    QnABotId         = q.QnAId,
                    RegDate          = DateTime.Now,
                    LastEdit         = DateTime.Now,
                    IsActive         = false,
                    QnAKnowledgeName = "navn mangler"
                };

                if (await RegisterNewQnAKnowledgeBaseAsync(klb))
                {
                    r[2] = "success";
                    return(r);
                }
                else
                {
                    r[2] = "error";
                    return(r);
                }
            }
            else
            {
                r[2] = "error";
                return(r);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Fetch QnAKnowledgebase from db
        /// </summary>
        /// <param name="id">knowledgebase id in database</param>
        /// <returns>found QnAKnowledgeBase</returns>
        public async Task <QnAKnowledgeBase> GetQnAKnowledgeBaseAsync(int id)
        {
            QnAKnowledgeBase q = await db.QnAKnowledgeBase.FirstOrDefaultAsync(X => X.QnAKnowledgeBaseId == id);

            List <QnAPairs> qPairs = await db.QnAPairs.Where(X => X.KnowledgeBaseId == q.QnAKnowledgeBaseId).ToListAsync();

            q.QnAPairs = qPairs;
            var conversationCount = await Task.Run(() => db.Conversations.Count(x => x.KnowledgebaseId == q.QnAKnowledgeBaseId));

            q.ConversationCount = conversationCount;
            return(q);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Register a new knowledgebase in the database. This only happens if you
        /// register a new chatbot with a knowledgebase already exsisting
        /// </summary>
        /// <param name="klb">knowledgebase id from microsoft</param>
        /// <returns>true if ok, false if not</returns>
        private async Task <bool> RegisterNewQnAKnowledgeBaseAsync(QnAKnowledgeBase klb)
        {
            await db.QnAKnowledgeBase.AddAsync(klb);

            var r = await db.SaveChangesAsync();

            if (r < 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public async Task <IActionResult> AddNewQnAKnowledgeBaseAsync([FromForm][Bind("QnABotId", "QnAKnowledgeName")] QnAKnowledgeBase b)
        {
            var r = await chatbotRepository.AddNewQnAKnowledgeBaseAsync(b);

            if (r)
            {
                TempData["success"] = String.Format("Kunnskapsbase med navn {0} er registrert!", b.QnAKnowledgeName);
                return(RedirectToAction("QnABots", new { id = b.QnABotId }));
            }
            else
            {
                TempData["error"] = String.Format("Kunnskapsbase med navn {0} ble ikke registrert!", b.QnAKnowledgeName);
                return(RedirectToAction("QnABots", new { id = b.QnABotId }));
            }
        }
Ejemplo n.º 7
0
    private static async Task AddKnowledgeBase(ApplicationDbContext context)
    {
        var qna = new QnAKnowledgeBase
        {
            QnABotId         = 1,
            QnAKnowledgeName = "SvartaBjorn_QnA",
            RegDate          = DateTime.Now,
            LastEdit         = DateTime.Now,
            IsActive         = true,
            //SubscriptionKey = "7d26f05ae72842478df8fdca921de66d",
            KnowledgeBaseID = "025fd52b-e8d7-43aa-a10f-e8f9bde3e369"
        };

        await context.AddAsync(qna);

        await context.SaveChangesAsync();
    }
        /// <summary>
        /// Delete the given QnAKnowledgeBase from QnAMaker.ai
        /// </summary>
        /// <param name="q">QnABaseClass q</param>
        /// <param name="b">QnAKnowledgeBase b</param>
        /// <returns>true if deleted, false if not</returns>
        public async Task <bool> DeleteKnowledgeBase(QnABaseClass q, QnAKnowledgeBase b)
        {
            var client = new HttpClient();

            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", q.subscriptionKey);

            HttpResponseMessage response;
            var uri = b.DeleteQnAKnowledgeBase;

            response = await client.DeleteAsync(uri);

            if (response.IsSuccessStatusCode)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        /// <summary>
        /// Register the given knowledgebase at the given qna chatbot at QnAMaker.ai
        /// </summary>
        /// <param name="q">QnABaseClass q</param>
        /// <param name="b">QnAKnowledgeBase b</param>
        /// <returns>KnowledgeBase Id-string from QnAMaker.ai</returns>
        public async Task <String> RegisterNewQnAKnowledgeBaseAsync(QnABaseClass q, QnAKnowledgeBase b)
        {
            var client = new HttpClient();

            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", q.subscriptionKey);

            HttpResponseMessage response;
            var uri = b.CreateNewQnAKnowledgeBase;

            string c = "{'name':'" + b.QnAKnowledgeName + "'}";

            // Request body
            byte[] byteData = Encoding.UTF8.GetBytes(c);

            using (var content = new ByteArrayContent(byteData))
            {
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                response = await client.PostAsync(uri, content);
            }
            JObject o    = JObject.Parse(response.Content.ReadAsStringAsync().Result);
            var     kbId = (string)o.SelectToken("['kbId']");

            return(kbId);
        }
Ejemplo n.º 10
0
        private static async Task <string> UpdateQueryQnABot(string newQuestion, string newAnswer, Mode paramMode)
        {
            string strResponse = "";
            // crea una entrada de base de conocimiento
            QnAKnowledgeBase objQnAKnowledgeBase = new QnAKnowledgeBase();
            QnaPair          objQnaPair          = new QnaPair();

            objQnaPair.question = newQuestion;
            objQnaPair.answer   = newAnswer;

            if (paramMode == Mode.Add)
            {
                Add objAdd = new Add();
                objAdd.qnaPairs = new List <QnaPair>();
                objAdd.urls     = new List <string>();
                objAdd.qnaPairs.Add(objQnaPair);
                objQnAKnowledgeBase.add = objAdd;
            }

            if (paramMode == Mode.Delete)
            {
                Delete objDelete = new Delete();
                objDelete.qnaPairs = new List <QnaPair>();
                objDelete.urls     = new List <string>();
                objDelete.qnaPairs.Add(objQnaPair);
                objQnAKnowledgeBase.delete = objDelete;
            }

            using (System.Net.Http.HttpClient client =
                       new System.Net.Http.HttpClient())
            {
                string RequestURI = String.Format("{0}{1}{2}{3}? ",
                                                  @"https://westus.api.cognitive.microsoft.com/",
                                                  @"qnamaker/v2.0/",
                                                  @"knowledgebases/",
                                                  _KnowledgeBase);

                using (HttpRequestMessage request =
                           new HttpRequestMessage(new HttpMethod("PATCH"), RequestURI))
                {
                    request.Content = new StringContent(
                        JsonConvert.SerializeObject(objQnAKnowledgeBase),
                        System.Text.Encoding.UTF8, "application/json");

                    request.Content.Headers.Add(
                        "Ocp-Apim-Subscription-Key",
                        _OcpApimSubscriptionKey);

                    HttpResponseMessage response = await client.SendAsync(request);

                    if (response.IsSuccessStatusCode)
                    {
                        strResponse = $"Operation {paramMode} completed.";
                    }
                    else
                    {
                        string responseContent =
                            await response.Content.ReadAsStringAsync();

                        strResponse = responseContent;
                    }
                }
            }

            return(strResponse);
        }