Skip to content

Triggering Webchat Plugins

Description

Many Plugins, for example, those who use a string as the match value) will only be triggered whenever a message contains specific data.

As an example, let's imagine we have a plugin that displays images in the chat, taking the url from the message's data. The match field is set to inline-image and it reads the image url from message.data._plugin.url. In order to trigger the plugin, we would need to send a message with the data field set up like this:

{
  "_plugin": {
    "type": "inline-image",
    "url": "https://placekitten.com/256/256"
  }
}

When the webchat receives this message, it will trigger the inline-image-plugin because of message.data._plugin.type === 'inline-image'. The plugin itself then reads the url from message.data._plugin.url.

Usage within regular Flow Nodes

Using regular Flow Nodes (such as the Say Node), you can make use of the data field in order to append a data payload to a message. The Data Field will help you with syntax highlighting to prevent structural errors.

Usage within Code Nodes

If you prefer using a Code Node to send a message, you can pass the structured data payload as a second parameter to the actions.output method.

Usage within Extensions

To get the best user experience for the editors of a Conversational AI, you can build a customized Extension that sends a message triggering the webchat plugin, abstracting away everything but the required parameters.

Custom Module Example

/**
 * Sends an Image to the user via webchat
 * @arg {CognigyScript} `url` The url of the image
 */
const sendInlineImage = async (input, args) => {
    const { url } = args;

    // if no url is set
    if (!url) {
        // do nothing
        return input;
    }

    // send a message that triggers the 'inline-image' plugin with a url
    input.actions.output('', {
        _plugin: {
            type: "inline-image",
            url: "https://placekitten.com/256/256"
        }
    });


    return input;
}