Настройка службы проверки на соответствие для сервера сохраняемого чата в Skype для бизнеса Server 2015Configure the Compliance service for Persistent Chat Server in Skype for Business Server 2015

Сводка: Узнайте, как настроить службу соответствия Persistent Chat Server в Скайп для Business Server 2015.Summary: Learn how to configure the Persistent Chat Server Compliance service in Skype for Business Server 2015.

Проверка совместимости сохраняемого чата позволяет администраторам хранить архив сообщений сохраняемого чата и действий в нем.Persistent Chat compliance lets administrators maintain an archive of Persistent Chat messages as well as activities. Служба соответствия записей и архивов данные, связанные с каждой беседы сервера сохраняемого чата, в том числе участника:The Compliance service records and archives data related to each Persistent Chat Server conversation, including when a participant:

  • Операторы комнаты сохраняемого чатаJoins a Persistent Chat room

  • покидает комнату чата;Leaves a chat room

  • публикует сообщение;Posts a message

  • просматривает историю чата;Views chat history

  • отправляет файл;Uploads a file

  • загружает файл.Downloads a file

Эта информация может извлекаться из базы данных проверки совместимости SQL по мере необходимости.This information can be retrieved from the Compliance SQL database as needed.

Настройка службы проверки совместимости с помощью Windows PowerShellConfigure the Compliance service by using Windows PowerShell

Включив службы проверки совместимости с помощью построителя топологий, можно настроить ее путем выполнения командлета Set-CsPersistenChatComplianceConfiguration:After the Compliance service has been enabled by using the Topology Builder, you can configure the service by using the Set-CsPersistenChatComplianceConfiguration cmdlet:

Set-CsPersistentChatComplianceConfiguration [-Identity <XdsIdentity>] <COMMON PARAMETERS>

илиor

Set-CsPersistentChatComplianceConfiguration [-Instance <PSObject>] <COMMON PARAMETERS>

Можно задать следующие параметры.You can set the following parameters:

  • AdapterType - позволяет указать тип адаптера.AdapterType - Lets you specify the adapter type. Адаптер — это продукт сторонних производителей, который преобразует данные в базе данных соответствия требованиям в определенный формат.An adapter is a third-party product that converts the data in the compliance database to a specific format. По умолчанию выполняется XML.XML is the default.

  • OneChatRoomPerOutputFile — этот параметр позволяет указать, что, разделите отчеты должны быть созданы для каждой чат.OneChatRoomPerOutputFile - This parameter lets you specify that separate reports to be created for each chat room.

  • AddChatRoomDetails - при включении этого параметра, этот параметр записывает Дополнительные сведения о каждом комнаты чата в базе данных.AddChatRoomDetails - When enabled, this parameter records additional details about each chat room in the database. Поскольку этот параметр может существенно увеличить размер базы данных, он отключен по умолчанию.Because this setting can greatly increase the size of the database, it is disabled by default.

  • AddUserDetails - при включении этого параметра, этот параметр записывает Дополнительные сведения о каждом пользователе комнаты чата в базе данных.AddUserDetails - When enabled, this parameter records additional details about each chat room user in the database. Поскольку этот параметр может существенно увеличить размер базы данных, он отключен по умолчанию.Because this setting can greatly increase the size of the database, it is disabled by default.

  • Удостоверение — этот параметр позволяет параметров соответствия требованиям для ограничения области для определенного семейства сайтов, включая глобальной, сайта и уровни обслуживания.Identity - This parameter allows compliance settings to be scoped for a particular collection, including the global, site, and service levels. Значение по умолчанию — глобальный уровень.The default is the global level.

  • RunInterval. Этот параметр определяет длительность периода, по истечении которого на сервере создается новый выходной файл проверки совместимости (по умолчанию: 15 минут).RunInterval - This parameter dictates the amount of time before the server creates the next compliance output file (the default is 15 minutes).

Работа с пользовательским адаптером проверки совместимостиUse a customized compliance adapter

