Сохраните беседу бота Azure в Blobstorage для JavaScript - PullRequest
0 голосов
/ 01 марта 2019

Я следовал , как это , чтобы сохранить беседу чата, но проблема в том, что она хранит беседу каждого пользователя в 1 списке, называемом UtteranceList, но я хочу, чтобы беседа каждого пользователя сохранялась в их отдельных списках.,Спасибо!

  const { BotFrameworkAdapter, ConversationState, MemoryStorage } require('botbuilder');
  const restify = require('restify');

 // Create server.
// let server = restify.createServer();
// server.listen(process.env.port || process.env.PORT || 3978, function () {
//    console.log(`${server.name} listening to ${server.url}`);
// });

// Create adapter.
// const adapter = new BotFrameworkAdapter({
//    appId: process.env.MICROSOFT_APP_ID,
 //    appPassword: process.env.MICROSOFT_APP_PASSWORD
//  });

  // Add memory storage.
 var storage = new MemoryStorage();

 // const conversationState = new ConversationState(storage);
 // adapter.use(conversationState);

 // Listen for incoming requests - adds storage for messages.
 server.post('/api/messages', (req, res) => {
  adapter.processActivity(req, res, async (context) => {

    if (context.activity.type === 'message') {
        // Route to main dialog.
        await myBot.onTurn(context);
        // Save updated utterance inputs.
        await logMessageText(storage, context);
    }
    else {
        // Just route to main dialog.
        await myBot.onTurn(context);
    } 
});
});

 // This function stores new user messages. Creates new utterance log if none exists.
async function logMessageText(storage, context) {
  let utterance = context.activity.text;
try {
    // Read from the storage.
    let storeItems = await storage.read(["UtteranceLogJS"])
    // Check the result.
    var UtteranceLogJS = storeItems["UtteranceLogJS"];

    if (typeof (UtteranceLogJS) != 'undefined') {
        // The log exists so we can write to it.
        storeItems["UtteranceLogJS"].turnNumber++;
        storeItems["UtteranceLogJS"].UtteranceList.push(utterance);
        // Gather info for user message.
        var storedString = storeItems.UtteranceLogJS.UtteranceList.toString();
        var numStored = storeItems.UtteranceLogJS.turnNumber;

        try {
            await storage.write(storeItems)
            context.sendActivity(`${numStored}: You stored: ${storedString}`);
        } catch (err) {
            context.sendActivity(`Write failed of UtteranceLogJS: ${err}`);
        }

     } else {
        context.sendActivity(`Creating and saving new utterance log`);
        var turnNumber = 1;
        storeItems["UtteranceLogJS"] = { UtteranceList: [`${utterance}`], "eTag": "*", turnNumber }
        // Gather info for user message.
        var storedString = storeItems.UtteranceLogJS.UtteranceList.toString();
        var numStored = storeItems.UtteranceLogJS.turnNumber;

        try {
            await storage.write(storeItems)
            context.sendActivity(`${numStored}: You stored: ${storedString}`);
        } catch (err) {
            context.sendActivity(`Write failed: ${err}`);
        }
    }
} catch (err) {
    context.sendActivity(`Read rejected. ${err}`);
};
   }

Это текущий вывод в Blobstorage:

    {
      "id":"UtteranceLog",
      "realId":"UtteranceLog",
      "document":{"UtteranceList":["hello","I need help","hi","find job"],
      "eTag":"\"0x8D42EE3R3C34123\"",
      "turnNumber":null}
   }

Но я хочу вот так:

     {
      "id":"UtteranceLog",
      "realId":"UtteranceLog",
      "document":{"1DDeWoTrvrr4u4Jme6mcLBBo-7":["hello","I need help"],
      "eTag":"\"0x8D42EE3R3C34123\"",
      "turnNumber":null},{"3DTveoTrvcc3u3Jmx3mcLCCT-7":["hi","find job"],
      "eTag":"\"0x8D42EE3R3C34123\"","turnNumber":null}}

Как видите,из текущего примера вывода.Он хранит два разговора в одном списке, но я хочу, чтобы он был в двух списках, как во втором примере.Спасибо!

...