Я думаю, что правильный способ сделать это - собрать qnaState из ответа, взять текст из приглашения и затем создать новый запрос с этими параметрами.
Итак, сначала для справки, вот я делаю вызов создателя QnA.
if (qnAcontext == null) {
qnAcontext = {
PreviousQnaId: 0,
PreviousUserQuery: null
}
}
const qnaResult = await request({
url: url,
method: 'POST',
headers: headers,
json: {
question: query,
top: 3,
context: qnAcontext
}
});
У меня есть этот код в вспомогательной функции, которую я вызываю из моего диалогового окна qna, но я думаю, что местоположение не важно. Вы можете видеть, что я установил qnAcontext по умолчанию. Это то, что вы будете обновлять, чтобы совершать вызовы на основе подсказок.
В результате вы можете получить кнопки подсказок через
var prompts = null;
if(qnaResult[0].context != null){
prompts = qnaResult[0].context.prompts;
}
Я раньше этого не делал, поэтому я Я не совсем уверен, откуда вы можете получить текстовый атрибут, но я предполагаю, что он в qnaResults[0].context.prompts[0].text
. Вам нужно будет взглянуть на объект приглашения для подтверждения. Вам также нужно создать новое состояние и взять первую часть ответа. Это можно сделать с помощью
var qnAcontext = {
PreviousQnaId: qnaResult[0].id,
PreviousUserQuery: activity.text
}
answerText = qnaResult[0].answer;
Теперь просто сделайте еще один вызов, используя новый qnAContext и текст приглашения в качестве запроса. Технически, если у вас нет последующего вопроса, заданного только в качестве контекста, вам не нужно возиться с qnAcontext. Вы должны просто иметь возможность использовать текст приглашения в качестве следующего запроса, и ответ должен появиться. Если ответ только для контекста, вам нужно будет передать объект qnAcontext.
Редактировать: Прямой ответ на ваш вопрос о запросе напрямую с помощью qnaId см. В добавленной ссылке ниже Кайл Делани.