Problem Description: In this blog I would be going over various options to build a web UI for IBCS chat bot.
By default IBCS provides two sdks to build web UI for Chatbot. We can download those sdks from
http://www.oracle.com/technetwork/topics/cloud/downloads/mobile-suite-3636471.html under heading Bots Client SDK
We can follow link https://docs.oracle.com/en/cloud/paas/mobile-suite/use-chatbot/bot-channels.html#GUID-A0A40E26-54BA-4EDD-A4C5-95D498D6CF61 to find out how to use these SDKs.
Widget is very cool and rich but still at times you want to build your own custom UI instead of widget. To do that you can follow
https://docs.oracle.com/en/cloud/paas/mobile-suite/use-chatbot/bot-channels.html#GUID-78F6DD7E-5085-476B-AD03-1318D9107D39
In this blog I am trying to enhance that code to handle postback requests. Also this blog will help me in my next blog to achieve voice based conversation.
1. Add below code in html
HTML:
<div id="no-display" style="display:none;"></div>
<p>User ID: <span id="user-id"></span></p>
<ul id="conversation"></ul>
<input type="text" id="text-input" placeholder="text">
<script src="js/app.js"></script>
2. Add app.js inside js directory. It can have following code
!function(e,t,n,r){
function s(){try{var e;if((e="string"==typeof this.response?JSON.parse(this.response):this.response).url){var n=t.getElementsByTagName("script")[0],r=t.createElement("script");r.async=!0,r.src=e.url,n.parentNode.insertBefore(r,n)}}catch(e){}}var o,p,a,i=[],c=[];e[n]={init:function(){o=arguments;var e={then:function(t){return c.push({type:"t",next:t}),e},catch:function(t){return c.push({type:"c",next:t}),e}};return e},on:function(){i.push(arguments)},render:function(){p=arguments},destroy:function(){a=arguments}},e.__onWebMessengerHostReady__=function(t){if(delete e.__onWebMessengerHostReady__,e[n]=t,o)for(var r=t.init.apply(t,o),s=0;s<c.length;s++){var u=c[s];r="t"===u.type?r.then(u.next):r.catch(u.next)}p&&t.render.apply(t,p),a&&t.destroy.apply(t,a);for(s=0;s<i.length;s++)t.on.apply(t,i[s])};var u=new XMLHttpRequest;u.addEventListener("load",s),u.open("GET",r+"/loader.json",!0),u.responseType="json",u.send()
}(window,document,"Bots", "<Your-Bot-sdk-url>");
var appId = '<Your app id>';
Bots.init({
appId: appId, embedded: true
}).then(function (res){
console.log("init complete");
});
Bots.render(document.getElementById('no-display'));
var inputElement = document.getElementById('text-input');
inputElement.onkeyup = function(e) {
if (e.key === 'Enter') {
var totalMsg = Bots.getConversation().messages.length;
if(Bots.getConversation().messages[totalMsg-1] && Bots.getConversation().messages[totalMsg-1].actions){
var actions = Bots.getConversation().messages[totalMsg-1].actions.filter(function(action){
return action.text === inputElement.value; //Improve it by performing case insensitive matching
})
if(actions){
Bots.triggerPostback(actions[0]._id).then(function() {
inputElement.value = '';
});
}
}
else{
Bots.sendMessage(inputElement.value).then(function() {
inputElement.value = '';
});
}
}
}
function displayUserMessage(message) {
console.log(message);
var conversationElement = document.getElementById('conversation');
var messageElement = document.createElement('li');
messageElement.innerText = message.name + ' says "' + message.text + '"';
conversationElement.appendChild(messageElement);
}
function createButtonElement(action) {
var btnElement = document.createElement('button');
var btnTitle = document.createTextNode(action.text);
btnElement.appendChild(btnTitle);
btnElement.onclick = function(e){Bots.triggerPostback(action._id);};
return btnElement;
}
function displayServerMessage(message) {
console.log(message);
var conversationElement = document.getElementById('conversation');
var messageElement = document.createElement('li');
var text = 'Server says "' + message.text + '"';
messageElement.innerText = text;
if(message.actions && message.actions.length > 0){
var wrapperElement = document.createElement('div');
for(var i = 0; i < message.actions.length; i++){
var action = message.actions[i];
var btnElement = createButtonElement(action);
wrapperElement.appendChild(btnElement);
}
messageElement.appendChild(wrapperElement);
isPostBackRequired = true;
lastPostBackServerMsg = message;
}
conversationElement.appendChild(messageElement);
}
// display new messages
Bots.on('message:sent', displayUserMessage);
Bots.on('message:received', displayServerMessage);
NOTE:
1. Bot-sdk-url is url of your sdk directory. If you copy bot-sdk inside js directory as bot-client-sdk-js and server is running on port 8000, your bot-sdk-url would be http://localhost:8000/js/bots-client-sdk-js
2. app-id mentioned in above code is given on channels page of IBCS (once you register a web channel)
3. Input element in which user types message is enhanced to handle postBack message of user.
4. displayUserMessage function adds user typed message in list
5. displayServerMessage function adds server message in list. It also create appropriate buttons if server wants user to select one value.
UI is very crude but it gives you complete control to decorate it.
Now we have a very basic UI ready. My idea is to enhance it further and add voice feature to it in my Next blog.
Thats all in this blog.
By default IBCS provides two sdks to build web UI for Chatbot. We can download those sdks from
http://www.oracle.com/technetwork/topics/cloud/downloads/mobile-suite-3636471.html under heading Bots Client SDK
We can follow link https://docs.oracle.com/en/cloud/paas/mobile-suite/use-chatbot/bot-channels.html#GUID-A0A40E26-54BA-4EDD-A4C5-95D498D6CF61 to find out how to use these SDKs.
Widget is very cool and rich but still at times you want to build your own custom UI instead of widget. To do that you can follow
https://docs.oracle.com/en/cloud/paas/mobile-suite/use-chatbot/bot-channels.html#GUID-78F6DD7E-5085-476B-AD03-1318D9107D39
In this blog I am trying to enhance that code to handle postback requests. Also this blog will help me in my next blog to achieve voice based conversation.
1. Add below code in html
HTML:
<div id="no-display" style="display:none;"></div>
<p>User ID: <span id="user-id"></span></p>
<ul id="conversation"></ul>
<input type="text" id="text-input" placeholder="text">
<script src="js/app.js"></script>
2. Add app.js inside js directory. It can have following code
!function(e,t,n,r){
function s(){try{var e;if((e="string"==typeof this.response?JSON.parse(this.response):this.response).url){var n=t.getElementsByTagName("script")[0],r=t.createElement("script");r.async=!0,r.src=e.url,n.parentNode.insertBefore(r,n)}}catch(e){}}var o,p,a,i=[],c=[];e[n]={init:function(){o=arguments;var e={then:function(t){return c.push({type:"t",next:t}),e},catch:function(t){return c.push({type:"c",next:t}),e}};return e},on:function(){i.push(arguments)},render:function(){p=arguments},destroy:function(){a=arguments}},e.__onWebMessengerHostReady__=function(t){if(delete e.__onWebMessengerHostReady__,e[n]=t,o)for(var r=t.init.apply(t,o),s=0;s<c.length;s++){var u=c[s];r="t"===u.type?r.then(u.next):r.catch(u.next)}p&&t.render.apply(t,p),a&&t.destroy.apply(t,a);for(s=0;s<i.length;s++)t.on.apply(t,i[s])};var u=new XMLHttpRequest;u.addEventListener("load",s),u.open("GET",r+"/loader.json",!0),u.responseType="json",u.send()
}(window,document,"Bots", "<Your-Bot-sdk-url>");
var appId = '<Your app id>';
Bots.init({
appId: appId, embedded: true
}).then(function (res){
console.log("init complete");
});
Bots.render(document.getElementById('no-display'));
var inputElement = document.getElementById('text-input');
inputElement.onkeyup = function(e) {
if (e.key === 'Enter') {
var totalMsg = Bots.getConversation().messages.length;
if(Bots.getConversation().messages[totalMsg-1] && Bots.getConversation().messages[totalMsg-1].actions){
var actions = Bots.getConversation().messages[totalMsg-1].actions.filter(function(action){
return action.text === inputElement.value; //Improve it by performing case insensitive matching
})
if(actions){
Bots.triggerPostback(actions[0]._id).then(function() {
inputElement.value = '';
});
}
}
else{
Bots.sendMessage(inputElement.value).then(function() {
inputElement.value = '';
});
}
}
}
function displayUserMessage(message) {
console.log(message);
var conversationElement = document.getElementById('conversation');
var messageElement = document.createElement('li');
messageElement.innerText = message.name + ' says "' + message.text + '"';
conversationElement.appendChild(messageElement);
}
function createButtonElement(action) {
var btnElement = document.createElement('button');
var btnTitle = document.createTextNode(action.text);
btnElement.appendChild(btnTitle);
btnElement.onclick = function(e){Bots.triggerPostback(action._id);};
return btnElement;
}
function displayServerMessage(message) {
console.log(message);
var conversationElement = document.getElementById('conversation');
var messageElement = document.createElement('li');
var text = 'Server says "' + message.text + '"';
messageElement.innerText = text;
if(message.actions && message.actions.length > 0){
var wrapperElement = document.createElement('div');
for(var i = 0; i < message.actions.length; i++){
var action = message.actions[i];
var btnElement = createButtonElement(action);
wrapperElement.appendChild(btnElement);
}
messageElement.appendChild(wrapperElement);
isPostBackRequired = true;
lastPostBackServerMsg = message;
}
conversationElement.appendChild(messageElement);
}
// display new messages
Bots.on('message:sent', displayUserMessage);
Bots.on('message:received', displayServerMessage);
NOTE:
1. Bot-sdk-url is url of your sdk directory. If you copy bot-sdk inside js directory as bot-client-sdk-js and server is running on port 8000, your bot-sdk-url would be http://localhost:8000/js/bots-client-sdk-js
2. app-id mentioned in above code is given on channels page of IBCS (once you register a web channel)
3. Input element in which user types message is enhanced to handle postBack message of user.
4. displayUserMessage function adds user typed message in list
5. displayServerMessage function adds server message in list. It also create appropriate buttons if server wants user to select one value.
UI is very crude but it gives you complete control to decorate it.
Now we have a very basic UI ready. My idea is to enhance it further and add voice feature to it in my Next blog.
Thats all in this blog.


