web-dev-qa-db-fra.com

Envoyer les paramètres au webhook sur dialogflow sdk v2

J'essaie d'envoyer certains paramètres à dialogflow (api.ai) tels que le nom d'utilisateur, l'e-mail, etc., mais je n'ai pas pu le comprendre. Le problème est que je ne peux pas obtenir/définir des données spécifiques (telles que le nom d'utilisateur, l'e-mail, etc.) avec Dialogflow v2 Nodejs SDK. J'ai essayé d'utiliser queryParams.payload (v1: originalRequest) mais cela n'a pas fonctionné. De plus, j'ai essayé de déclencher événement personnalisé avec des données mais je n'ai pas pu obtenir de données d'événement sur la réponse. Est-ce que quelqu'un sait comment envoyer des données spécifiques pour une conversation de session sur dialogFlow?

EXEMPLE DE CHARGE PAYABLE

  const projectId = 'test-bot-test-1111';
  const sessionId = user.uuid;
  const languageCode = 'en-GB';

  const sessionClient = new dialogFlow.SessionsClient();
  const sessionPath = sessionClient.sessionPath(projectId, sessionId);

  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        text: query,
        languageCode
      }
    },
    queryParams: {
      payload: {
        data: {
           username: 'bob',
           email: '[email protected]'
        }
      }
    }
  };

  let resultReq;

  console.log('request :: ', request, '\n\n');

  try {
    resultReq = await sessionClient.detectIntent(request);
  } catch (err) {
    // eslint-disable-next-line no-console
    return console.error('ERROR:', err);
  }

EXEMPLE D'ÉVÉNEMENT

  const projectId = 'test-bot-test-1111';
  const sessionId = user.uuid;
  const languageCode = 'en-GB';

  const sessionClient = new dialogFlow.SessionsClient();
  const sessionPath = sessionClient.sessionPath(projectId, sessionId);

const request = {
    session: sessionPath,
    queryInput: {
      event: {
        name: 'custom_event',
        languageCode,
        parameters: {
          name: 'sam',
          user_name: 'sam',
          a: 'saaaa'
        }
      }
    },
    queryParams: {
      payload: {
        data: user
      }
    }
  };

  let resultReq;

  console.log('request :: ', request, '\n\n');

  try {
    resultReq = await sessionClient.detectIntent(request);
  } catch (err) {
    // eslint-disable-next-line no-console
    return console.error('ERROR:', err);
  }
18
the_bluescreen

L'API v2 de Dialogflow utilise gRPC et a quelques bizarreries, dont une que vous avez rencontrée. Si vous regardez les exemples de la bibliothèque Node.js, vous pouvez voir comment contourner cela. Vous devrez implémenter une méthode jsonToStructProto pour convertir votre objet JavaScript en proto struct ou simplement copier le structjson.js fichier dans l'échantillon dans ce Gist . Vous trouverez ci-dessous un exemple entièrement fonctionnel utilisant le structjson.js fichier:

// Imports the Dialogflow library
const dialogflow = require('dialogflow');

// Import the JSON to gRPC struct converter
const structjson = require('./structjson.js');

// Instantiates a sessison client
const sessionClient = new dialogflow.SessionsClient();

// The path to identify the agent that owns the created intent.
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

// The text query request.
const request = {
  session: sessionPath,
  queryInput: {
    event: {
      name: eventName,
      parameters: structjson.jsonToStructProto({foo: 'bar'}),
      languageCode: languageCode,
    },
  },
};

sessionClient
  .detectIntent(request)
  .then(responses => {
    console.log('Detected intent');
    logQueryResult(sessionClient, responses[0].queryResult);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });
19
matthewayne