why Botkit stores data in json_file_store? - slack

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

Related

Store conversations in order to notify users after a bot restart

I've manage to send notification to Teams users through the Chatbot.
In order to send notification, you need to persist the conversation in order to have a channel to push the message or anything else. The persistence of the conversation are done in memory, so, after i restart the chatbot, i'm not able anymore to notify any user until they come back to chat with the bot and store the conversation again.
It's possible to save the conversation on a storage like CosmosDB or BlobStorage using this library https://github.com/microsoft/botbuilder-js/tree/main/libraries/botbuilder-azure?
What i understand about this library, it has been developed to persist some state of the conversation, not the conversation itself.
Maybe there is another way to retrieve conversations (or create from scratch with some stored data)?
The samples you see online store the data in memory because they are -just- samples, and it's much easier to keep the sample self-contained if it doesn't have a dependency on you setting up a database just to get the sample running.
In the real world the data -must- be kept somewhere else, for all practical purposes, such as Cosmos, Blob or other. In addition, you actually don't need the -entire- conversation reference - see here a more detailed answer I wrote a few months ago with some further references: Sending proactive messages from an outside process to organizational users via Teams chat bot
Also worth noting, the samples and docs show to get the data you need in the conversationUpdate from the user (i.e. when they install your bot), which is definitely easiest, but if you've lost it now (because your bot has reset), you get the same data from the user every time they send a message to your bot - you can save it at that time if you haven't saved it already.

Send Push Notification In Xamarin Forms Without Firebase

I am working in banking sector and we have different portals for managing employee information, performance etc. I want to send push notification in mobile app from our asp.net web service when a new event (e.g. a Line Manager has to approve any pending request) occurs. How can I send notification to mobile app from our servers(where the web service has been deployed)? We don't have rights to place employee data on cloud servers or cloud databases.
Hopefully this is your request:
We don't have rights to place employee data on cloud servers or cloud
databases.
And not this:
Send Push Notification In Xamarin Forms Without Firebase
As they are entirely different. If you want to send data to Android devices you need to use Firebase for that just like you need to use Apple's servers for iOS devices. However you don't need to have any database or store data on them.
You can use PushSharp nuget if you want to minimize 3rd party server usage or some other similar solution.
Just for the record using Firebase (or other services like Azure) to send push notifications doesn't require you to place employee data on cloud servers either. Firebase and other solutions contain range of services that can be used independently and it seems that you consider them as all or nothing solution.

Realtime chatroom - moderation and deleting certain messages - web sockets or REST in AWS?

Best practice for realtime chats seems to be web sockets. But what if I want to have a moderator who can delete certain messages for all users? Especially when all other users don't have to register but only choose name and start chatting. Is this a better job for REST than web sockets? Generally and specifically in implementing using AWS/Node?

Multiple facebook bot with single rasa stack

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.

Does the Microsoft Bot Framework "phone home", or otherwise send data to 3rd parties?

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.

Resources