
####
Chat
####


****
NAME
****


Kernel::System::Ticket::Article::Backend::Chat - backend class for chat based articles


***********
DESCRIPTION
***********


This class provides functions to manipulate chat based articles in the database.

Inherits from `Kernel::System::Ticket::Article::Backend::MIMEBase`, please have a look there for its base API,
and below for the additional functions this backend provides.


****************
PUBLIC INTERFACE
****************


ArticleCreate()
===============


Create a chat article.


.. code-block:: perl

     my $ArticleID = $ArticleBackendObject->ArticleCreate(
         TicketID             => 123,                              # (required)
         SenderTypeID         => 1,                                # (required)
                                                                   # or
         SenderType           => 'agent',                          # (required) agent|system|customer
         ChatMessageList      => [                                 # (required) Output from ChatMessageList()
             {
                 ID              => 1,
                 MessageText     => 'My chat message',
                 CreateTime      => '2014-04-04 10:10:10',
                 SystemGenerated => 0,
                 ChatterID       => '123',
                 ChatterType     => 'User',
                 ChatterName     => 'John Doe',
             },
             # ...
         ],
         IsVisibleForCustomer => 1,                                # (required) Is article visible for customer?
         UserID               => 123,                              # (required)
         HistoryType          => 'OwnerUpdate',                          # EmailCustomer|Move|AddNote|PriorityUpdate|WebRequestCustomer|...
         HistoryComment       => 'Some free text!',
     );


Events:


.. code-block:: perl

     ArticleCreate



ArticleGet()
============


Returns single article data.


.. code-block:: perl

     my %Article = $ArticleBackendObject->ArticleGet(
         TicketID      => 123,   # (required)
         ArticleID     => 123,   # (required)
         DynamicFields => 1,     # (optional) To include the dynamic field values for this article on the return structure.
     );


Returns:


.. code-block:: perl

     %Article = (
         TicketID             => 123,
         ArticleID            => 123,
         ChatMessageList      => [
             {
                 MessageText     => 'My chat message',
                 CreateTime      => '2014-04-04 10:10:10',
                 SystemGenerated => 0,
                 ChatterID       => '123',
                 ChatterType     => 'User',
                 ChatterName     => 'John Doe',
             },
             # ...
         ],
         SenderTypeID         => 1,
         SenderType           => 'agent',
         IsVisibleForCustomer => 1,
         CreateBy             => 1,
         CreateTime           => '2017-03-28 08:33:47',
 
         # If DynamicFields => 1 was passed, you'll get an entry like this for each dynamic field:
         DynamicField_X => 'value_x',
     );



ArticleUpdate()
===============


Update article data.

Note: Keys \ ``ChatMessageList``\ , \ ``SenderType``\ , \ ``SenderTypeID``\  and \ ``IsVisibleForCustomer``\  are implemented.


.. code-block:: perl

     my $Success = $ArticleBackendObject->ArticleUpdate(
         TicketID  => 123,                   # (required)
         ArticleID => 123,                   # (required)
         Key       => 'ChatMessageList',     # (optional)
         Value     => [                      # (optional)
             {
                 MessageText     => 'My chat message (edited)',
                 CreateTime      => '2014-04-04 10:10:10',
                 SystemGenerated => 0,
                 ChatterID       => '123',
                 ChatterType     => 'User',
                 ChatterName     => 'John Doe',
             },
             # ...
         ],
         UserID => 123,                      # (required)
     );
 
     my $Success = $ArticleBackendObject->ArticleUpdate(
         TicketID  => 123,
         ArticleID => 123,
         Key       => 'SenderType',
         Value     => 'agent',
         UserID    => 123,
     );


Events:


.. code-block:: perl

     ArticleUpdate



ArticleDelete()
===============


Delete article data.


.. code-block:: perl

     my $Success = $ArticleBackendObject->ArticleDelete(
         TicketID  => 123,
         ArticleID => 123,
         UserID    => 123,
     );



BackendSearchableFieldsGet()
============================


Get the definition of the searchable fields as a hash.


.. code-block:: perl

     my %SearchableFields = $ArticleBackendObject->BackendSearchableFieldsGet();


Returns:


.. code-block:: perl

     my %SearchableFields = (
         'Chat_ChatterName' => {
             Label      => 'Chat Participant',
             Key        => 'Chat_ChatterName',
             Type       => 'Text',
             Filterable => 0,
         },
         'Chat_MessageText' => {
             Label      => 'Message Text',
             Key        => 'Chat_MessageText',
             Type       => 'Text',
             Filterable => 1,
         },
     );



ArticleSearchableContentGet()
=============================


Get article attachment index as hash.


.. code-block:: perl

     my %Index = $ArticleBackendObject->ArticleSearchableContentGet(
         TicketID       => 123,   # (required)
         ArticleID      => 123,   # (required)
         DynamicFields  => 1,     # (optional) To include the dynamic field values for this article on the return structure.
         RealNames      => 1,     # (optional) To include the From/To/Cc fields with real names.
         UserID         => 123,   # (required)
     );


Returns:


.. code-block:: perl

     my %ArticleSearchData = {
         'ChatterName'    => {
             String     => 'John Doe Jane Doe Joe Doe',
             Key        => 'ChatterName',
             Type       => 'Text',
             Filterable => 0,
         },
         'ChatterType'    => {
             String     => 'User User1 User2 User3',
             Key        => 'ChatterType',
             Type       => 'Text',
             Filterable => 0,
         },
         'MessageText'    => {
             String     => 'Chat message Second chat message Third chat message',
             Key        => 'Body',
             Type       => 'Text',
             Filterable => 1,
         }
     };



ArticleHasHTMLContent()
=======================


Returns 1 if article has HTML content.


.. code-block:: perl

     my $ArticleHasHTMLContent = $ArticleBackendObject->ArticleHasHTMLContent(
         TicketID  => 1,
         ArticleID => 2,
         UserID    => 1,
     );


Result:


.. code-block:: perl

     $ArticleHasHTMLContent = 1;





