首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QnA Maker的REST来使用本地JavaScript更新我的知识库?

如何使用QnA Maker的REST来使用本地JavaScript更新我的知识库?
EN

Stack Overflow用户
提问于 2019-04-04 19:42:49
回答 1查看 1.6K关注 0票数 1

我正在尝试使用Azure REST API来更新我通过QnA Maker创建的知识库。有一个链接可以连接到API测试控制台

我试图使用下面的代码将知识库的内容替换为从不同数据源中提取的内容。请看下面的代码。希望这是有意义的

代码语言:javascript
复制
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));
}

我期待这样的事情:

代码语言:javascript
复制
{
  "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"
}

但是,我得到以下错误:

代码语言:javascript
复制
{
  "error": {
    "code": "BadArgument",
    "message": "Authorization"
  }
}

我在Ocp订阅键中使用的值针对他们的API测试控制台工作,但它不适用于上面的代码。知道我在这里错过了什么吗?

谢谢!

工作解决方案上传到Github解决方案

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 10:32:06

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

场景1:创建QnAMaker对

要创建QnAMaker对,难度要大一些,我建议从C#样品及其Program.cs开始。从那里,您可以将其转换为java脚本。文档中也有其他语言的示例,例如nodejs

Protip:在执行示例时,运行Fiddler。通过这种方式,您可以通过调用和端口检查对邮递员或作曲家的调用,以便进行测试。

基于最初的问题,正确的调用如下:

代码语言:javascript
复制
// 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门户,单击知识库中的视图代码

在那里,您将找到正确的设置来复制它。

下面更改的定义的并行比较发布在GA公告上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55523785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档