Как установить контекст диалогового потока из пакета node.js dialogflow

Я использую sessionClient.detectIntent()чтобы отправить текст в диалог, и он работает нормально, теперь я хочу также отправить контекст с текстом. Как я могу это сделать?

2 ответа

Обычно я создаю контексты следующим образом:

exports.createContext = async function(contextId, parameters, sessionPath, sessionId, lifespan = 333) {
    let contextPath;
    try {
        contextPath = contextClient.contextPath(projectId, sessionId, contextId);

    } catch (e) {
        console.error("Error => ");
        console.error(e)
    }
    const request = {
        parent: sessionPath,
        context: {
            name: contextPath,
            parameters: struct.encode(parameters),
            lifespanCount: lifespan
        }
    };
    contextClient.createContext(request)
};

И просто вызовите этот метод, когда мне нужно создать контекст, прежде чем я вызову метод detectIntent:

bot.createContext('CONTEXT_NAME_GOES_HERE', '{PARAMETER: VALUE}', sessionPath, session_id, lifespan = 1);

Вы можете отправлять контексты на detectIntent вместе с текстом запроса, добавив его в поле массива контекста в queryParams. Обратите внимание, что этот метод отправки контекста через detectIntent создаст (если не создан) и активирует контекст перед выполнением запроса.

Вы можете обратиться к фрагменту кода ниже:

const dialogflow = require('@google-cloud/dialogflow');

/**
 * Send a query and a context to the Dialogflow agent, and return the query result.
 * @param {string} projectId The project to be used
 */
async function detectIntent(projectId, sessionId, text) {

  // Create a new session
  const sessionClient = new dialogflow.SessionsClient();
  const sessionPath = sessionClient.projectAgentSessionPath(projectId, sessionId);

  // The text query request.
  const request = {
    session: sessionPath,
    queryParams:{
        //List of context to be sent and activated before the query is executed
        contexts:[
            {
                // The context to be sent and activated or overrated in the session 
                name: `projects/${projectId}/agent/sessions/${sessionId}/contexts/CONTEXT_NAME`,
                // The lifespan of the context
                lifespanCount: 8
              }
        ]
    },
    queryInput: {
      text: {
        // The query to send to the dialogflow agent
        text: text,
        // The language used by the client (en-US)
        languageCode: 'en-US',
      },
    },
  };

  // Send request and log result
  const responses = await sessionClient.detectIntent(request);
  console.log('Detected intent');
  const result = responses[0].queryResult;
  console.log(`  Query: ${result.queryText}`);
  console.log(`  Response: ${result.fulfillmentText}`);
  console.log(`  Output Contexts: ${JSON.stringify(result.outputContexts)}`)
}

detectIntent("PROJECT_ID","SESSION_ID","TEXT_QUERY");

Вывод:

Detected intent
  Query: Hi
  Response: Hello! How can I help you?
  Output Contexts: [{"name":"projects/PROJECT_ID/agent/sessions/SESSION_ID/contexts/CONTEXT_NAME","lifespanCount":7,"parameters":null}]
Другие вопросы по тегам