Можно написать пользовательский адаптер вместо использования адаптера xmladapter настраиваемым, который устанавливается вместе с сервера сохраняемого чата.You can write a custom adapter instead of using the XmlAdapter that is installed with Persistent Chat Server. Для этого необходимо предоставить сборку .NET Framework, которая содержит общий класс, реализующий интерфейс IComplianceAdapter.To accomplish this, you must provide a .NET Framework assembly that contains a public class that implements the IComplianceAdapter interface. Эта сборка необходимо поместить в папку установки сервера сохраняемого чата каждого сервера в пуле серверов сохраняемого чата.You must place this assembly in the Persistent Chat Server installation folder of each server in your Persistent Chat Server pool. Данные проверки совместимости могут поступать в адаптер с любого сервера проверки совместимости, но на разные экземпляры адаптера с серверов проверки совместимости на поступают повторяющиеся данные.Any one of the Compliance servers can provide compliance data to your adapter, but the compliance servers will not provide duplicate compliance data to multiple instances of your adapter.

Интерфейс определен в сборке Compliance.dll в пространстве имен Microsoft.Rtc.Internal.Chat.Server.Compliance.The interface is defined in the Compliance.dll assembly in the namespace Microsoft.Rtc.Internal.Chat.Server.Compliance. Интерфейс определяет два метода, которые должен реализовать пользовательский адаптер.The interface defines two methods that your custom adapter must implement.

Сервер соответствия Persistent Chat будет вызвать метод следующие при первой загрузке адаптера.The Persistent Chat Compliance server will call the following method when the adapter first loads. AdapterConfig Содержит конфигурацию соответствия Persistent Chat, соответствующий адаптеру соответствия требованиям:The AdapterConfig contains the Persistent Chat compliance configuration that is relevant to the compliance adapter:

void SetConfig(AdapterConfig config)

Соответствия Persistent Chat server вызывает следующий метод через определенные интервалы, поскольку новые данные для перевода.The Persistent Chat Compliance server calls the following method at periodic intervals as long as there is new data to translate. Этот период равен RunInterval как задано в конфигурации соответствия Persistent Chat:This time interval is equal to the RunInterval as set in the Persistent Chat Compliance configuration:

void Translate(ConversationCollection conversations)

ConversationCollection Содержит сведения о беседах, собранные с момента последнего последнем вызове этого метода.The ConversationCollection contains the conversation information that was collected from the last time this method was called.

Настройка файла определения XSLTCustomize the XSLT definition file

Данные проверки совместимости доставляются в формате XML, который можно с применением файла определения XSLT преобразовать в формат, подходящий для конкретной организации. Этот раздел содержит описание файла XML, созданного с помощью службы проверки совместимости. Приведены также примеры файла определения XSLT и выходного файла.The compliance data is delivered as XML, which you can transform into the format that best fits your organization, by using an XSLT definition file. This topic describes the XML file that the Compliance service creates. It also provides samples of XSLT definition and output files.

Форма выходных данныхOutput format

Выходные данные службы проверки совместимости классифицируются по беседе (элемент Conversation) и затем по сообщению (элемент Messages), как показано в следующем примере кода:The Compliance service output is categorized by conversation (the Conversation element) and then by message (the Messages element), as shown in the following code sample:

<?xml version="1.0" encoding="utf-8" ?> 
<Conversations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Conversation>
    <Channel uri="ma-chan://litwareinc.com/300" name="ma-chan://litwareinc.com/300" islogged="" /> 
    <!--FirstMessage goes here --!>
    <Messages> 
      <!—Messages go here--!>
    </Messages>
    <StartTimeUTC since1970="1212610540953" string="2008-06-04T20:15:40.9535482Z" long="633482073409535482" /> 
    <EndTimeUTC since1970="1212610602532" string="2008-06-04T20:16:42.5324614Z" long="633482074025324614" /> 
  </Conversation>
</Conversations>

