How to send message to any Facebook Pages with a bot? - botframework

I have created Facebook Messenger bots to answer to people talking to my Facebook Pages with a wrapper of Microsoft Bot Framework.
When a human talk to my bot it has a recipient address (composed of multiple fields) used to reply.
Now I'd like my bot to talk to other Facebook page (like a human using a Messenger client)
Questions:
How can I find the "chat" address of a random user that do not already talk to my page/bot ? (It seems a same user has different address when it talk to multiple bots).
How can I use my bot to send messages to other's Facebook Page. To do that I assume the bot has to discover the recipient address of the human or bot behind that page ?
(May be the answer is to use an implementation of a Messenger Client in NodeJS ?)

For Facebook Messenger:
User "chat address", that is to say "Id" property of your Recipient, depends on every bot and cannot be guessed (it is a Page Scoped ID), you have to talk to the bot first. It's a question of security / anti-spam
Same problem to start a conversation with another page: you cannot guess the ID of the human/bot to which you will be talking to.
So currently it is not possible to do what you are trying to do.
Maybe you should have a look directly to Facebook APIs to see if you can at least do your 2nd point. For the 1st one, I found no way

Related

Possibility of using specific Teams features in a custom web chat app

Our internal employees are all using Teams. I'm researching how feasible it would be to use certain features of Teams for a custom web chat app. The actual back and forth conversation would not take place in Teams...it would be something I would build, possibly using SignalR.
The custom web chat application should allow our customers the ability to:
See the Teams status of an employee (Online/Offline)
Click on the employee to enter a chat room. (This chat room would be something I would create, possibly using SignalR)
I was wondering if it is possible to do the following with Teams:
Get the Online/Offline status of a user in Teams and display that in a custom web app.
Send data to a specific Teams user from a web app. (For example: when a customer clicks on an employee in the custom web app to start a chat, send a link to the employee that would send them to the chat room.)
Are these two things possible using Teams?
Wow, this is an unusual scenario, had to think a bit about that! In terms of (1) I'm not sure about anything for that it Teams (it might exist, but not something I'm aware of), but perhaps the Microsoft Graph has a capability for that. This might help.
Regarding item 2, do the customers have Teams? If so, you can deep link directly into a chat with the specific employee. If not, are you wanting the end user to use, say, a bot on the web app, but the employee to be using Teams? If so, who would they be "Chatting" to? Would it be ok for the chat to be with a custom bot inside Teams? If so, you should look more at the concept of "Pro-active chat" in Teams (to initiate the new/latest conversation from the bot to the user). The only drawback is if they are "chatting" to multiple people at once this wouldn't work, because each customer's interaction would come in to the same chat window in the Bot.

Sharing same conversation with multiple bots

Question: How to have multiple bots supplying answers to the same Teams chat window a user has with an aggregator bot.
Description:
Several different teams have created bots that can answer questions related to their areas. Picture a services bot, a catalog bot, etc. All of these bots are maintained by their individual area owners, have their own sets of LUIS intents, etc. That works great, but you have to know where to look for each type of question.
Now we'd like to have a single bot for anyone to connect to, to get their questions answered no matter what area the question falls into. The idea is that this aggregator bot would then forward the questions to the appropriate area bot, which would then provide the answer. The scenario here is that someone troubleshooting an issue could ask questions crossing multiple areas in the same place without having to know about each individual area's bot.
The bots are currently hosted in Teams and are C#. So far, our solution has this flow:
Aggregator bot receives the question and asks each bot (through another endpoint specific to this flow) how confident it is that it can answer the question.
Aggregator bot decides which bot(s) to ask the question to, and sends the question off to the regular /api/messages endpoint for the bot.
[Broken] Area bot posts the answer/ auth prompt if needed/ or the start of a conversation to clarify the eventual answer.
We found the bot-to-bot handoff project, but in the readme.MD, it says:
Note: The main bot and each of the sub-bots share the same AppID and
AppPassword. This allows all the bots to share the same conversation
ID, Dialog
Stack,
and Bot State
Data.
This is not possible in Azure, because you can't create multiple bots with the same AppId.
Trying a hack based on that, we found that if we change the bot configuration to use the same MicrosoftAppId and MicrosoftAppPassword in the Application Settings in Azure for all the bots, then everything works fine through the aggregator bot. At that point, you can no longer connect directly to the individual bots anymore. While that is clearly a hack and not a solution, it implies that the problem is authentication based and not something that is implicitly impossible.
There are lots of pieces around that seem like they might help, but we haven't found the documentation to fit them together. This seems like something that should be a common scenario. Ideally we could specify some kind of bot trust at a higher level and not have to specify AppId and AppPassword directly, though we're willing to do that in this case since we're all the same company.
Things we've tried:
Using TrustServiceUrl to trust the aggregator bot from each area
bot, and all the area bots from the aggregator bot. The call was
made in Application_Start in Global.asax for each bot.
The hack described above
Specifying AppId and AppPassword in the BotAuthentication attribute
Number 3 actually solved the auth problem for letting the aggregator bot ask each bot for it's confidence in answering the question when we used it to tag those functions. Specifying the AppId and AppPassword for the aggregator bot in the specification for that endpoint in the individual area bots worked great. But it didn't fix the ability for the individual area bot to post back to the conversation owned by the aggregator bot. In that case, the aggregator bot itself is consuming the answer, and it is an answer and not a flow.
What do we try from here? Is there something we've missed, or is there something fundamentally wrong with the approach we've started with?

