Как создать OutPutContext через клиентскую библиотеку V2 для узла js - PullRequest
0 голосов
/ 20 ноября 2018

Я работаю над созданием сущностей и намерений в моем агенте, используя клиентскую библиотеку v2 для node.js.И для этого я прохожу этот образец , который находится на Git.И это говорит что-то, связанное с идентификатором сеанса и идентификатором контекста.Может кто-нибудь объяснить мне, что такое sessionId и contextId.А также предоставьте мне ссылку, где я могу прочитать эту вещь в деталях.

Я не могу создать контекст, следуя этому примеру.Как я могу создать контекст при создании намерения в то же время.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Контексты очень тесно связаны с SessionID.Например, у вас есть чат-бот, который запускается на двух компьютерах, обслуживающих двух разных пользователей.Каждый пользователь будет иметь соответствующий session_id (если вы кодируете в NODE, когда новый пользователь запускает чат-бота, вы должны убедиться, что он / она получит уникальный session_id).

Теперь каждый уникальный идентификатор сеанса будет иметь уникальный контекст.В приведенном выше примере, скажем, пользователь 1 инициализирует намерение, которое имеет входной контекст с именем «abc», с продолжительностью жизни 2, а пользователь 2 инициализирует другое намерение, которое имеет входной контекст с именем «xyz» с продолжительностью жизни 5, эти соответствующие контексты записываются противкаждый из этих идентификаторов сессии каждого пользователя.Вы можете программно контролировать (редактировать) контексты и их жизненный цикл.Это самое большое преимущество облегченного кода Dialogflow по сравнению с использованием GUI.Используя такие службы, как Firebase, вы также можете сохранить идентификаторы сеанса и связанные с ним контексты, чтобы в следующий раз при входе того же пользователя они могли начинать с того места, где они последний раз ушли.

Я могу поделиться фрагментом из одного из моихпредыдущие проекты, где я управлял контекстами программно.Сценарий инициализации выглядит следующим образом:

/**
 * @author Pruthvi Kumar
 * @email pruthvikumar.123@gmail.com
 * @create date 2018-08-15 04:42:22
 * @modify date 2018-08-15 04:42:22
 * @desc Dialogflow config for chatbot.
 */

const dialogflow_config = {
    projectId: 'xxx',
    sessionId: 'chatbot-session-id', //This is default assignment. This will hve to be overridden by sessionId as obtained from client in order to main context per sessionId.
    languageCode: 'en-US'
};

exports.configStoreSingleton = (function () {
    let instanceStacks;
    let instanceSessionId;

    let contextStack = {};
    let intentsStack = {};
    let successfulIntentResponseStack = {};

    function init() {
        contextStack[dialogflow_config['sessionId']] = [];
        intentsStack[dialogflow_config['sessionId']] = [];
        successfulIntentResponseStack[dialogflow_config['sessionId']] = [];

        return {
            contextStack: contextStack,
            intentsStack: intentsStack,
            successfulIntentResponseStack: successfulIntentResponseStack
        };
    }

    return {
        init: function () {
            if (!instanceStacks || (instanceSessionId !== dialogflow_config['sessionId'] && (!intentsStack[dialogflow_config['sessionId']]))) {
                console.log('[dialogflow_config]: Singleton is not instantiated previously or New userSession is triggered! Fresh instance stack will be provisioned');
                instanceStacks = init();
                instanceSessionId = dialogflow_config['sessionId'];
            }
            return instanceStacks;
        }
    };
})();

exports.updateSessionIdOfDialogflowConfig = function (sessionId) {
    if (typeof (sessionId) === 'string') {
        dialogflow_config['sessionId'] = sessionId;
        return true;
    } else {
        console.warn('[dialogflow_config]: SessionId must be of type STRING!');
        return;
    }
};

exports.getDialogflowConfig = function () {
    return dialogflow_config;
};

И затем для программного управления контекстами:

/**
 * @author Pruthvi Kumar
 * @email pruthvikumar.123@gmail.com
 * @create date 2018-08-15 04:37:15
 * @modify date 2018-08-15 04:37:15
 * @desc Operate on Dialogflow Contexts
 */

const dialogflow = require('dialogflow');
const dialogflowConfig = require('../modules/dialogflow_config');
const structjson = require('./dialogflow_structjson');
const util = require('util');

const contextsClient = new dialogflow.ContextsClient();

exports.setContextHistory = function (sessionId, intent_name, context_payload, preservedContext=false) {
  /* maintain context stack per session */
  /* context_payload = {input_contexts: [], output_contexts = []}
   */
  const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;

  if (intent_name) {
    contextStack[sessionId].push({
      intent: intent_name,
      contexts: context_payload,
      preserveContext: preservedContext
    });
  } else {
    console.warn('[dialogflow_contexts]: Intent name is not provided OR Nothing in context_payload to add to history!');
  }

};

exports.getContextHistory = function () {
  const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
  return contextStack;
}

exports.preserveContext = function () {
  const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
  //Traverse contextStack, get the last contexts.
  let context_to_be_preserved = contextStack[dialogflowConfig.getDialogflowConfig()['sessionId']][contextStack[dialogflowConfig.getDialogflowConfig()['sessionId']].length - 1];
  //console.log(`context to be preserved is: ${util.inspect(context_to_be_preserved)}`);
  return context_to_be_preserved['contexts'].map((context, index) => {
    let context_id = exports.getContextId(context);
    return exports.updateContext(context_id, true)
  });
}

Здесь вы можете ссылаться на этот ресурс github для создания своих собственных контекстов - https://github.com/googleapis/nodejs-dialogflow/blob/master/samples/resource.js

Счастливого создания цифровых душ!

0 голосов
/ 20 ноября 2018

Ниже приведен код для создания контекста.Вы не можете создать контекст и намерение в одном вызове API, сначала необходимо создать контекст, а затем создать намерение, использующее контекст.Ответ на вызов API для создания контекста вернет идентификатор контекста, который вы можете использовать в своем намерении.

  const dialogflow = require('dialogflow');

  // Instantiates clients
  const entityTypesClient = new dialogflow.EntityTypesClient();

  // The path to the agent the created entity type belongs to.
  const agentPath = entityTypesClient.projectAgentPath(projectId);

  const createEntityTypeRequest = {
    parent: agentPath,
    entityType: {
      displayName: displayName,
      kind: kind,
    },
  };

  entityTypesClient
    .createEntityType(createEntityTypeRequest)
    .then(responses => {
      console.log(`Created ${responses[0].name} entity type`);
    })
    .catch(err => {
      console.error('Failed to create size entity type:', err);
    });

Источник: https://github.com/googleapis/nodejs-dialogflow/blob/master/samples/resource.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...