Элемент Conversation содержит четыре элемента (Channel, FirstMessage, StartTimeUTC и EndTimeUTC). Элемент Channel содержит код URI, назначенный комнате чата, а элемент FirstMessage описывает первое сообщение в элементе Messages. Элементы StartTimeUTC и EndTimeUTC задают время начала и окончания беседы, как показано в следующем примере кода:A Conversation element contains four elements (Channel, FirstMessage, StartTimeUTC, and EndTimeUTC). The Channel element contains the Uniform Resource Identifier (URI) of the chat room, and the FirstMessage element describes the first message in the Messages element. The StartTimeUTC and EndTimeUTC elements provide the start and end times for the conversation, as shown in the following code sample:

<<FirstMessage type="JOIN" content="" id="0">
      <Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" /> 
      <DateTimeUTC since1970="1212610540953" string="2008-06-04T20:15:40.9535482Z" long="633482073409535482" /> 
</FirstMessage>

Элемент Message содержит два элемента (Sender и DateTimeUTC) и три атрибута (Type, Content и ID). Элемент Sender представляет пользователя, отправляющего сообщение, а элемент DateTimeUTC — время возникновения события, как показано в следующем примере кода:A Message element contains two elements (Sender and DateTimeUTC) and three attributes (Type, Content, and ID). The Sender element represents the user who sends the message, and the DateTimeUTC element represents when an event occurs, as shown in the following code sample:

<Message type="JOIN" content="" id="0">
  <Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" /> 
  <DateTimeUTC since1970="1206211842612" string="2008-03-22T18:50:42.6127374Z" long="633418086426127374" /> 
</Message>

В следующей таблице показаны атрибуты сообщений Type, Content и ID.The following table describes the message attributes Type, Content, and ID.

Атрибуты элемента messagesMessages Element Attributes

АтрибутAttribute ОписаниеDescription Необязательный или обязательныйOptional/Required
ТипType
Указывает тип сообщения. Типы сообщений описаны в таблице типов сообщений элемента Message.Specifies the message type. The message types are described in the Message Elements Message Types table.
ОбязательныйRequired
ContentContent
Представляет собой содержимое сообщения. Для сообщений с типом Join или Part этот атрибут не используется.Contains the content of the message. Messages with a Type of Join or Part do not use this attribute.
НеобязательныйOptional
IDID
Указывает уникальный идентификатор содержимого. Этот атрибут используется только с сообщениями, имеющими тип Chat.Specifies the unique ID of the content. This attribute is used only with messages with a Type of Chat.
НеобязательныйOptional

Каждый элемент Sender содержит пять атрибутов: имя пользователя, идентификатор, адрес электронной почты, принадлежность ко внутренним пользователям и URI-код. Эти атрибуты описаны в следующей таблице.Each Sender element contains five attributes: the user name, ID, email, internal, and URI. These attributes are described in the following table.

Атрибуты элемента senderSender Element Attributes

АтрибутAttribute ОписаниеDescription Необязательный или обязательныйOptional/Required
UsernameUsername
Имя отправителя.The name of the sender.
НеобязательныйOptional
IDID
Уникальный идентификатор отправителя.The sender's unique ID.
ОбязательныйRequired
EmailEmail
Адрес электронной почты отправителя.The sender's email address.
НеобязательныйOptional
InternalInternal
Определяет, является ли пользователь внутренним или федеративным. Если задано значение true, пользователь является внутренним.Determines whether the user is an internal user or a federated user. If the value is set to true, the user is internal.
НеобязательныйOptional
UriUri
URI SIP пользователя.The user's SIP URI.
ОбязательноRequired

В следующих примерах показано типы сообщений, которые может содержать элемент сообщения.The following examples show the message types that the Messages element can contain. Здесь также представлен пример использования каждого из элементов.It also provides examples of how each element is used.

Соединение — пользователь присоединяется к комнате чата.Join - A user joins a chat room.

<Message type="JOIN" content="" id="0">
  <Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" /> 
  <DateTimeUTC since1970="1206211842612" string="2008-03-22T18:50:42.6127374Z" long="633418086426127374" /> 
</Message