Skype Bots - Please tell me I'm missing something

Working on an application and developing chat integration bot. Note that contrary to some news bots or other tools, there is no central website or server that the bot gets its data from. The software installation comes with a repository, and that is where the bot connects to. Thus, every user, upon installing the software, will basically get their own copy of the bot, alongside with their own repository, etc.
Now, having done that for Telegram: You open the telegram client, initiate a chat with the botfather, get the token for your new bot with one or two commands, and then add that token to my application. Done. Easy for the user to follow, takes a few minutes at most and they have a working bot.
Trying to do the same with Skype, the users must:
Sign up for an Azure account
Provide credit card and phone number verification (that's probably where some users will stop right away)
Log on to the Azure Portal
Create a bot channel, through a myriad of different screens I have to guide the user through.
Have the user obtain the bot's password, again through a variety of different screens he needs to be guided through. (if the user hasn't given up yet, at this point he'll definitely get grumpy)
Enable the Skype channel, and enable the bot to be added to group chats.
Attempt to locate the bot via Skype and eventually add it in.
Now, if I wanted to document this properly, this will be a 10-15 page document with tons of screenshots and all. To do what Telegram does in two minutes or even less. There's so many opportunities in all of this for something to go wrong, that I can't even consider forcing my users to go through this.
Surely, I must be missing something? It can't be that you have to go through this horrible mess of an over-engineering spectacle that is second to none, just to get the most basic bot to function?
All I need is a means to say "this is the bots name, give me its token and API URL so that it can send messages using the REST API". But I can't seem to find this for Skype.

Passing an external user ID through MS Bot Framework

I am working on a Skype bot, using Microsoft's Bot Framework.
I have an external website, where a user can create an account, obtaining a userID. I would like to have a button on my website that allows me to link their account to a Skype conversation.
The only way I can work it at the moment is by having the Skype bot ask for the user's email, then the user has to go onto the website and confirm that that was them on Skype. Not a good UX.
I know Telegram lets you do what I want with "deep linking", and Kik can do it by scanning QR codes. Facebook Messenger can do it by including the Facebook JSSDK in the page with a "Connect to this bot" button.
Is there any way to do this on Skype?
Use the "Sign-in Card" workflow to have your users authenticate with your website before proceeding with the Skype bot conversation.
The Sign-in card enables a bot to request that a user sign-in. It typically contains text and one or more buttons that the user can click to initiate the sign-in process.
For documentation and code example, see:
https://learn.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-add-rich-card-attachments#add-a-sign-in-card-to-a-message
Blog article showing sign-in card walk-through:
https://tsmatz.wordpress.com/2016/09/06/microsoft-bot-framework-bot-with-authentication-and-signin-login/
Additional code examples:
.NET SDK - https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/cards-RichCards#sign-in-card
Node.js SDK - https://github.com/Microsoft/BotBuilder-Samples/tree/master/Node/cards-RichCards#sign-in-card
Use individual deep link mechanism for each bot (e.g. telegram) that you wish to implement.
How to setup Telegram webhook the simple way.
Telegram webhook requirement
HOWEVER, it doesn't work on Skype.
Microsoft bot builder deep linking
he only way I can work it at the moment is by having the Skype bot ask for the user's email, then the user has to go onto the website and confirm that that was them on Skype. Not a good UX.
This is the only way so far for Skype.

Using linkedin API, which is the better way of know when was accepted my invitation

Which is the best way of know when was accepted an linkedin invitation using API?
I'm developing a social search web site using linkedin among other social networks.
In my site, any user, can add many linkedin user account to your site account, for then find people from linkedin using Linkedin People Search API (http://developer.linkedin.com/docs/DOC-1191.html)
with the peoples found, i could be to send and invitation or a direct message, depend of the level connection of linkedin account using for that...
Then, using Linkedin API, what is the best way to monitoring when the invitation was accepted?...
Per the documentation, there is no way to directly monitor messages or invitations that you send via the API to another user. So you'll need to come up with some way to monitor this off-line if it is something that you really need. One idea would be to keep track of the ID of the member's you are sending invitations to, and on subsequent (or periodic) calls to the Connections API, you could scan the returned list to see if any of the stored ID's are now connections, and take the appropriate action.
Hope this helps!

Resources