I'm trying to develop a centralized rasa stack for different Facebook pages. All fb pages are of different schools and all schools are using a same software for storing data which is resides in a server. All schools' data are separated by different mysql database. The bot will be used to fetch data for different schools from the respective school's fb page. All the conversation flow will be same, just the db will be different according to the schools. I'm new to rasa. Is there any way to connect all the fb bot to a single rasa stack and differentiate the db according to fb bots when performing the data retrieval from db in custom actions? Any help will be highly appreciated.
Unfortunately this is currently not possible. You can have only one of each output channel. This mean, you would currently need to deploy one Core instance per facebook channel.
I added an issue for that to Rasa Core since I think this would be a cool feature for Rasa Core.
Related
I have a Text2SQL model (EditSQL: https://github.com/ryanzhumich/editsql) which I have configured to take a sentence as input and return a SQL query as output.
Now, I want to deploy this program as a chat bot application in Microsoft Teams.
I understand there's Microsoft bot framework that enables publishing a bot and the 3 options are described here.
https://learn.microsoft.com/en-us/learn/modules/choose-bot-building-tool/
However, I am not finding any of them suitable for my use case since I need to deploy a Question-Answering Bot where the Questions from users need to be sent to an external server like AWS and the response from AWS (could be an excel file) needs to be sent back to the user. Multiple questions can be the part of a conversation, so the chat client should be able to mark start and end of a conversation.
My problem:
What are the basic steps of exposing a ml model via a server so that it can be queried in production.
What are the tools that will allow me to make a client on Teams and a server for this model on AWS?
Please let me know if I should add more information on this.
Thanks
As you've seen, there are a bunch of tools/approaches to creating bots in the Microsoft world, for Teams or otherwise. Underneath, these all use the Bot Framework, but you can develop directly (i.e. write code), or use a higher-level tool like Bot Framework Composer - the choice is yours depending on your own internal skills. If you want to work with code directly, here are a bunch of bot samples, in multiple languages: https://github.com/microsoft/BotBuilder-Samples/tree/main/samples . For isntance, here is an example of integrating the Microsoft QnAMaker service into your bot: https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/python/49.qnamaker-all-features
Basically, if you go the development approach, your bot is just a web service. Once it receives the message, it can call out to any other service behind the scenes. That means it can receive a message, call out to an AWS service, receive the response, and send a reply to the user.
For multiple questions as part of a 'set' of chats, Bot Framework provides an idea called "dialogs" that should work for you.
So, we are trying to implement slack integration with our product, botkit uses json_file_store to store channel, team, user related information, why does botkit stores such data? Is there way to avoid storing such data on production environment? or should I use any other slack bot client?
You can read more about how and why Botkit stores data here:
https://botkit.ai/docs/storage.html
Youll want to use at least the simple storage to keep track of things like team/user/channel id in slack, especially if the bot is to be installed or interact with multiple teams or users. This data does not persist like using a dedicated storage connector, and if you are worried about data leakage you can use the Events API in concert with Botkit middleware to limit the data that is sent to the app too and from slack.
https://botkit.ai/docs/readme-pipeline.html
I am going to do my next project on ChatBot for my client. I am a .net person, so planning to use MS Bot with C#.
My question is on creating the Database part. We have a existing Database which has data related to Project Management and others which is currently being used for a web application.
What we are expecting from the Bot is, if a person(say, a manager of particular project)wants to know the count of people under him, he can use the Bot to get the count, rather than go to the web application and figure out.
How will this database work for Bot application.
How will I create the table structure to identify the questions to be asked to BOT and its responses and fetch data and then display to user.
How can we make my Bot fetch data from this DB, if someone asks question.
How can I store these responses.
I am totally confused. My Client do not want to use LUIS, but want similar thing to be built with our Database and can be called via RestAPI.
Kindly help with any article or advise to start my work with.
Consider the bot you made as a back-end server written in C#.
It just gets requests and sends responses.
So nothing special is needed for connecting it to DB.
Simply connect it to DB as you'd connect a ASP.NET website to DB.
So let's say I make a bot and place it in my ASP.NET MVC project. When the user queries the bot, and the bot replies to the user, is any data sent to Microsoft, or other third-parties?
Data goes to the channel you're using; so if you use the Facebook Messenger channel, Slack channel, or another 3rd party (non-MS) channel, data is going to Facebook, or Slack, etc.
CLARIFICATION EDIT: When you use the Bot Connector Service, i.e. when you register a bot at dev.botframework.com and enable any of the channels there, your conversation data will go to Microsoft. Addresing your original question directly; yes, data is sent "home". However, if you use a 3rd party channel, the data is just translated by Microsoft into the channel-specific format, sent to the 3rd party and NOT stored by Microsoft. What the 3rd party does with that data, e.g. use it for mining, store it indefinitely, is up to them.
As indicated below, using Microsoft channels will involve the data being handled and stored temporarily by Microsoft.
If you use any of the Cognitive Services, e.g. LUIS, by signing up for the service you've indicated your willingness to allow Microsoft to retain the data indefinitely and use it for various pursuits, one of them being to improve their products and services. I highly recommend visiting this page and reading through it.
EDIT: LUIS doesn't store the application data for improving its services, the data is stored for use by the developers to improve their own specific models.
EDIT: LUIS also allows developers to add "&log=false" to their endpoint and it will disable logging of data.
When using MS channels like Web Chat, DirectLine and Bing channels, data is retained and the content encrypted for up to 24 hours. This is for queuing and dispatching the messages on these channels.
When you move from dev to production and change from using the Bot State Service to your own storage service, you control the State data. All data on the Bot State Service is encrypted. That said; we encourage developers to move over to their own state service as soon as possible. This can be done by using BotBuilder-Azure which has examples on how to use Table and DocumentDB to manage state as opposed to using the Bot State Service.
Within the Bot Framework itself, conversation data is not used for mining or improving models or anything in the Bot Framework.
I am looking for some recommendations on a good data store for activity feeds. The goal is to have a Twitter/Facebook type feed log consisting of various activities users can do throughout our website. The "wall" or "feed" would updated via AJAX showing what the users of the website are currently doing. It will be written to often and then the most recent will be displayed on the site.
(e.g. John Smith recommended Jane Smith's article 2 seconds ago)
We currently are storing the feeds in MySQL but performance has been poor and I'm concerned with hindering performance throughout the rest of the website if we are constantly hitting the database to grab the most recent user activity as well as writing the feeds.
Any recommendations would be greatly appreciated!
Make use of the best caching solutions like memcache to increase performance. Other than scaling, there are no performance-increasing possibilities for an activity feed.
I would vote for using http://redis.io/ or http://www.mongodb.org/ as an alternative to MySQL for short-term, almost live activity feeds across a site. And a cron job to dump history of activities into MySQL for record keeping.
A look at tumblr's or twitters architectures can push you to the right direction as well.
You should take the microservices approach to separate between the datastore that stores the users' actions to the one that store the actual data.
Pub/Sub is the right approach to handle the big stream of users' actions.
Use Kafka or Google Pub/Sub cloud service for a scalable data pipeline. They can take the load with its scalable architecture.
Independently consume the messages from Kafka to some database such as MySQL or Google BigQuery for analytics purposes you must have.