Часть — пользователь покидает комнату чата.Part - A user leaves a chat room.

<Message type="PART" content="" id="0">
  < Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" /> 
  <DateTimeUTC since1970="1212610602532" string="2008-06-04T20:16:42.5324614Z" long="633482074025324614" /> 
</Message>

Чат - адрес электронной почты отправителя.Chat - The sender's email address.

<Message type="CHAT" content="hello" id="1">
  <Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" /> 
  <DateTimeUTC since1970="1205351800522" string="2008-03-12T19:56:40.522264Z" long="633409486005222640" /> 
</Message>

Ответ на чат - пользователь запрашивает содержимое из истории чата.Backchat - A user requests content from chat history.

<Message type="BACKCHAT" content="backchatcontent" id="0">
  <Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" /> 
  <DateTimeUTC since1970="1206034385284" string="2008-03-20T17:33:05.2841594Z" long="633416311852841594" /> 
</Message>

Отправка файла - пользователь отправляет файл.File upload - A user uploads a file.

<Message type="FILEUPLOAD" content="0988239a-bb66-4616-90a4-b07771a2097c.txt" id="0">
  <Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" /> 
  <DateTimeUTC since1970="1205351828975" string="2008-03-12T19:57:08.9755711Z" long="633409486289755711" /> 
</Message>

Загрузка файла — пользователь загружает файл.File download - A user downloads a file.

<Message type="FILEDOWNLOAD" content="006074ca-24f0-4b35-8bd8-98006a2d1aa8.txt" id="0">
  <Sender UserName="kazuto@litwareinc.com" id="10" email="" internal="true" uri="kazuto@litwareinc.com" /> 
  <DateTimeUTC since1970="1212611141851" string="2008-06-04T20:25:41.8518646Z" long="633482079418518646" /> 
</Message>

По умолчанию выходные данные сохраняемого чата XSD и пример преобразования XSLDefault Persistent Chat Output XSD and Example XSL Transform

Следующий пример кода содержит выходные данные сервера проверки совместимости по умолчанию:The following code sample contains the default output from the Compliance Server:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Conversations" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   <xs:simpleType name="ComplianceMessageType">
      <xs:restriction base="xs:string">
        <xs:enumeration value="JOIN"/>
        <xs:enumeration value="PART"/>
        <xs:enumeration value="CHAT"/>
        <xs:enumeration value="BACKCHAT"/>
        <xs:enumeration value="FILEUPLOAD"/>
        <xs:enumeration value="FILEDOWNLOAD"/>
      </xs:restriction>
    </xs:simpleType>

  <xs:element name="Sender">
    <xs:complexType>
      <xs:attribute name="UserName" type="xs:string" />
      <xs:attribute name="id" type="xs:int" />
      <xs:attribute name="email" type="xs:string" use="optional" />
      <xs:attribute name="internal" type="xs:boolean" use="optional" >
        <xs:annotation><xs:documentation>If the user is internal or federated</xs:documentation></xs:annotation>
      </xs:attribute>
      <xs:attribute name="uri" type="xs:anyURI" use="optional" />
    </xs:complexType>
  </xs:element>
  <xs:element name="DateTimeUTC">
    <xs:complexType>
      <xs:attribute name="since1970" type="xs:long" />
      <xs:attribute name="string" type="xs:string" />
      <xs:attribute name="long" type="xs:long" />
    </xs:complexType>
  </xs:element>
  <xs:element name="Conversations" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="Sender" />
        <xs:element ref="DateTimeUTC" />
        <xs:element name="Conversation">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Channel" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="uri" type="xs:anyURI" />
                  <xs:attribute name="name" type="xs:string" use="optional" />
                </xs:complexType>
              </xs:element>
              <xs:element name="FirstMessage" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element ref="Sender" minOccurs="0" maxOccurs="unbounded" />
                    <xs:element ref="DateTimeUTC" minOccurs="0" maxOccurs="unbounded" />
                  </xs:sequence>
                  <xs:attribute name="type" type="ComplianceMessageType" />
                  <xs:attribute name="content" type="xs:string" />
                  <xs:attribute name="id" type="xs:int" />
                </xs:complexType>
              </xs:element>
              <xs:element name="Messages" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Message" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element ref="Sender" minOccurs="0" maxOccurs="unbounded" />
                          <xs:element ref="DateTimeUTC" minOccurs="0" maxOccurs="unbounded" />
                        </xs:sequence>
                        <xs:attribute name="type" type="ComplianceMessageType" />
                        <xs:attribute name="content" type="xs:string" />
                        <xs:attribute name="id" type="xs:int" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="StartTimeUTC" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="since1970" type="xs:long" />
                  <xs:attribute name="string" type="xs:string" />
                  <xs:attribute name="long" type="xs:long" />
                </xs:complexType>
              </xs:element>
              <xs:element name="EndTimeUTC" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="since1970" type="xs:long" />
                  <xs:attribute name="string" type="xs:string" />
                  <xs:attribute name="long" type="xs:long" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

