我们使用Microsoft Graph API在Outlook中创建日历
以下是HTTP请求
POST https://graph.microsoft.com/v1.0/users/me/calendars
Content-type: application/json
{
"name": "My Calendar"
}
Run Code Online (Sandbox Code Playgroud)
最近两年来一直在工作。突然它抛出一个错误
{
"error": {
"code": "TargetIdShouldNotBeMeOrWhitespace",
"message": "Id is malformed.",
"innerError": {
"request-id": "78bce863-d6fb-4ea9-b0f8-e5097010cef6",
"date": "2019-03-23T11:54:34"
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我们搜索文档时(https://docs.microsoft.com/zh-cn/graph/api/user-post-calendars?view=graph-rest-1.0)。我们发现API网址已更改
何时推出像这样的重要更新而导致流程中断?
是否有任何官方频道/群组通知这些更改。
邮件API的Microsoft Graph API的类似问题-SendMail http 400-文档中的API网址不起作用
如何使用Microsoft Graph API将 Office365 用户导入/订阅在 iCal 格式的 URL 上托管的日历?例如,假设我有一个托管在https://example.org/events.ical上的日历,并且我希望此日历显示在 Office365 上托管的用户 Outlook 中?
如果我手动执行此操作,我会遵循这些说明。但我找不到执行此操作的图形 API。
执行 AzureAD 身份验证/权限/令牌不是问题,我可以正常工作。只是Office365上的Outlook调用哪个API。
我正在尝试使用 microsoft graph api 作为应用程序访问组日历(我不想使用委托权限)。
如果我使用下面的方法请求日历事件,我就能很好地为用户获取事件。
https://graph.microsoft.com/v1.0/users/[emailAddress]/events
Run Code Online (Sandbox Code Playgroud)
如果我向以下人员提出请求,我会获得组信息:
https://graph.microsoft.com/v1.0/groups/[groupId]/
Run Code Online (Sandbox Code Playgroud)
如果我对此提出请求:
https://graph.microsoft.com/v1.0/groups/[groupId]/events
Run Code Online (Sandbox Code Playgroud)
我收到“访问被拒绝。检查凭据并重试。” 在azure门户中,我已向我的应用程序服务授予以下应用程序权限:
Calendars.Read
Calendars.Read.Shared
Group.Read.All
User.Read.All
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
/v1.0/me/calendarview?startdatetime=2019-10-07T12:17:48.964Z&enddatetime=2019-10-14T12:17:48.964Z
在Microsoft Graph中调用时,出现以下错误:
{
"error": {
"code": "ErrorApiQuarantined",
"message": "Request has been quarantined by condition.",
"innerError": {
"request-id": "ca5247f8-b461-4270-89e5-186ed6a3b8fe",
"date": "2019-10-07T12:17:49"
}
}
}
Run Code Online (Sandbox Code Playgroud)
致电时,我也会收到相同的错误/v1.0/me/messages
。看来所有Outlook API都不再起作用。
我正在使用@microsoft/microsoft-graph-client
npm 包与基本 url同步日历事件/me/calendarview/delta
。直到几天前它一直运行良好。出于某种原因,每当我在 Outlook.office.com 中创建新日历事件并且我的应用程序同步时,新创建的日历事件都会@removed: {reason: "deleted"}
设置该字段。
但是,当我使用 Microsoft Graph Explorer 查找同一个日历事件时,同一个事件没有@removed
设置该字段。是否有任何理由让新创建的日历事件看起来像是在同步期间被删除?我正在使用@microsoft/microsoft-graph-client v1.3.0
重建步骤:
/me/calendar/events
/me/calendarview/delta
适当的 deltaLink 和访问令牌获取日历事件的增量。@odata.type
、id
和@removed
。id 字段与步骤 1 中创建的事件的 id 匹配。如果您需要更多信息,请告诉我。这影响了我们的一些用户。
更新:我尝试通过调用我在增量同步中收到的/me/events/<id>
每个@removed
日历条目来验证该事件是否真的被删除来解决此问题。但是,当我通过 microsoft-graph-client 调用该 API 时,它返回 null。如果我通过MSFT Graph Explorer进行相同的 GET 调用,则返回该事件。
microsoft-graph-sdks microsoft-graph-calendar microsoft-graph-api
我目前正在从事 Exchange Online 集成项目,我们使用 Microsoft Graph API 1.0 将用户的日历复制到我们的系统。到目前为止它一直工作正常,但今天我遇到了一个我无法解决的问题:
您如何跟踪重复发生的日历事件的删除情况?
我曾尝试使用“Delta”链接但没有成功。这些请求仅返回系列母版以及所有剩余的事件。
例如第一个请求:
GET /v1.0/users/dc7f4032-5f30-4441-a165-428aed9fb471/calendarview/delta?startdatetime=2019-04-11T00:00:00&enddatetime=2019-04-28T23:59:59
然后我请求 nextLink 以便我获得 deltaLink,然后我请求 deltaLink:
GET /v1.0/users/dc7f4032-5f30-4441-a165-428aed9fb471/calendarview/delta?$deltatoken=uwMsonT1N46Me49CO...(etc.)
Run Code Online (Sandbox Code Playgroud)
然后我得到了回应:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(event)",
"@odata.deltaLink": "https://graph.microsoft.com/v1.0/users/dc7f4032-5f30-4441-a165-428aed9fb471/calendarview/delta?$deltatoken=uwMsonT1N46Me49COq9SDw0t_wB0xaeZEqH3MS63rea577XfZFFdjg0jwU6FzfSp9LnqeqbpBGm2ppJDuDiIP280MEFjk2Q9GYyNNdCAP__CjSKSGFQ9WKmL3TPyFeXhhYE9KgmWHF1cSrx7OYBT7zPrgwY0x5peeyjBEtqkAueuE2Pb8DH4iODU-vAp-lHVOzPmkkjNyef1NTNkgNv-kg.oOHzptXCwEphbnI7YFO7saexZ_c0hZj1a0o4ZjluzUU",
"value": []
}
Run Code Online (Sandbox Code Playgroud)
只要日历中没有任何变化,对 deltaLink 的后续调用将继续返回:"value": []。
然后我删除一个系列中的一个事件,然后再次请求 deltaLink,然后 MS Graph API 只返回 master 以及原始时间跨度内的所有剩余事件,没有任何删除事件的痕迹!
有谁遇到过同样的问题吗?
我正在使用 Microsoft 的 Graph API 和 Node.js 应用程序创建 Outlook 日历事件。以下文档/示例链接:https://learn.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/calendar-rest-operations#CreateEvents
我的代码:
var options = {
method: 'POST',
url: 'https://graph.microsoft.com/v1.0/me/calendar/events',
headers: {
'Authorization': 'Bearer ' + access_token,
'Content-Type': 'application/json'
},
body: {
"subject": "Node.js outlook test",
"body": {
"contentType": "HTML",
"content": "Test event created from node.js"
},
"start": {
"dateTime": "2019-03-25T12:00:00",
"timeZone": "Pacific Standard Time"
},
"end": {
"dateTime": "2019-03-25T14:00:00",
"timeZone": "Pacific Standard Time"
},
"isAllDay": false,
"location": {
"displayName": null
},
"attendees": [{
"emailAddress": {
"address": "my-other-email@gmail.com",
"name": "Adele …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用graph-js-sdk-web.js
我相信我完全按照说明将文本文件附加到 Outlook 中的现有事件,但我得到了422
响应。我如何让它附加文件?
我很确定我eventID
是正确的,因为我可以创建一个事件并通过该 ID 获取它。我很确定我的文件的后加载是正确的,因为我自己附加了文件,然后通过扩展附件的 id 获取了该事件,并且它是相同的 OData 类型、名称和内容。
到目前为止,我在 google 上搜索了响应,我所看到的一切要么只对人们有效,要么与该示例相比,他们对代码不感兴趣。
这是我请求的权限
openid profile User.Read MailboxSettings.Read Calendars.ReadWrite
Run Code Online (Sandbox Code Playgroud)
这匹配授予注册应用程序的权限。
这是客户端和文件附件代码:
// Create a Graph client
var client = MicrosoftGraph.Client.init({
authProvider: (done) => {
// Just return the token
done(null, sessionStorage.accessToken);
}
});
client
.api('/me/calendar/events/' + eventID + '/attachments')
.post({
attachment: {
"@odata.type": "#microsoft.graph.fileAttachment",
name: "helloworld.txt",
contentBytes: "SGVsbG8gd29ybGQh"
}
}, (error, response) => {
if (error)
console.log(error);
else {
console.log(response); …
Run Code Online (Sandbox Code Playgroud) 我想通过 Graph API 获取 Outlook 事件列表,并通过在事件正文中搜索某些文本来过滤它们。
我可以像这样按主题过滤:
https://graph.microsoft.com/v1.0/me/calendar/events?$filter=contains(subject,'test')
Run Code Online (Sandbox Code Playgroud)
但如果我用身体尝试这个,它就不起作用了。返回的错误消息要么是“无效的过滤子句”,要么表示发生了内部服务器错误。我知道事件的 body 属性不是字符串类型,但应该可以以某种方式搜索其 content 属性
我已经尝试过以下操作:
https://graph.microsoft.com/v1.0/me/calendar/events?$filter=contains(body,'test')
Run Code Online (Sandbox Code Playgroud)
这将返回“无效的过滤子句”
https://graph.microsoft.com/v1.0/me/calendar/events?$filter=contains(body/content,'test')
Run Code Online (Sandbox Code Playgroud)
返回“发生内部服务器错误”
该删除事件端点偶尔用一用响应412
/ErrorIrresolvableConflict
尝试删除事件时的状态代码。响应中提供的消息是:
无法执行发送或更新操作,因为请求中传递的更改键与项目的当前更改键不匹配。
ErrorIrresolvableConflict的错误描述表明应该:
检索更新的更改密钥并重试。
看一眼事件资源描述,我将其changeKey
视为事件的属性,但删除事件端点文档中没有任何内容表明在删除事件时需要提供 changeKey 或如何执行此操作。
我在 SO 上看到了几个类似的问题,这些问题与发送电子邮件和添加附件有关,但四处搜索对删除日历事件没有任何帮助。
这个错误是暂时发生的,我还没有找到一种方法来始终如一地重现它。似乎与事件是否有附件无关。
在以下请求中观察到此错误:
请求 ID:05cffaf7-c422-4bfd-97ac-6ea6d1036021