установить входной или выходной контекстный диалог nodejs v2 - PullRequest
0 голосов
/ 26 января 2019

Я использую dialogflow модуль NPM и хочу отправить input/output context, но я не уверен, как это сделать.Я знаю, что могу сделать в google-assistant NPM с помощью я могу установить contexts с parameter, используя метод ниже,

 const parameters = { // Custom parameters to pass with context
     welcome: true,
 };
 conv.contexts.set('welcome-context', 5, parameters);

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Во-первых, некоторые пояснения к пакетам

  • Пакет google-assistant - это реализация / оболочка одного человека для Assistant SDK, позволяющая встроить Assistant в любую программу или устройство. Это похоже на создание собственного Google Home. (Похоже, этот пакет не от Google, но содержит официальный API-интерфейс protobuf, поэтому вам не нужно его компилировать самостоятельно.)
  • Пакет actions-on-google предназначен для создания веб-крючка, который работает либо с Action SDK, либо с Dialogflow. Это для создания программы, которая работает с помощником и отправляет обратно ответы. (то есть - это для написания кода, который отвечает «Эй, Google, поговори с моим приложением»)
  • Пакет dialogflow позволяет вам работать с агентами Dialogflow, включая их настройку и отправку запросов, чтобы увидеть, какие Intents соответствуют запросам. Это очень грубый эквивалент пакета "google-assistant", но он делает намного больше.
  • Пакет dialogflow-filling предназначен для создания webhook, который предоставляет логику и ответы для любой из платформ, поддерживаемых Dialogflow. Это эквивалент пакета действий на Google.

Фрагмент кода, который вы предоставили, выглядит так, как будто он из пакета "actions-on-google", и устанавливает выходной контекст как часть ответа.

Эквивалент вашего кода, использующего пакет "dialogflow-executement", будет

 const parameters = { // Custom parameters to pass with context
     welcome: true,
 };
 agent.context.set('welcome-context', 5, parameters);

Обратите внимание, что это "контекст", без "s" в этом пакете.

Аналогично, чтобы получить контекст ввода, вы должны использовать

agent.context.get('name-of-context;);

(Вы можете увидеть некоторые примеры, которые используют что-то вроде agent.setContext(). Эти методы устарели в пользу вышеупомянутого.)

0 голосов
/ 26 января 2019

Чтобы отправить контекст с помощью модуля Dialogflow NPM, вы должны сначала создать контекст, используя dialogflow.ContextsClient, а затем отправить его по запросу.

Чтобы преобразовать параметры в формат, требуемый Dialogflow, вам необходимо использовать этот модуль: pb-util

const dialogflow = require('dialogflow');
const { struct } = require('pb-util');  

const projectId = 'projectId';
const contextsClient = new dialogflow.ContextsClient();
const sessionClient = new dialogflow.SessionsClient();

async function createContext(sessionId, contextId, parameters, lifespanCount = 5) {

    const sessionPath = contextsClient.sessionPath(projectId, sessionId);
    const contextPath = contextsClient.contextPath(
        projectId,
        sessionId,
        contextId
    );

    const request = {
        parent: sessionPath,
        context: {
            name: contextPath,
            parameters: struct.encode(parameters)
            lifespanCount
        }
    };

    const [context] = await contextsClient.createContext(request);

    return context;
}


function sendQuery(sessionId, query, context) {

    const session = sessionClient.sessionPath(projectId, sessionId);

    const request = {
        session,
        queryInput: {
            text: {
                text: query
            }
        },
        queryParams: {
            contexts: [context] // You can pass multiple contexts if you wish
        }
    };

    return sessionClient.detectIntent(request);
}

(async() => {
    const parameters = { // Custom parameters to pass with context
       welcome: true
    };

    const sessionId = 'my-session';
    const context = await createContext(sessionId, 'welcome-context', parameters);

    const response = await sendQuery(sessionId, 'Hi', context);

    console.log(response);

})();

Имейте в виду, что вы отправляете контекст ввода. Выходной контекст генерируется в намерении.

Если у вас есть проблемы с аутентификацией клиентов SessionClient & ContextClient, вы можете проверить этот другой вопрос: Простой диалог для простой авторизации

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