Freddy Self-service allows you to use Javascript (JS) functions when you want to perform a set of actions if these actions aren’t available by default. Let's take the example of a simple JS function:


print: function (a, b, c) {        
console.log("print called: a:" + a + " b: " + b + " c: " +c);           
}

Configuration in the widget script

You'll first have to configure the JS code into the widget script. To get the bot widget script

  • Login to your Freddy Self-service account as an Admin or Owner and navigate to the bot of your choice


  • Click on Generate script from the menu to see the code on the right


  • Copy-paste this code onto a script editor so that you can include your script inside this code


 You are allowed to write any function as a logic into this script.


  • Include your custom JS function after the getClientParams function is defined. For this example, let's take the print function that we showed earlier and define it within our widget bot script. Below you can see the bot widget script generated, and we included (and highlighted) the JS code for the print function.



Once you define this function in the bot script, you can call it anywhere in the bot flow.


Configuration inside Admin Portal

  • Click on Flows > Configure > API Libary > Add new button


  • Provide a (1) Name for the JS Function. This is just for your reference. 


  • In the (2) URL / JS function name field, enter the function's name. This should be the same name that you defined in the bot widget script. In our example, it is "print". Remember that the function name is case sensitive.

  • Set the method type to (3) JS Function and the (4) Payload type as JSON.

  • Enter the argument values you need to pass in the (4) Payload content as JSON single line values. These argument values can also be dynamic. Use the + button to include dynamic values.
     
  • In the (6) Add the required response parameters field, you can pass your success and failure response parameters. The bot will pass the input to the script after making the function call. When the function executes, it will expect a response parameter. You can pass these response parameters from the script to the bot based on the action's result.



You can call the response value from here in other parts of the bot flow. For example, suppose you're setting up the customer input as a message or a question. In that case, you can insert content from APIs, or in this case, insert the result of the JS function (success or failure response parameter).


Configuring the dialogs


Now that the function has been defined, we can call the function from anywhere in the bot flow. To call the function, you'll need to set up an action in the dialog for the bot to trigger the function.


  • Open the dialog where you need to run the function > new Action > Trigger JS function > select the API that you just configured.



Keep in mind that if you're using a client-side action to call the JS function, you'll have to get the user input as a text field. This is to denote that the function is returning a response. 


Some use cases

  • If you have a phone number that your customer needs to call, for example, a toll-free phone number, you can have a button that says "call us", which your customer can tap or click. This can trigger the JS function, which in turn will populate the default phone dialler with your toll-free number. In this case, for Android devices, the WebView should have permission to access the dialler. The phone dialler permission should be allowed at the manifest file level.

  • If you've deployed the bot on your mobile app and want to take your customer to a specific page on your app, you can do so using a deep link in the app.

  • Suppose you don't have an API, but you want to communicate with your app, which has a connection with the server, even after the bot flow initializes. In that case, you can use custom JS functions to interact with the app and fetch information.

  • Any standard functions that can be written as a JS function (like math functions)


Please write to [email protected] if you have any more questions. We'll be happy to help you.