Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

You can use the Hook events if you have reusable functions in your conversation flow.

...

Setting up Hook Event

  1. In Experience Designer, design a flow as shown.

  2. The Hook-Data function node contains the below code to enable the hook to fire the custom logic based on the Custom Control Name.

    Code Block
    try {
        const _ = global.get('lodash');
            controlId = msg.payload.session.attributes.orbitaSession.flowInfo.controlId,
            controlName = msg.payload.session.attributes.orbitaSession.flowInfo.controlName,
            hookName = controlName.indexOf(":") > - 1 ? controlName.substr(0, controlName.indexOf(":")) : controlName,
            args = controlName.indexOf(":") > -1 ?
                [msg,
                 ...controlName.substr(controlName.indexOf(":") + 1).split("|")
                    .map(arg => arg.trim())
                    .filter(arg => !!arg)
                    .map(arg => arg === "null" ? null : arg)] :
                [msg];
        msg.payload.externalHook = {
            data: hookName
        }
        if (hookName) {
            const hook = global.get("hooks")[hookName];
    
            msg.hookResult = {
                hookFound: !!hook
            };
            
            
            if (hook) {
                hook.apply(null, args);
            } else {
                msg.hookResult.executionSuccess = false;
                msg.hookResult.error = `Could not find hook '${hookName}'`;
            
                node.warn(`Could not find hook '${hookName}'`);
            
                return msg;
            }
        }
        
    } catch (error) {
        msg.hookResult.executionSuccess = false;
        msg.hookResult.error = error;
        
        node.warn(`Error executing hook`);
        node.error(error);
        
        return msg;
    }

  3. To set up the Hook Events, you need to initialize the hooks. The Settings / Hooks Initialize function node is used to register the hook condition so that the Hook-Data function knows what to do with it.

    Code Block
    const settings = global.get("settings") || {};
    settings.emptyString = '';
    global.set("settings", settings);
    
    const hooks = global.get("hooks");
    global.set("hooks", hooks || {});
    
    return msg;

  4. You will register your Hook Event with an Inject node. All the Inject nodes in this flow have the same configuration.

  5. When the Custom control named HTMLDirective gets called in Flow studio, the function node named HTML form Hook will be called.

    Code Block
    global.get("hooks").HTMLDirective = msg => {
        node.send(msg);
    };

  6. The next function node calls the HTML form and it is subsequently connected back to the Flow Manager node to continue the conversation flow.

...