嗨,我正在开发 Microsoft Bot Framework,并且正在使用包含 LUIS 应用程序的 QnAMaker。
在这里,我的问题是,当我在使用 QnAMaker 时,它提供了准确的答案,当我添加 LUIS 服务时,我在调试中得到了准确的答案,当我await context.PostAsync(answer);
通过默认情况下转到异常部分向用户提供回复时它的显示异常如下所示。
对象引用未设置为对象的实例。
由于我从 QnAMaker 获取数据,在这里我无法理解 null 发生在哪里。
在下面,我将分享我为在 LUIS 识别意图和实体后获取对用户表单 QnAMaker 的响应而编写的代码
private async Task toGetTheResponsefromQnAMakerAsync(IDialogContext context, Activity activity)
{
var messagetext = (activity.Text).ToLower();
var knowledgebaseId = ConfigurationManager.AppSettings["KnowledgeBaseId"];
//Use subscription key assigned to you.
var qnamakerSubscriptionKey = ConfigurationManager.AppSettings["QnAmakerSubscriptionKey"];
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", qnamakerSubscriptionKey);
var uri = "https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/subscription-id/generateAnswer?" + queryString;
HttpResponseMessage response;
// Request body
byte[] byteData = Encoding.UTF8.GetBytes($"{{\"question\": \"{messagetext}\"}}");
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response = await client.PostAsync(uri, content);
}
try
{
if (response.IsSuccessStatusCode)
{
var responseContent = response.Content.ReadAsStringAsync().Result;
var QnAMakerResponse = JsonConvert.DeserializeObject<RootObject>(responseContent);
if (QnAMakerResponse.answers != null)
{
foreach (var item in QnAMakerResponse.answers)
// return our QnAMakerResponse to the user
answer = item.answer.ToString();
await context.PostAsync(answer);
}
}
}
catch (Exception e)
{
}
}