Как сохранить состояние в Google Action и диалоговом потоке - PullRequest
0 голосов
/ 13 ноября 2018

Меня очень смущает документация Google по диалогу и действиям для Google.Похоже, мне нужно смешивать и сопоставлять между ними, чтобы реализовать некоторые поведения, такие как сохранение состояния между поворотами разговора.Например, у меня есть обработчик намерений потока диалога, который выглядит следующим образом

function showCard(agent) {
   let conv = agent.conv();
   if(!conv) console.log('There is no conv!'); // only assistant will have a conversation
   let n = 0;
   if(conv){
    if( !conv.user.storage ) conv.user.storage = {};
    n = conv.user.storage.cardNumber || conv.data.cardNumber || 0;
    console.log(`set cardNumber from ${n}`);
  }

// do some magic to generate a Card and simple response into _speakText

agent.add( _speakText );

if( conv ) {
    if( !conv.user.storage ) conv.user.storage = {};
    conv.data.cardNumber = n;
    conv.user.storage.cardNumber = n;
    console.log(`set cardNumber to ${n}`);
}

Похоже, что ни диалог, ни пользовательские данные никогда не сохраняются.Итак, как мне сохранить состояние через API-интерфейс dialogflow?Чего мне не хватает?

Неужели мое замешательство в примерах диалогового потока демонстрирует другой обработчик запросов / ответов по сравнению с действиями в Google?(Должен ли я выдернуть все, что связано с агентами диалогового потока?)

--- edit ---

 const {WebhookClient} = require('dialogflow-fulfillment');
 ...
 exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
   const agent = new WebhookClient({ request, response });

ИЛИ

 const { dialogflow } = require('actions-on-google');
 ...
 const app = dialogflow();
 exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

1 Ответ

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

Вы можете сохранить данные в сеансе с разговорным токеном. Вы можете получить доступ к talkToken через диалоговый интерфейс «conv.data», а затем ввести имена параметров, которые вы хотите сохранить. Например:

Example to use conversationToken

С его помощью вы можете сохранить данные, которые вы хотите сохранить в том же сеансе вашего действия. Это также применяется при отправке разговора с одного устройства на другое ( newSurface ). Но если вы закроете действие, данные сеанса будут потеряны.

...