#javascript #node.js #ibm-cloud #chatbot #ibm-watson
#javascript #node.js #ibm-cloud #чат-бот #ibm-watson
Вопрос:
Я хочу получить ответ от Watson, который вложен в диалог
Я могу получать ответы от узлов приветствия и когда они не понимают ввод текста, потому что они являются глобальными
это мой код
const AssistantV1 = require('ibm-watson/assistant/v1');
const { IamAuthenticator } = require ('ibm-watson/auth');
const { rejects } = require('assert');
const assistant = new AssistantV1({
authenticator: new IamAuthenticator({ apikey: '<>' }),
serviceUrl: 'https://gateway.watsonplatform.net/assistant/api/',
version: '2020-04-01'
});
let context = {} //I don't know what to put in context
assistant.message(
{
input: { text: '2' },//the answer "2" the nested node "Tramo Emision"
workspaceId: '<>',
context: context
}, function (err, response) {
if (err) {
rejects(err)
} else {
context = response.context;
}
})
.then(response => {
console.log(JSON.stringify(response.result, null, 2));
})
.catch(err => {
console.log(err);
});
но этот код позволяет мне получать только глобальные ответы, а не вложенные ответы
Я получаю в качестве ответа это
Ни одно условие узла диалога не соответствует true в последнем раунде диалога — context.nodes_visited пуст. Возврат к корневому узлу в следующем раунде.
Комментарии:
1. Непонятно, что вы имеете в виду. API V1 устарел, и вам следует использовать API V2. Вы создаете дерево диалога, и разговор начинается с верхнего узла. В зависимости от пользовательского ввода диалоговое окно переключается на поддерево и его узлы — или возвращается к началу
2. Я хочу получить сообщение «tramo emision», которое активируется с сообщением «2», но я не получаю условие узла диалога, соответствующее true в последнем раунде диалога — context.nodes_visited пуст. Возврат к корневому узлу в следующем раунде.
3. Я не понимаю вашего вопроса. Что вы подразумеваете под «я хочу получить сообщение»? Откуда? Вы используете V2 и создали сеанс или вы используете V1 и обрабатываете контекст сеанса самостоятельно?
4. я нахожусь в версии v1, я хочу получить сообщение, которое возвращает помощник watson, в версии v1 я не понимаю, как обрабатывать контексты, как мне это сделать?
5. Какой документации вы следовали? Любой конкретный вопрос? В нем говорится, что вы должны отправить контекст, полученный предыдущим ответом, обратно в WA, если используете V1
Ответ №1:
В вашем коде вы сбрасываете контекст на пустой объект в каждом цикле. Это приводит к возврату разговора к началу. Контекст используется для управления состоянием беседы. т.е. где в потоке диалога находится ваш разговор и какие переменные были установлены. Это позволяет продолжить диалог.
В API версии V1 каждое включение message
возвращает объект контекста, в который ваше приложение может заглянуть и изменить, но оно должно возвращать полный объект контекста. Итак, вашему приложению необходимо каким-то образом кэшировать объект контекста, когда он его получает, а затем возвращать его обратно при следующем вызове message
. Вашему приложению потребуется инициировать кэш на глобальном уровне файла, вне каких-либо функций, поэтому он будет инициирован только один раз, а не при каждом повороте разговора.
В API версии V2 управление контекстом выполняется на уровне сеанса API от вашего имени. Для поддержания контекста вам необходимо создать сеанс и использовать этот идентификатор сеанса при каждом повороте разговора. При необходимости контекст может быть возвращен вашему приложению, что позволяет вашему приложению просматривать / изменять любые заданные переменные контекста.