使用 Microsoft 的 EWS 创建联机 Lync / Skype 会议



>有人知道如何使用EWS创建在线会议(Lync/Skype)的会议请求吗?

因此,我的方法是首先通过 Outlook 创建联机和定期会议,然后模拟具有相同属性的事件创建。

这是我用于获取会议的代码片段(calendarView已经初始化了开始日期、结束日期等):

ExtendedPropertyDefinition extendedOnlineMeetingProperty =
new ExtendedPropertyDefinition(new Guid("{00062008-0000-0000-c000-000000000046}"), 34112,
MapiPropertyType.Integer);
var properties = new PropertySet(
ItemSchema.Id,
AppointmentSchema.ICalUid,
ItemSchema.Subject,
AppointmentSchema.Start,
AppointmentSchema.End,
AppointmentSchema.Organizer,
AppointmentSchema.Location,
AppointmentSchema.LegacyFreeBusyStatus,
AppointmentSchema.IsCancelled,
AppointmentSchema.ICalRecurrenceId,
AppointmentSchema.MyResponseType, // Mandatory Meeting.MyResponseType can be retrieved without a search in the participant list
ItemSchema.LastModifiedTime,
AppointmentSchema.IsOnlineMeeting,
AppointmentSchema.IsMeeting,
ItemSchema.DisplayTo) { };
properties.Add(extendedOnlineMeetingProperty);

var activeResults = service.FindAppointments(WellKnownFolderName.Calendar, calendarView).ToList();
if (activeResults.Count > 0)
{
service.LoadPropertiesForItems(activeResults, properties);
}

我得到了具有正确布尔值的属性IsOnlineMeeting(测试- 使用Outlook创建了在线和定期会议),activeResults但我不知道在哪里可以获得会议链接和加入会议所需的其他Lync/Skype属性。

我也不确定在哪里以及如何分配 Lync/Skype 会议 URL 和其他属性的值。

有时我会问自己,开发一些基于 MS 产品的应用程序是否值得,因为它们的文档很糟糕。

经过一周的诅咒MS,我找到了解决方案。使用 MFCMAPI 工具,可以检查邮箱中的项目具有的属性及其值。

  1. 下载程序链接
  2. 构建并运行它
  3. 会话 - 登录 - 选择
  4. 您的邮件配置文件 - 选择邮箱并双击
  5. 操作 - 打开特殊文件夹 - 日历 - 双击日历
  6. 通过联机 S4B/Lync 会议打开项目
  7. UC* 属性是我一直在寻找的属性。

如果您打开该属性,您可以在顶部看到类似以下内容:

ag: 0x8096001E
Type: PT_STRING8
DASL: http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/UCMeetingSetting
Named Prop Name: UCMeetingSetting
Named Prop Guid: {00020329-0000-0000-C000-000000000046} = PS_PUBLIC_STRINGS

所以我对扩展属性的定义是错误的。它不仅是一个属性,但实际上你需要所有7个属性。

所以定义应该是:

private static ExtendedPropertyDefinition CreateOnlineMeetingProperty()
{
ExtendedPropertyDefinition extendedUCMeetingSetting =
new ExtendedPropertyDefinition(new Guid("{00020329-0000-0000-C000-000000000046}"), "UCMeetingSetting",
MapiPropertyType.String);
return extendedUCMeetingSetting;
}

使用正确的扩展定义,您可以轻松地从项目中获取值。

  1. 访问ExtendedPropertiesValue
  2. 呼叫TryGetProperty
var activeResults = service.FindAppointments(new
FolderId(WellKnownFolderName.Calendar, resource.Email),calendarView).ToList();
service.LoadPropertiesForItems(activeResults, properties);
foreach (Appointment result in activeResults)
{
// 1.
var b = result.ExtendedProperties[1].Value;
// 2.
string UCMeetingSetting;
result.TryGetProperty(extendedUCMeetingSetting, out UCMeetingSetting);
}

上述步骤,您可以获取所需的任何扩展属性,而不仅仅是统一通信 (UC) 属性。

好的,我设法通过仅设置扩展属性之一来使其工作(几乎!

appointment.SetExtendedProperty(
new ExtendedPropertyDefinition(
new Guid("00020329-0000-0000-C000-000000000046"),
"OnlineMeetingExternalLink",
MapiPropertyType.String
),
skypeMeeting.JoinUrl
);

我说几乎是因为当您在Outlook中打开约会时,约会看起来与Skype会议不完全相同:没有页脚,加入链接和电话号码等。 也许还有其他差异,但现在我们在Skype for Business中看到它与"加入"按钮,并且我们还在带有"加入"按钮的Outlook提醒中看到它。 作为一种解决方法,我们必须对约会的正文内容进行硬编码。 也可以使用UCWA 2.0(https://learn.microsoft.com/en-us/skype-sdk/ucwa/myonlinemeetings_ref)获取会议ID。

我们使用 UCWA 2.0 创建 Skype 电话会议并将其附加到 EWS 约会对象。

最新更新