June 16, 2018

Oracle Intelligent Bots: Get the user Geo location from the map

For few use cases like delivering a Pizza, it would be a great user experience to take user's current location directly from a Map instead of asking the user to type his address.

In this post, we will see how to capture the user location from a map in a chatbot developed in Oracle ChatBots.

Oracle bots provide a component "System.CommonResponse" which helps us here to get the location. Below is the snippet to get the location.

----------------------------------------------------------------------------------------------------
 userLocation:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      keepTurn: false
      variable: "loc"
      nlpResultVariable:
      maxPrompts:
      translate:
      metadata:
        responseItems: 
        - type: "text"
          text: "OK.. Please provide your address to deliver the Pizza?"
          iteratorVariable:
          separateBubbles: false
          rendered: 
        globalActions:
        - label: "Send Location"
          type: "location" 
    transitions:
      actions:
        locationReceived: "locMapReceived"
        textReceived: "locTextReceived"

----------------------------------------------------------------------------------------------------

The above code results as below image.
When the user clicks on the "Send Location" button, it will open the map application. The user can select current or any other location and submit. Once the user submits the location, the bot will receive a JSON into the variable assigned for it which is "loc" in the above example and invokes state assigned to the action "locationReceived". The JSON looks like as below. 

{"latitude":17.727758609852,"title":"Learning's Location","url":"<url of the map>","longitude":83.287353515625}

The JSON contains, latitude, longitude, title of the location on the map and the direct url to the selected location.

In the above example we have another action "textReceived" which helps to handle if user inputs text instead of selection on map.

Note: While implementing this, please check if your client application supports this feature and maps. I tested this with FB and Test console.