使用Microsoft的EWS创建在线Lync / Skype会议

时间:2017-06-12 15:20:50

标签: c# outlook exchangewebservices skype lync

有人知道如何使用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);
    }

我获得了具有正确bool值的属性IsOnlineMeeting(已测试 -  在变量activeResults中创建了与Outlook的在线和定期会议,但我不知道在何处获得加入会议所需的会议链接和其他Lync / Skype属性。

此外,我不确定在何处以及如何分配Lync / Skype会议URL和其他属性的值。

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

2 个答案:

答案 0 :(得分:0)

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

  1. 下载程序link
  2. 构建并运行它
  3. 会话 - 登录 - 选择您的邮件配置文件 - 选择邮箱并双击
  4. 操作 - 打开特殊文件夹 - 日历 - 双击日历
  5. 使用在线S4B / Lync会议打开该项目
  6. UC *属性是我正在寻找的属性。
  7. 如果您打开该属性,您可以在顶部看到类似的内容:

    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. 访问Value
    2. ExtendedProperties
    3. 致电TryGetProperty
    4. 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)属性。

答案 1 :(得分:0)

好吧,我只设置了一个扩展属性就设法使它工作了(差不多!):

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

我之所以说这几乎是因为约会在Outlook中打开时看起来并不完全像Skype会议:没有页脚将加入链接和电话号码等。 也许还有其他差异,但是现在我们在Skype for business中使用“加入”按钮可以看到它,并且在Outlook提醒中也可以通过“加入”按钮看到它。 解决方法是,我们必须对约会的正文内容进行硬编码。 会议ID也可以使用UCWA 2.0(https://docs.microsoft.com/en-us/skype-sdk/ucwa/myonlinemeetings_ref

获取。

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