Skip to main content

Detect User Language : Oracle Bots

Oracle Bot comes with a very sophisticated language detection and translation service. You can attach either a Microsoft or Google service to the environment and make use of it within your bot. Oracle Bots dev guide talks about it :

But, these translation services are not free. So for my development purposes I created a custom component, which does the same for me but for FREE.

Introducing Yandex APIs ( It is simple and easy to use. And most importantly it is free.
Yandex supports over 90 different languages. The only thing you need to do is, register and create an API key for yourself.

Step 1:
Register and create an API key :

Step 2:
Download the custom component from my GitHub :

Step 3:
Update the "detect_language.js" and add your key to the detectLanguage() function.

Step 4:
Update "registry.js" to add this new custom component.
'DetectLanguage': require('./detect_language/detect_language')

Step 5:
Add a string variable in the dialog flow, named "detectedLocale".

detectedLocale: "string"

Then update the dialog flow to use this custom component, followed by a "Switch" component in order to decide what to do once you detected the language.

  component: "DetectLanguage"
  component: "System.Switch"
    variable: detectedLocale
 - "en"
 - "nl"
      en: <ENGLISH_STATE>
      nl: <DUTCH_STATE>

 You can use as many as transitions you want in your switch. In the above example I just did two.

Once this is done, test your bot.

That's it!.

Happy "Bot"-ing. :)


Post a Comment

Popular posts from this blog

ADF Utility : Find UIComponent from Managed Bean

Many a times, it is required to find an UIComponent from ADF managed bean, to do something with it, for example : change the value of an af:outputText, change readOnly property of an af:inputText etc.

private UIComponent getUIComponent(String id) { 

        FacesContext facesCtx = FacesContext.getCurrentInstance(); 
        return findComponent(facesCtx.getViewRoot(), id);

    private UIComponent findComponent(UIComponent base, String id) {

        if (id.equals(base.getId())) {
            return base;

        UIComponent children = null;
        UIComponent result = null;
        Iterator childrens = base.getFacetsAndChildren();
        while (childrens.hasNext() && (result == null)) {
            children = (UIComponent);
            if (id.equals(children.getId())) {
                result = children;
            result = findComponent(children, id);
            if (result != null) {

Secure your Node/Express REST APIs using Passport JS

Recently I have been involved in various discussions on how to make the REST APIs as secure as SOAP.
First of all, let me start with a very basic statement, about security, it doesn't depend on your Webservice type, be it REST or SOAP, your design decisions depicts whether they can be made secure or not.
In this example blog, I will use "Micro CRUD services for Oracle Database Cloud" APIs and implement (read attach) Passport's "local" authentication strategy, to make them secure.

Code in Github : LeasifyAPIs with Passport

What is Passport JS? (from Documentation)

Passport is authentication middleware for Node. It is designed to serve a singular purpose: authenticate requests. When writing modules, encapsulation is a virtue, so Passport delegates all other functionality to the application. This separation of concerns keeps code clean and maintainable, and makes Passport extremely easy to integrate into an application.

What are "strategies" in P…

Exception Handling in ADF

This blog will give you an overview on how you can successfully deal with unhandled Runtime exceptions in an ADF application.

This will give you an idea of:
How to catch the unhandled exceptions.Write a separate log file with stacktrace and thread dumps.Redirect the user to an static error page
#1. Catch unhandled exceptions : 

Create a class "MyExceptionHandler" which extends : Override handleException() method.

public void handleException(FacesContext facesContext, Throwable throwable, PhaseId phaseId) throws Throwable {
        // this method is going to create a separate file with stacktrace and thread dumps
        // redirect to error page

 Create a folder "services" inside : ViewController\src\META-INF and then create a file named "".
In the file, add the absolute name of your custom e…