Следующий образец кода содержит пример преобразования в формат XSL:The following code sample contains a sample XSL transform:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
   <xsl:output method="xml" encoding="UTF-8" indent="yes" />

   <xsl:template match="/">
      <FileDump>
         <xsl:apply-templates />
      </FileDump>
   </xsl:template>

   <xsl:template match="Conversation">
      <xsl:variable name="chanName" select="Channel/@name" />
      <Conversation Perspective="{$chanName}_group_channel">
         <RoomID><xsl:value-of select="Channel/@name" /></RoomID>
         <StartTimeUTC><xsl:value-of select="StartTimeUTC/@since1970" /></StartTimeUTC>
         <xsl:apply-templates />
         <EndTimeUTC><xsl:value-of select="EndTimeUTC/@since1970" /></EndTimeUTC>
      </Conversation>
   </xsl:template>

   <xsl:template match="Message">
      <xsl:choose>
         <xsl:when test="@type='JOIN'">
            <ParticipantEntered>
               <xsl:call-template name="DateTimeAndLogin" />
               <InternalFlag><xsl:value-of select="Sender/@internal" /></InternalFlag>
               <ConversationID><xsl:value-of select="../../Channel/@name" /></ConversationID>
               <CorporateEmailID><xsl:value-of select="Sender/@email" /></CorporateEmailID>
            </ParticipantEntered>
         </xsl:when>

         <xsl:when test="@type='PART'">
            <ParticipantLeft>
               <xsl:call-template name="DateTimeAndLogin" />
               <InternalFlag><xsl:value-of select="Sender/@internal" /></InternalFlag>
               <ConversationID><xsl:value-of select="../../Channel/@name" /></ConversationID>
               <CorporateEmailID><xsl:value-of select="Sender/@email" /></CorporateEmailID>
            </ParticipantLeft>
         </xsl:when>

         <xsl:when test="@type='FILEUPLOAD' or @type='FILEDOWNLOAD'">
            <FileTransferStarted>
               <xsl:call-template name="DateTimeAndLogin" />
               <FileName><xsl:value-of select="@content" /></FileName>
            </FileTransferStarted>
            <FileTransferEnded>
               <xsl:call-template name="DateTimeAndLogin" />
               <FileName><xsl:value-of select="@content" /></FileName>
               <Status>Completed</Status>
            </FileTransferEnded>
         </xsl:when>

         <xsl:when test="@type='CHAT' or @type='BACKCHAT'">
            <Message>
               <xsl:call-template name="DateTimeAndLogin" />
               <Content><xsl:value-of select="@content" /></Content>
            </Message>
         </xsl:when>

         <xsl:otherwise />
      </xsl:choose>
   </xsl:template>

   <xsl:template name="DateTimeAndLogin">
      <LoginName><xsl:value-of select="Sender/@userName" /></LoginName>
      <DateTimeUTC><xsl:value-of select="DateTimeUTC/@since1970" /></DateTimeUTC>
   </xsl:template>
</xsl:stylesheet>