Действия в Google V2 Node.js - Попытка использовать разговор.данные, но она не работает должным образом - PullRequest
0 голосов
/ 27 апреля 2018

Я следую документации, предоставленной Google при попытке получить объект convseration.data JSON для хранения некоторых данных, которые необходимо использовать в более поздних целях.

Сохранение данных в разговоре

В настоящее время в моем проекте у меня есть одно намерение - захватить параметр, сохраненный действием, и попытаться сохранить его в conv.data. Для этого делается следующий код:

[INTENTS.INTENT_A]: (conv, { parameter }) => {
    conv.data.tempvariable = parameter;
}

В дальнейшем я пытаюсь получить доступ к тому же значению tempvariable, используя следующий код:

[INTENTS.INTENT_B]: (conv) => {
        const tempvariable = conv.data.tempvariable; 
}

Насколько я знаю, я слежу за документацией, и объект conv.data всегда неопределен в INTENT_B . Я пытался сохранить параметр в хранилище пользователей, но мне кажется, что это нежелательно. Есть ли что-то, что я делаю неправильно, чтобы это не работало, как ожидалось?

Оба Intent_A и Intent_B используют различные контексты ввода / вывода в качестве эталона. В V1 клиентской библиотеки я использовал app.data, и он работал просто отлично, но с введением в V2 и реализацией объекта разговора он неожиданно не работает должным образом.

1 Ответ

0 голосов
/ 02 мая 2018

Вот как я это сделаю. Но сначала я позабочусь о том, чтобы мои параметры были правильно объявлены внутри Dialogflow и чтобы я четко понимал структуру самого параметра.
Например, допустим, я определяю следующие параметры внутри Dialogflow:

enter image description here

В этом примере я сосредоточусь исключительно на параметре radius.
После определения радиуса следующим образом, если пользователь введет 10 miles во входной строке, структура радиуса в выполнении будет выглядеть так

conv.parameters.radius = {
    'amount':10,
    'unit':'mi'
}

Итак, если я хочу сохранить радиус для последующего использования, я могу сделать это так:

[INTENTS.INTENT_A]: (conv, params) => {
    conv.data.radius = conv.parameters.radius.amount;
    // or
    conv.data.radius = params['radius']['amount']
}

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

[INTENTS.INTENT_B]: (conv) => {
    const savedRadius = conv.data.radius; 
    console.log(savedRadius)
}

Так что, по моему мнению, вам нужно убедиться, что вы четко понимаете структуру параметров, которые вы определяете внутри Dialogflow, чтобы получить доступ к нему внутри своего выполнения.

Хорошая практика ... Используйте тонны console.log(conv) для каждого отдельного намерения, чтобы исследовать и понять структуру происходящего разговора

Надеюсь, это поможет. Дайте мне знать, как у вас все получилось.

...