如何使用QnA Maker的REST API使用本机JavaScript更新我的知识库?

时间:2019-04-04 19:42:49

标签: qnamaker

我正尝试使用Azure REST API来更新我通过QnA Maker创建的知识库。有一个链接可以转到API testing console

我正在尝试使用下面的代码将我的知识库的内容替换为我从其他数据源中提取的内容。请参阅下面的代码。 希望这很有意义

function synchronize() {

    var jsonData = {
        "add": {
            "qnaList":[
                {"source": "Custom"},
                {"answer": "Hello"},
                {"questions": ["Hi", "Hello"]}
            ],
        },
        "delete": {
            "sources": ["Custom"]
        },
        "update": {}
    }   

    var request = new XMLHttpRequest();    
    var parameters = {
        "body": jsonData
    }
    request.open("POST", "https://qnawcfaq.azurewebsites.net/qnamaker/knowledgebases/{kbId}}/generateAnswer", true);                    
    request.setRequestHeader("Authorization", "EndpointKey {key}}");
    request.setRequestHeader("Content-type", "application/json");                    
    request.onreadystatechange = function () { //Call a function when the state changes.
        if (request.readyState == 4 && request.status == 200) {
            alert(request.responseText);
        }
    }

    request.send(JSON.stringify(parameters));
}

我期望如下所示:

{
  "operationState": "NotStarted",
  "createdTimestamp": "2018-03-19T07:38:46Z",
  "lastActionTimestamp": "2018-03-19T07:39:29Z",
  "userId": "86bb8390-56c0-42c2-9f81-3de161981191",
  "operationId": "03a4f4ce-30a6-4ec6-b436-02bcdf6153e1"
}

但是,出现以下错误:

{
  "error": {
    "code": "BadArgument",
    "message": "Authorization"
  }
}

我在Ocp-Apim-Subscription-Key中使用的值适用于其API测试控制台,但不适用于上面的代码。知道我在这里缺少什么吗?

谢谢!

  

在Github中上传的工作解决方案:   Solution

1 个答案:

答案 0 :(得分:0)

更新1 :再次阅读问题后,发问者想创建一个QnAMaker对,而不仅仅是查询它。 QnAMaker API的文档并不是很好,并且在某些方面已经过时或令人困惑。因此,我分享了两种情况的提示。

方案1:创建QnAMaker对

要创建QnAMaker对,要困难一些,我建议从C# Sample及其Program.cs开始。从那里,您可以将其转换为Java脚本。该文档还包含其他语言的示例,例如为nodejs

Protip::在执行示例时运行Fiddler。这样,您可以通过呼叫检查呼叫,并检查邮递员或作曲者的端口以进行测试。

基于原始问题,正确的呼叫如下:

// Replace {key} with your QnAMaker endpoint key 
// and {kbId} with the id of the knowledgebase you want to upgrade.

function synchronize() {
    var jsonData = {
        qnaList: [
          {
            id: 0,
            answer: 'Hello',
            source: 'Custom Editorial',
            questions: [
              'Hi','Hello'
            ],
            metadata: [
              {
                name: 'category',
                value: 'api'
              }
            ]
          }
        ]
    }

    var request = new XMLHttpRequest();    

    request.open("PATCH", "https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/{kbId}", true);                    
    request.setRequestHeader("Ocp-Apim-Subscription-Key", "{key}");
    request.setRequestHeader("Content-type", "application/json");                    
    request.onreadystatechange = function () { 
        //Call a function when the state changes.
        if (request.readyState == 4) {
            alert(request.responseText);
        }
    }

    request.send(JSON.stringify(jsonData));
}

方案2:查询QnAMaker

对于POST /generateAnswerOcp-Apim-Subscription-Key已过时,您必须使用自己的uri(主机)而不是westus.api.cognitive.microsoft.com

QnAMaker于去年夏天成为GA时,标头和主机定义已更改。

查找所有参数正确设置的最简单方法是转到QnAMaker门户,然后在知识库上单击查看代码enter image description here

从那里您将找到正确的设置来进行复制。 enter image description here

下面更改的定义的并排比较已发布在GA announcement上。

Announcement