Teams Deeplink - hyperlink in message - microsoft-teams

I am trying to send messages to Teams (chat with user) via deeplink. I succeeded at first, like a year ago. Without a change in my code, it suddenly stopped working. The link gets pasted as simple text without highlighting and it’s annoying.
I tried
[link name](link) and link name syntax (encoded or raw), but nothing helps.
Is there a way to paste hyperlinks to Teams via deeplink, that will be active?
I use return $"{openIn}l/chat/0/0?users={emails}&message={System.Web.HttpUtility.UrlEncode("test [test](https://adaptivecards.io) test")}"; for preparing link.
so result url looks like this
http://teams.microsoft.com/l/chat/0/0?users=aaa#bbb.com&message=test+%5btest%5d(https%3a%2f%2fadaptivecards.io)++test
Teams in compose box just shows link that is not clickable/transformed.
Teams compose box

Deeplink:-
https://teams.microsoft.com/l/chat/0/0?users=ABC#xyz.com&topicName=TestChat&message=Hello
Microsoft Teams Version 1.5.00.8170 (64-bit).
please change the user ID as per your tenant.
Ref.Doc:-https://learn.microsoft.com/en-us/microsoftteams/platform/concepts/build-and-test/deep-links#deep-linking-to-a-chat

Related

Microsoft Teams Deep Linking failing for Video and Audio calls

I'm writing a react webapp that exposes AD-Online contacts and provides the ability to deep link chat, audio, and video calls in the Teams application. I have written the following function (based on the MS documentation) to provide the url for the deep link.
const teamsDeepLink = (user, type) =>
`https://teams.microsoft.com/l/${type === "chat" ? "chat" : "call"}/0/0?users=${user}${type === "video" ? "&withvideo=true" : ""}`;
The output of this looks something like this:
Chat
https://teams.microsoft.com/l/chat/0/0?users=<user's email>
Audio
https://teams.microsoft.com/l/call/0/0?users=<user's email>
Video
https://teams.microsoft.com/l/call/0/0?users=<user's email>&withvideo=true
This works ok for chat, but fails with a There is a problem with the link message for audio and video links. Has anyone got this working and how?
I have researched this as thoroughly as I can. I have found a related but different SO question relating to bots, but I'm a step further on from that -- I have the URL from the documentation but I'm getting an unexpected error.
When we tried to repro this at our end, it worked fine on Microsoft Teams desktop but faced an issue on the Teams web application (as you mentioned).
For that, we have raised a bug and the concerned team is looking into it. We will get back to you once we have an update.

Google Drive API Console: Error saving Drive UI integration page

I have a webapp in production that interacts with Google Drive through Google Drive API.
I need to change some settings in Drive interaction but I can't save.
When I save the Drive UI integration page, I receive this error:
There's a problem at our end.
Please try again. If the problem persists, please let us know using
the "Send feedback" link below. Thanks!
(spying Network console: there is an Internal Server Error in a POST call)
I tried to send feedback for months: nobody answers and the bug is still there.
I tried also to create another project: I can save the first time but then the bug returns.
How can I do? Has someone the same problem?
Is there a way to receive a reply from Google? Is there some workaround?
Thank you.
i think that problem must be Client ID
before adding Client ID, go to the Credentials -> OAuth 2.0 Client IDs
then select edit your Client ID. after that your production site url add to Authorized JavaScript origins and Authorized redirect URIs.
then enter your Client ID in Drive UI integration page
For myself trying to get the Drive UI configured I noticed a couple of errors (that don't have any specific error messages)
When adding in an Open URL it has to be a valid domain, so for instance I tried to test it out with local host, to no avail. However something like https://devbox.app.com worked, but something like https://localhost:8888 does not. Even though https://localhost is a valid javascript origin in the client_id configuration (at least for the app I am working on, not sure about other apps), localhost doesn't work as an open URL.
When adding in the mimeTypes it needs to be in the format */* and can include custom mimeTypes like application/custom+xml and application/custom-name+json not sure for other custom types that are not in a particular format like xml or json. Also not sure about wildcards.
When adding in file extensions do not add in the '.' just the name of the file extension.
The app icon I found only failed to upload the image when the image wasn't the exact dimensions, I actually ended up editing some icons in photoshop to change the pixel x pixel values as a quick work around during dev.
That worked for me to get it to save and I tested it with a file that had a custom mimeType (application/custom-name+xml specifically) and custom file extension!

Google picker does not work without filter being applied for some users

we have an integrated with google picker(read-only scope,Docs view) it use to work fine but recently some users are getting blank screens as soon as the pop up shows but when they select some filter everything starts working fine after that no problems.
using developer tools i see all apis returning 200 for that first request
but there were no docs in response(i believe this is the api responsible for bringing docs in picker 'https://docs.google.com/picker/pvr')
when there are no docs returned in above api google is calling another api i assume it is to log error's probably(//docs.google.com/picker/ohnoes)
this api has following error params in it
&error=Cached and requested query mismatch
&line=Not available
&viewToken=["all",null,{"query":null}]
&ms=97
&transferDocs=false
&numErrors=1
has anybody else faced the similar problem
what do error "Cached and requested query mismatch" means in context of drive docs
Fyi - most accounts facing this problem seems like are of company domain for ex "jondoe#company.org"(this is a google account with company domain)
Filters Image
Thanks for your help.
not sure but looks like issue was may be related to google bug
https://issuetracker.google.com/issues/64825685
for me the code that was not working was:
addView(google.picker.ViewId.DOCS)
replaced this code with below code which works as expected
var view = new google.picker.DocsView();
view.setIncludeFolders(true).setOwnedByMe(true).setParent('root');
addView(view).

Luis Error: An item with the same key has already been added

My Luis bot app was working fine when I tested in the 2nd week of March 2017. Testing includes -
1) using Luis end point start with "https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/........." in browser and Luis.ai
2) using visual studio code where I provided the LuisDialog with LuisModel attribute having app id and subscription key.
When I today tried to test it again, it is working fine in browser and Luis.ai using luis end point but in NOT in visual studio.Please refer the screenshot. Every time it is giving "An item with the same key has already been added".
I checked the LUIS : An item with the same key has already been added but did not get answer.
I tried to integrate this luis bot app with Azure Bot service. Same error is there also -
"2017-03-12T12:27:17.657 Exception while executing function: Functions.messages. mscorlib: An item with the same key has already been added."
Please help.
Thanks,
Sarnendu
I was keep trying to solve my issue for couple of days to run bot service in azure. Finally I am able to run.
Mainly 2 issues were there -
One is wrong Luis API Host Name in Azure Portal
Another is wrong attribute in Intent.
Correcting the Luis API Host Name-
In Azure portal, I have updated the Luis API End Point to westus.api.cognitive.microsoft.com from api.projectoxford.ai.
Steps to follow - go to 'All Resources' and click on the bot. Now go to Setting Tab and click of Application Setting button. Please refer below screenshot.
Now update the LuisAPI end point key in yellow highlighted area as shown below-
Updating Luis API Host Name
After updating this setting, my bot was not working and throwing same error.
Correcting the Wrong Attribute in Intent :
Later I checked LuisDialog.csx,
[LuisIntent("")] atrtibute was present in one of the Intents other than None Intent. Here [LuisIntent("")] was given in BookHoliday Intent.
Please refer below screenshot -
Wrong attribute in Intent
Both [LuisIntent("")] and [LuisIntent("None")] can be used for None Intent.
I removed [LuisIntent("")] from BookHoliday Intent, it works fine.
It was copy-paste error, I copied None intent and modified None to BookHoliday but did not removed the [LuisIntent("")].
"An item with the same key has already been added"- this issue may also be raised if &q appears more than 1 time in query string as part of Luis App Endpoint url.
Regarding code run issue in visual studio, it looks like VS was not updated. It works after updating.

Gmail contextual gadget

I guess question one is - is it actually possible to create a contextual gadget for gmail right now?
I have spent the last 2 days solid reading the (very out of date) documentation backwards and forwards, and every forum post I could find on the topic. I have tried everything I and see nothing, not even a hint of an error message that might point me in the right direction.
These are the steps I have been following, starting at the start, and going step by step when logged into my google apps domain as admin.
1) In google drive, created a new TestGadget.xml file, shared it publicly across the whole web and copied the contents of the Hello World example code from here https://developers.google.com/gmail/contextual_gadgets into it.
2) In https://console.developers.google.com deleted the previous attempts and created a new project and named it.
3) Once project was created, went to API's (6 were already enabled, have also tried with them removed), clicked Google Apps Marketplace SDK and enabled it.
4) Once enabled, went to API Configuration for Google Apps Marketplace SDK, and go to original console.
now in the apis console -
5) Clicked API Access, then clicked the big blue "Create an OAuth 2.0 client ID"
6) Gave it a name (used the same name as the project, not sure if that matters?) then next, and created clientID settings for both Web Application and Service Account (not really sure what a contextual gadget needs).
7) Went to Google Apps Marketplace SDK options.
Added a description
Added 4 icons
Cleared the checkbox for "Allow individual install"
Added a URL (http://www.google.com) for the TOS just to keep it happy
8) In the extensions section, checked the Universal Navigation Extension, and again pointed it at www.google.com (have to have either this or the drive extension, but neither make sense for a contextual gadget?!)
9) Enabled COB extension.
Extractor URL - google.com:HelloWorld
Gadget URL - https://drive.google.com/file/d/0B9LL5RYGoC4GUUFFU1FtOXpWSms
Param Name - hello (have tried #hello, and other combination too just incase)
Param Value - .*
Scopes - Mail - Subject line, Mail - Message Body
and Saved changes. In other attempts I have tried different extractors from the documentation, and changed the gadget code to match, using the param name specified there e.g google.com:EmailBodyExtractor with email_body and always .* for the value
10) Click Test installation flow , get the grants page appear, agree to conditions, turn ON for my domain, and accept. Then click next next next thru the next bit agreeing to send notifications out.
11) Went to https://admin.google.com/AdminHome?fral=1#AppsList:serviceType=MARKETPLACE , and the app was listed there. Checked the settings, and Data access was granted, and it was ON for everyone.
12) Sent myself an email from a different account sprinkled liberally with 'hello world' in the subject and body.
13) Logged into gmail with https://mail.google.com/mail/u/0/?nogadgetcache=1
... and nothing
14) Bang head against wall. HARD !
15) repeat last 2 steps with a non admin user - still nothing (and no notification of the app either)
16) return to wall . . . . .
What am I missing?
Finally got it working.
The problem was hosting/linking to the gadget on google drive.
With the exact example above, I ftp'd the gadget to my website and linked to it there, and it all started working.
This however is a really annoying way to work, and I have seen a lot of other examples that claimed to use a document on google drive, so is there a proper way to use google drive to host a gadget during development?

Resources