Помощник Watson получает сообщение внутри вложенного узла

#javascript #node.js #ibm-cloud #chatbot #ibm-watson

#javascript #node.js #ibm-cloud #чат-бот #ibm-watson

Вопрос:

Я хочу получить ответ от 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 от вашего имени. Для поддержания контекста вам необходимо создать сеанс и использовать этот идентификатор сеанса при каждом повороте разговора. При необходимости контекст может быть возвращен вашему приложению, что позволяет вашему приложению просматривать / изменять любые заданные переменные контекста.