I'm trying to get Outlook tasks from the Graph API beta (https://graph.microsoft.com/beta/me/outlook/task). It is basically working, but I get no recurrence for tasks in my Outlook.com account. This works fine for my Office 365 account.
Here is an example from Office 365:
"recurrence": {
"pattern": {
"type": "absoluteYearly",
"interval": 1,
"month": 12,
"dayOfMonth": 11,
"firstDayOfWeek": "sunday",
"index": "first"
},
"range": {
"type": "noEnd",
"startDate": "2018-12-11",
"endDate": "0001-01-01",
"recurrenceTimeZone": "UTC",
"numberOfOccurrences": 0
}
}
And here is an example from Outlook.com, where I actually get two instances of the same recurring task, one with dueDateTime in the past and one inte future:
"recurrence": null,
I have also tried this with the Outlook Task REST API (https://outlook.office.com/api/v2.0/me/tasks), which seems to be deprecated, with exactly the same results.
Related
I've built an app for skiers. The first version of it is in the app stores now. I'd like to add another feature, but I'm not sure it's possible. Hopefully someone here will know.
A favourite pastime of skiers before they go on holiday is finding out what the skiing conditions are like at the resort they are about to visit. Luckily people in the resorts regularly make videos describing the conditions (colloquially known as 'snow reports') and upload them to YouTube and TikTok.
My app has sections for hundreds of ski resorts around the world. Accordingly what I'd like to do is automatically search for and pull these 'snow report' videos and put them in my app, sorted by date posted and the resort they pertain to.
An example might make things clearer. Here is a 'snow report' video for the ski resort of Sauze d'Oulx, posted on 3rd Feb 2023: https://www.youtube.com/watch?v=oT2q-Eu_uNU
I'd like to pull this video into the Sauze d'Oulx section of my app, either by utilising words in the title, or by hashtags if the creator attaches any (in this case the relevant hashtags would be #snowreport and #sauzedoulx).
Can this kind of thing be done?
I haven't tried anything yet.
Concerning searching videos based on:
their title, you can use YouTube Data API v3 Search: list endpoint thanks to q filter and Videos: list endpoint with part=snippet.
their hashtags, I recommend you to try out my open-source YouTube operational API. Indeed by fetching https://yt.lemnoslife.com/search?part=snippet&hashtag=YOUR_HASHTAG, you will get the videos you are looking for in items.
With the hashtag snowreport you would get:
{
"kind": "youtube#searchListResponse",
"etag": "NotImplemented",
"nextPageToken": "4qmFsgKhCRIJRkVoYXNodGFnGvwIQ0R4NndBWkRSSGRSUVVKcVRqTTRUSFpzU1cxaGIxVnZXVzVsV0RCNVVGaE1PVGQwWTBkTmNqVndTa2gwY0MxVGJqVm5SVmwzUzJKUmEwOVFVSGRtUzJOQlVtbHRPRXBUWTNWMmJteHFZVmxDUjFCdVUzaFFjVlkwVEdabldHaHBXSFZ4UTNFeFNTMVZjMGM0V1d4Wk4zb3hiMlkyYnpWdVdFRlNhbDl5T0ZSc2JFcEhjbnBaV1VKSFNraEhjVkJ1U3pobGFsTk5hR3BLY1dWSGVuSnZNMXB1VW10Wk5FMTFNalZqTTBvM1NuTjBSMUI2YjJwUFNFbDNaRXhFV2xKcGRsOVFNalZvU3pONFoxWnJXVzEwUkdZeU5HRnNYM1ZIY2tGU2FXODFkbkpqZHpaWVQybG9iMWszY0ZSTWVVNVBNMjUyTkV4SFRXVndjMjlVYVdvNFEydFFRbWxITWxrM1NEaE5ObWwwY2xWQ1IweDFkSG81ZVhsMlMzWmpaWGhwYldwUFgyTTFOa3hYYTAxUlFrZExjVmx3Y0V0MU9HTjFTV3BuUlZrdGRIa3pkWFpNTFRsTFJXdEhUa2RFYUhKbE9YaHZSMFkyZDBWWk1FazJhSGxsTjBNd1kyUTBSMUJEZEY4NFpWTndUa2N6VjNocFZqSmpTM1pmUzJWVE1UWkZRa2RKZGs5clpsZzVaelZsZFVoNGFUUm5kUzAxY2s0Mll6UlRSVmt6VFZORmNtSlhjV3hOVG01SFQxOWlNa2xUVUdoMU4xUlphR3BpYjJWTU1UaE5Tek52YTBsWk5EVlBSSEkyV0UxM2MwUXlRVkpwV1RkUGVteHBTek16TkZOdldYUmZVREp0V25Jd2RWQlhja0ZTYVd0eWNVZFlNa3czVERsWk1FSkhUV0ozYm1GWVRtdGpRMVZMZUdvME5rMDJVbTFPVERkeGFVbFpNemwyYzNkaFdEWnRZV3hwUjAxaWNuaGpZak4zVFVodVJWSnFTR3cyYWpGMldtb3lObnBWV1RsMlpUUTVUSFZMTTB4YWNrZEtabGRmTlRad2RuWnlVa2hTYVVjMVRsQm1NV1EyTmpSVGExbDNURXhVY25WWFNERTBVMFJCVW1vNU4xOWhXbkJhTjNOcFkydENSMG95T1hRNFVEY3hUMGhDWTJocE4zZFBSSFZvTjNwcWVuZEZXVE5mWmtreVRrZERhMjlvVTBkTGJsUTJZVEpoTTJGUWMwTkNhbEowYzB4UWREVkhUelJqVlVKSFNsQXpOMjl5ZVcwMExXWjVVVVZaZGsxSFVXNWFiazF6TFdOMFIwbDZkSEJLUzFaZlMxQXhWRkpxU21sT1psVnVkaTF3TjFWRldYZHphVUY0V2pKQ00xbGpjVWRQUjJOeFNYbzJOelpsUlZGQ2FtVXpkQzFKYmt4VE1UbFFiMEpIUzB0eWJEaFRYM1JpZG14WlFtbFhhUzFUYW0wNWRVWnNTVVZDNmdVUUNncHpibTkzY21Wd2IzSjBFQUFZQVElM0QlM0SaAhRicm93c2UtZmVlZEZFaGFzaHRhZw==",
"items": [
{
"kind": "youtube#searchResult",
"etag": "NotImplemented",
"id": {
"kind": "youtube#video",
"videoId": "R_a5nsD8TQo"
},
"snippet": {
"channelId": "UCPIHD_lP7798nXNM8YQSk9Q",
"title": "M\u00e9ribel Snow Report (11 January 2023)",
"thumbnails": [
{
"url": "https:\/\/i.ytimg.com\/vi\/R_a5nsD8TQo\/hqdefault.jpg?sqp=-oaymwEiCKgBEF5IWvKriqkDFQgBFQAAAAAYASUAAMhCPQCAokN4AQ==&rs=AOn4CLCbHAQMkFAhGqGsnSELZvsOZVoKwA",
"width": 168,
"height": 94
},
...
],
"channelTitle": "Skipedia",
"channelHandle": null,
"timestamp": "4 weeks ago",
"duration": 137,
"views": 1025,
"badges": [],
"channelApproval": null,
"channelThumbnails": [
{
"url": "https:\/\/yt3.ggpht.com\/ytc\/AL5GRJXLZ5UkDlL2HztSvmhRCb-z3Q47dnga4efZQ_BV=s68-c-k-c0x00ffffff-no-rj",
"width": 68,
"height": 68
}
],
"detailedMetadataSnippet": null,
"chapters": []
}
},
...
]
}
Note that my API supports the pagination mechanism à la YouTube Data API v3.
I've created an event on a calendar using Calendar API which in turn in the response, it will give me the link to a Microsoft Team meeting link. This is an example data that I've send when creating the event. Also, I'm calling this API as an App not as a user, so basically all 3 attendees are not part of the AD users.
{
"attendees": [
{
"type": "required",
"emailAddress": {
"address": "attendee1#domain.com",
"name": "Attendee 1"
}
},
{
"type": "required",
"emailAddress": {
"address": "attendee2#domain.com",
"name": "Attendee 2"
}
},
{
"type": "required",
"emailAddress": {
"address": "attendee3#domain.com",
"name": "Attendee 3"
}
}
],
"end": {
"dateTime": "2020-11-13T17:32:39.636Z",
"timeZone": "UTC"
},
"start": {
"dateTime": "2020-11-11T16:32:39.636Z",
"timeZone": "UTC"
},
"subject": "My online meeting",
"isOnlineMeeting": true,
"body": {
"content": "Does this time work for you?",
"contentType": "HTML"
},
"onlineMeetingProvider": "teamsForBusiness",
"allowNewTimeProposals": false
}
In the response, I receive something like this:
...
"onlineMeeting": {
"joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_NzRmMDIwMWEtNGYyZS00MmNkLTk3NTAtOGxxxxkOGQ4ZDUx%40thread.v2/0?context=%7b%22Tid%22%3a%22b82fec80-bee7-401e-xxxx-8a312e0a62d1%22%2c%22Oid%22%3a%22112d58ba-xxxx-47ce-a1a8-3d0abebead18%22%7d"
}
...
My problem right now is none of the attendees can start the meeting. I wonder if there's a way programatically either when I'm creating the event or updating the online meeting, to enable the attendees to bypass the lobby and start the meeting.
According to your parameter, I think you use Calendar event api to create an online meeting.
I also tried this and found that the attendees needs permission to enter the meeting room while the creater can enter directly. I googled and found no graph api could modify this configuration. The only way to make every attendee join the meeting without permission is changing the meeting option as 'everyone can bypass the lobby'
By the way, admin role account can login the Microsoft teams admin center and automatically allow people in your organization bypass the lobby. This document tells the detail.
Actually, I used Fiddler to catch the changing option request and got a url like https://teams.microsoft.com/api/mt/amer/beta/meetings/v1/options/.... and an access token. I can use them to change the option successfully by sending a http post request. All seems the answer will appear but unfortunately after analizing the access token I found the api needs a permission https://api.spaces.skype.com which is not supported by Azure ad.
We have an application for the user to book/Edit/Cancel Room mailbox meeting from the portal.
So the user should be able to create a calendar event in the room mailbox and all participants should receive the meeting invite
Could you please advise What permission is required on Graph API other than "Calendars.ReadWrite"
According to the document about creating an online meeting, I tried to call the api and it worked with Calendars.ReadWrite permission, here's the detail.
Creating an Azure Ad app and add api permission
Get the access token , please note I just set ReadWrite as scope.
Call the api according to the document above and will get success response, you can open outlook and find meeting has created in calendar.
And here is my url and parameter:
Post:https://graph.microsoft.com/v1.0/me/events
Authorization:Bearer <access token>
Prefer:outlook.timezone="Pacific Standard Time"
Content-Type:application/json
body:{
"subject": "Prep for customer meeting",
"body": {
"contentType": "HTML",
"content": "Does this time work for you?"
},
"start": {
"dateTime": "2020-11-20T13:00:00",
"timeZone": "Pacific Standard Time"
},
"end": {
"dateTime": "2020-11-20T14:00:00",
"timeZone": "Pacific Standard Time"
},
"location":{
"displayName":"Cordova conference room"
},
"attendees": [
{
"emailAddress": {
"address":"AdeleV#contoso.OnMicrosoft.com",
"name": "Adele Vance"
},
"type": "required"
}
],
"allowNewTimeProposals": true,
"isOnlineMeeting": true,
"onlineMeetingProvider": "teamsForBusiness"
}
We use MSgraph and EWS API for our products.
When we do changes in our test Microsoft 365 environment (Add/change/delete - roomlists and rooms) we see the changes immediately when testing with EWS Editor.
But it takes up to 48 hours before we se the changes by using MSgraph Explorer.
I would guess that this is not expected behavior?
We understand it might take some time (Up to 30 minutes) but up to 48 hours?
Our test environment is a pure Microsoft 365 tenant (No hybrid)
The MSgraph API calls we test is:
GET /places/microsoft.graph.room and GET /places/microsoft.graph.roomlist
It seems that this issue might have been introduced after our environment was moved to the Norwegian datacenter.
No error messages from MSgraph, all seems normal..
Here is the results from MSgraph when i ask for roomlist:
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#places/microsoft.graph.roomList",
"value": [
{
"id": "32d75744-113e-4bec-91c4-811623d11521",
"displayName": "Test2",
"address": null,
"geoCoordinates": null,
"phone": "",
"emailAddress": "Test2#loop24.no"
},
{
"id": "1d535e8b-c44d-498a-9046-dbbe1ae3be75",
"displayName": "TestList",
"address": null,
"geoCoordinates": null,
"phone": "",
"emailAddress": "testlist#loop24.no"
},
{
"id": "b9ea8bd6-32da-4d6d-b38e-db6c03f4fa54",
"displayName": "RoomList",
"address": null,
"geoCoordinates": null,
"phone": "",
"emailAddress": "roomlist#loop24.no"
Here is the results from EWSEditor (This is correct)
Call Get Roomlist roomlist#loop24.no Roomlist
I'm observing a change in functionality in Microsoft Graph. When requesting a list of drives from a SharePoint site, I used to see a driveItem attribute that no longer seems to be present as of Nov 14.
The site documentation mentions the relationship to the drives collection.
The drive documentation describes the driveType attribute as:
Describes the type of drive represented by this resource. OneDrive personal drives will return personal. OneDrive for Business will return business. SharePoint document libraries will return documentLibrary. Read-only.
Here is an example call:
https://graph.microsoft.com/v1.0/sites/{site-id}/drives
Response:
client-request-id →d822c749-baf6-4857-abd9-6d80f70823d9
request-id →d822c749-baf6-4857-abd9-6d80f70823d9
x-ms-ags-diagnostic →{"ServerInfo":{"DataCenter":"EastUS","Slice":"SliceB","Ring":"NA","ScaleUnit":"003","Host":"AGSFE_IN_28","ADSiteName":"EST"}}
{
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives",
"value": [
{
"createdBy": {
"user": {
"displayName": "System Account"
}
},
"createdDateTime": "2015-05-22T17:21:01Z",
"description": "This system library was created by the PointPublishing feature to store application pages.",
"id": "b!a4YqXM4QKkOPmOj73xfdss5bbYPr7MlFlXKVhtK0Dpjf4OJPyoBFQo2-YK5095t1",
"lastModifiedDateTime": "2015-05-22T17:21:03Z",
"name": "AppPages",
"webUrl": "https://mysharepoint.sharepoint.com/portals/hub/AppPages",
"quota": {
"deleted": 0,
"remaining": 0,
"total": 0,
"used": 0
}
}
<snipped a few values>
]
}
Is the change in functionality I am seeing here by design or non-intended?
Edit: When attempting the call:
https://graph.microsoft.com/v1.0/sites/root/drives?$select=id,driveType,Name
The driveType is returned
{
"#odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives(id,driveType,name)",
"value": [
{
"id": "fakeId",
"name": "Documents",
"driveType": "documentLibrary"
}
]
}
When requesting drives for a site based on the site-id (/sites/{site-id}/drives) we see different attributes returned.
Just closing the loop on this. As Brad mentioned, an issue has been identified. A fix is currently in the pipeline and should be rolling out soon.