fredsco
fredsco

Reputation: 333

Possibility to send context data to dialogflow without webhook being called from Dialogflow, but from server itself

Currently I have a webhook which is being called from Dialogflow (fulfillment) and checks which intent is currently applicable. (I do everything via JSON) once I know which Intent, I send back (via the webhook) a JSON response. I was wondering if it is possible to initiate a JSON object and send it to Dialogflow. (I want to send context without letting the user type first and Dialogflow receiving a fallback) (NodeJS Server -> Dialogflow) Currently the only way I can do it is (Dialogflow -> NodeJS Server (JSON object with contex) -> Dialogflow)

CURRENT:

var dialog_flow = {
    // Create context using Google dialogflow
    createContext: async function(projectId, sessionId, contextId, parameters, lifespanCount){ 

        console.log("params to be sent: ", parameters);

        //Instantiates client to create the actual context before sending
        const contextsClient = new dialogflow.ContextsClient({
            keyFilename: './dialogflow_credentials.json'
        });

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

        const createContextRequest = {
            parent: sessionPath,
            context: {
                name: contextPath,
                lifespanCount: lifespanCount,
                parameters: parameters
            },
        };

        const response = await contextsClient.createContext(createContextRequest);
        console.log(`Created ${response[0].name}`);
    }

};

PARAMETERS:

let testobj = {
    firstname: 'test name',
    lastname: 'itworks!!',
    dd: 'fgfgf',
    ff: 'fgfg'
}

Upvotes: 1

Views: 917

Answers (1)

Marcos Casagrande
Marcos Casagrande

Reputation: 40434

You can call directly Dialogflow from Node.js, without the need of receiving a webhook. For that you will need to use the dialogflow package.

const sessionClient = new dialogflow.SessionsClient();

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

const request = {
    session,
    queryInput: {
        text: {
            text: 'Some text'
        }
    },
    queryParams: {
       contexts: [context] // here you send the data
    }
};

sessionClient.detectIntent(request)
   .then(console.log)
   .catch(console.error);

In order to send a context, with data, you will need to use dialogflow.ContextsClient

I give a detailed explanation about that in these other questions:

And in order to authenticate the client you can check:

UPDATE: 2 weeks ago, Dialogflow, removed the structjson.js sample from the repository, but in favor of an npm package to handle the encoding/decoding of the protobuf struct: pb-util

Upvotes: 3

Related Questions