Do you understand there is a 12 word phrase you can tell your partner... that will trigger deep feelings of love and impulsive appeal to you deep inside his heart?
ReplyDeleteThat's because deep inside these 12 words is a "secret signal" that triggers a man's instinct to love, worship and care for you with all his heart...
12 Words Who Fuel A Man's Desire Instinct
This instinct is so hardwired into a man's mind that it will make him work harder than before to do his best at looking after your relationship.
In fact, triggering this powerful instinct is so important to getting the best possible relationship with your man that the instance you send your man a "Secret Signal"...
...You'll instantly find him open his mind and heart for you in a way he never expressed before and he'll see you as the one and only woman in the galaxy who has ever truly interested him.
This comment has been removed by the author.
ReplyDeleteUncommon tips and clear. This will be to a great degree supportive for me when I get a chance to start my blog. HackingUniversity
ReplyDeleteKumpulan Script Termux
ReplyDeleteNice article. Studying artificial intelligence opens a world of opportunities. Join
ReplyDeleteai training in kolkata
Hello, Such A Nice Article. Great Share. Also, if You Are Looking for sofas reviews and Guides. then you can checkout here.
ReplyDeletehttps://sofareviewsguide.puzl.com/
https://bestkidscouchreviews.blogspot.com/
custom Logo Design services
ReplyDeleteCheck this out how Google Verified Calls beating Truecaller 2020
ReplyDeletevery interesting , good job and thanks for sharing such a good blog.
ReplyDeleteComputer Repair Largo
Nice Article, thanks for this information
ReplyDeleteAlso check this out
Laptops, Mobiles, Games, Tv, Smartwatches etc Daily Tech News Updates.
Best VR Headset For iPhone 7 Plus Try it Now
ReplyDeleteNice Blog. Thanks for sharing this one. It will be helpful for those who are unaware about it. If anyone is looking to build apps with the latest trends & technologies, reach Way2Smile Solutions. Android Application Development Companies in Chennai
ReplyDeletethis blog is very help to me its give me lots of information iam also writing same blog on Salesforce Spring 21 Sp21 Certification Material and exam
ReplyDeleteThanks for sharing this useful information. It will be helpful for the freshers to Learn easily.
ReplyDeleteIf you looking for best iOS app development company, reach out way2smile Best iPhone App Development Company in Chennai
Thanks for updates.
ReplyDeleteivr service provider
toll free number service provider
click2call service provider
International toll free number
virtual number service provider
Outbound Calling Solutions
Minavo Telecom Networks
bulk sms services
very interesting, good job, and thanks for sharing such a good blog.
ReplyDeleteComputer Repair Largo
Very informative, I really enjoyed reading it.
ReplyDeleteTop 10 Cheapest Technologies To Generate Power at Home
Thank you so much for sharing this post .
ReplyDeleteI have gone through your blog and read articles especially technology-related. Your explanation is clear and easy to understand which helps me a lot in my blog writing Mcqs about programming. Thanks
ReplyDeleteThanks for sharing this quality information with us. I really enjoyed reading. Will surely going to share this URL with my friends. Custom Software Development
ReplyDeleteBackups ensure that your critical data will survive any of the likely hazards. Too many individuals and companies have suffered from having their hardware lost or stolen, destroyed by fires or natural disasters, infected with malware or corrupted by targeted hacker attacks. Common sense dictates that all hard drives will eventually fail; the question is whether or not you are prepared for the worst-case scenario.
ReplyDeleteUse hyper-v backup software from Nakivo to secure your data.
Hi-tech Institute is that place in Agra. Where students are being taught repairing courses with the advanced technology of mobile and laptops. Many students have completed their dream today by taking courses from hi-tech institutes.
ReplyDeleteToday the students of Hi-Tech Institute Agra are working as engineering in mobile and laptop companies in big cities.
Hi-Tech institute Agra branch
"Now all the students have the same dream,
By taking admission in Hi-tech institute,
To make your life successful.
Visit at-;
https://www.hitechinstituteagra.com/index.html
Watch latest Technology News in Tech News by KP
ReplyDeleteBusiness are widely using transcription services to keep them organized and make their communication effective. To avail the best transcription services around the globe, click here.
ReplyDeleteCool stuff you have got and you keep update all of us. Office-paket
ReplyDeleteConnect Pandora on Roku
ReplyDeleteSimply, download Pandora on Roku, login to your Pandora account, and activate it by accessing the Pandora.com/roku activation steps. Check steps
Nice blog! The blog is very informative, I enjoyed reading something that is new to me.We offer you good condition bikes that are suitable on the rash roads of mountains. Read our blogs all about Manali.
ReplyDeleteBike on rent in Manali
Bike Rentals in Manali
Thank you so much for perfect blog hope to see this amazing blogs in coming cays custom android app development
ReplyDeleteIf you are looking for Ticket traffic in USA. mytikkit is an app that provides the best services and manages all your records in a single app.
ReplyDeleteYour content writing is so nyc thanku admin for this valuable work.
ReplyDeleteRead More About Technology and Computer
Hey Nice article
ReplyDeleteBook publishing in India
Hey Nice article
Book Publisher in india Hey Nice article
self publishing in India
Hey Nice article
Delhi Book Fair
Hey Nice article
odisha book fair 2022
Hey Nice article
kolkata Book Fair
Hey Nice article
jaipur literature book fair 2022
Hey Nice article
chennai book fair 2022
Innovation the secrets of innovation and Technology blog on BloggersMap. Our expertly curated content delves into the realms of emerging tech, AI, and beyond. Join the BloggersMap community and be at the forefront of the next wave of technological advancements.
ReplyDeleteInformative article. Thank you so much for sharing. Get to know about Bitwissend, web development company kerala.
ReplyDeleteThank you so much for sharing this article. Get to know about AK Smartshala, best play school in ghaziabad. Download colouring worksheets for toddlers from AK Smartshala Worksheets.
ReplyDeleteThat’s Iversær. A strange, slippery syllable tearing through TikTok like a digital wildfire. It’s not in the dictionary. It’s not in your textbook. Heck, it might not even be real. And that’s why it owns your feed.
ReplyDeleteEnter Legal Tech—a disruptive force shattering centuries-old traditions. Imagine artificial intelligence parsing precedent in seconds, blockchain contracts that self-execute without a single pen stroke, or law firms with no office address—existing entirely online.
ReplyDeleteThis article on tech tips and tricks is really helpful. The steps are simple and easy to follow, which makes it perfect for beginners.
ReplyDeleteNice explanation of custom UI in Oracle Bot Cloud (IBCS). A well-designed interface really improves user experience and engagement. A Custom AI Hardware Design Agency can support this by creating optimized hardware that ensures smooth performance, faster response, and better integration for advanced AI-driven interfaces.
ReplyDelete