Bot enemies as an use case actor - system

This is so confusing.
I know the actor is an external agent interact with the system.
Bot as we all know is part of a system. On the other hand, they can act as player does.
So can I make a bot as an actor in use case? just like player?
But if so, it contradicts the concept of actor itself..

Yes, a system can be an actor to another system and a bot could be considered a system that operates with a higher degree of autonomy.
For example a web bot (or web crawler) is a semi-autonomous system that makes HTTP requests to another system (e.g. a web server) to fetch HTML pages. In this example a web bot is both an actor and a system in it's own right.
"An actor in the Unified Modeling Language (UML) specifies a role played by a user or any other system that interacts with the subject.
http://en.wikipedia.org/wiki/Actor_%28UML%29

Related

Is it possible to create live chat customer support application with end to end encryption?

There's a bunch of live chat customer support apps like Intercom, etc. that do not have end to end encryption between the customer and the support agent team.
I've researched this topic extensively and understand that there might be problems exchanging the keys between agent team and anonymous visitors on websites with live chat. But can't quite grasp the magnitude of the problem (I'm familiar on high level how this is done in iMessage by Apple).
Since this hasn't been done by any big provider yet, is there's any particular limitation that prevents this from working on this particular problem?
Is it possible (and how hard) to replicate what iMessage is doing in a domain with anonymous users and group chats (where multiple agent must be able to see messages from multiple anonymous users and other agents)

How to manage in RASA an unique user_id for many channels in parallel?

I have to design an e-learning tutorbot that has multiple possible channels living in parallel:
A live chat (to support learner with FAQ when browsing the e-learning application website)
A IM chat as Telegram (for asyncronous notifications)
An email (for anything else)
...
Take a part the connectors gateway communication logics.
My problem/question is mainly about how to manage user identification.
I want that a user is identified with an unique identifier (call it conversation_id) regardless of channel.
In the mentioned scenario user has one different ID for each channel:
An account_id on the website (e.g. solyarisoftware)
A chat_id on Telegram (e.g. 1234567890)
An email_address (e.g. giorgio.robino#blabla.com)
So, how to let RASA chatbot accept requests coming from the same user (but from different channels)? In other words, how can I map multiple channel IDs into a RASA unique ID, say the conversation_id ?
At the end of the day I need to generate a lookup table that map a UUID with all channel ids. Right?
But is not clear to me what's a good (simple) user experience. At first glance seems to me that that I need a sort of login/registration flow: each time user submit a request on channel X, only for the first time, the user must identify himself somewhere (with his email/account_id?). So by example trough Telegram, when the Telegram connector server receive a /start command, the bot must ask the user email(or account_id), to be able to associate 1-to-1 the TG chat_id with that email. Not perfect in terms of security, I admit.
Any experience/idea/suggestion?
Thanks/giorgio
I don't have an hands-on experience on this but it is something I have been thinking myself for a while.
Indeed the 'merge' of the different accounts (across channels) is something that we need to maintain ourselves, making sure each channel user ID is eventually mapped to a universal user ID (lookup table makes sense to me).
Since you have a website, an email address and multiple channels I would say the assumption is that users first registered on the web site. Each user has a unique email address and obtains an account secured by username/password, as well as a unique secret token.
When chatting on browser (ie Rasa WebChat) you can initialise the plugin with custom parameters (ie userId=1 or token=X), in this case the chat session is assigned to the given user id.
When using Telegram (or other messenger application) I would (at the very first access) ask the user if he/she has already registered. If yes then I would ask the token: this can be used to perform the map and link this Telegram user to the universal user Id. Same approach for other channels.
Depending on your needs you might need to deal with anonymous access (users don't provide the token) or maybe you want to provide a different token for each channel (more secure, but requires more work and an easy way to explain this to users).
Finally something to look at (I haven't tried myself) is the possibility to provide in the web site the option to open Telegram (or others) passing an extra parameter, which would allow you to perform the mapping. I don't know if this is possible, but it would simplify this process for your end users. Or the other way around: the users in Telegram could be provided with a link which opens the website, where they can login and be recognised.

Customer Service scenario with MS Teams using Microsoft Chatbot in SDK v4 and .NET Core 2.2

I am working on a chatbot with LUIS and QnA Maker that works in a customer service scenario with MS Teams as the platform which the customer service is going to use. I am thinking of having the bot as a 1:1 chat for every customer service agent in MS Teams. Whenever a user wants to talk to a customer service agent by typing "i want to talk to a customer service agent" or similar, the bot hands-off to human in MS Teams.
I want to know if having a 1:1 chat in every customer service agent teams is a good idea or should I create Teams and channels under it with every new conversation. This scenario seems limiting to me as bot might hit the channels limit and every conversation is open to everyone who is a part of that team.
Plus, is scenario one plausible, where every agent has a chatbot in their MS Team and the chatbot routes the conversation from user to agent(whoever is free)?
Can the bot keep conversation state and know how to route message to the right agent and user?
Thoughts and help in the right direction please?
I would recommend looking at #tompaana's Human Handover Sample. His samples implements a middleware that forwards activities between Teams and Slack. It's probably a good place to start.

Callback service on the website using Twilio

Let's say I need to implement a callback service on a website.
I'm curious if it's possible to develop it using Twilio.
For example, if a website visitor provides his mobile phone number from one side, from another side I have a manager using his web CRM application. Is it possible to:
Make a call (using WebRTC?) to a manager
When the manager replies the incoming call, call to the website visitor (on his mobile phone)
Connect both sides together
I know there are lots of ready-to-use callback services, I'm just curious how it works under the hood.
Twilio developer evangelist here.
This is a feature we call Click to Call. Here's how it would work with Twilio:
The visitor provides his number through a form on the site
Generate a call to the manager using the Twilio REST API
When the call connects to the manager, dial the visitor.
This is achieved using TwiML
Whent the call connects, Twilio makes an HTTP request to a URL you provide in step 2
That URL needs to respond with TwiML, which is a subset of XML to tell Twilio what to do with the call
In this case the TwiML would be to <Dial> the visitors number
When the visitor answers the two are connected
This is a high level view of it, we also have a tutorial walking you through Click to Call with Twilio (this is the Python version, but there are others available too) which I recommend you take a look at.
Let me know if this helps at all.

Unable to get presence for people outside user's organisation in Skype for Business Web SDK

We are using the Skype for Business Web SDK in our application to show the presence of contacts.
When the contact is someone inside the user's organisation (and therefore the same AD instance as the user), we register a callback function on the contact's status onChange event and this works well.
However, when the contact is outside the user's organisation (and therefore a different AD instance to the user), we find that the contact's status onChange event never fires and so there is no way to know their status.
The code we are using is as follows:
skypeContactService.subscribeToStatusChange = function (contact) {
contact.status.changed(function (status) {
...
});
contact.status.subscribe();
};
I wouldn't have thought this is a deliberate security measure, because in Outlook Online's Skype for Business functionality you are able to see the presence of external contacts.
So perhaps this is a bug in the Skype for Business Web SDK? Or perhaps it is functionality that hasn't been implemented yet?
Would someone from Microsoft be able to clarify whether there is a plan to enable getting presence for contacts outside of the user's organisation?
Any help would be greatly appreciated!
Federation should be required to see presence and do conversation related activities like IM, Audio, Video. I am not an expert on this side of Skype/Lync, but I would suggest looking over the Federation Documentation as I would argue you have no link to the external users, so you would not be able to see that information.
To solve your exact problem you would need to have federation with any organization that you want to be able to see presence or start conversations.
It could be that they are federated with your organization so they can see your presence information or if they are hosted online (O365), it may be there are alternate APIs that expose presence information without being federated. Are they able to start an IM or A/V conversation with any of your users (it should fail because your side is not federated)?