以下は、API v3を使用してチケットをCSVにエクスポートする方法のコード例です。

API v3は、フィルター条件に一致するチケットがシステム内にいくつあるかに関わらず、最大10,000件のレコードしか取得できません。API呼び出しが返すチケット数を制限するために、より具体的なフィルターを使用する必要があります。詳細については、こちらの記事をご覧ください。

  1. まず、Configuration(設定) > System(システム) > API にAPIキーが作成済みであることを確認してください。キーが準備できている場合は、これから実行するタスクに対する権限が有効になっていることを確認してください。この例ではチケットを扱うので、少なくともチケットの読み取り権限が有効になっている必要があります。

  2. 例をもう少し面白くするために、特定のタグが付いたチケットグループのみをエクスポートしてみましょう。そのためには、エクスポートスクリプトにフィルターを追加します。詳細については、高度なAPI v3フィルターをご覧ください。タグフィルターはタグ名では機能しないため、API v3ドキュメントのプレイグラウンドなどを使用してタグIDを見つける必要があります。特定のタグを持つチケット(他のタグを持っていても構いません)のフィルターは、次のようになります。

[["tags","L","a1b2"]]
  1. すべてのチケットをエクスポートするには(/tickets エンドポイント)、検出されたすべてのチケットを繰り返し処理し、各チケットのすべてのメッセージを読み込みます(/tickets/{ticketId}/messages エンドポイント)。ただし、メッセージにはいくつかの種類があり、内部メモ、ヘッダー情報、タイトル情報、ユーザーエージェント情報などが含まれます。デフォルトではこれらは不要なので、実際のメッセージを表すタイプ’M’のみに絞り込んでフィルタリングします。

  2. CSVヘッダーには、以下の値を使用します。 Ticket ID(チケットID)、Ticket code(チケットコード)、Ticket owner(チケット所有者)、Tags(タグ)、Subject(件名)、Messages(メッセージ)

最終的なエクスポートスクリプトは次のようになります(PHPコード)。

<?php

// URL TO YOUR LIVEAGENT INSTALLATION
const LIVEAGENT_API_URL = 'https://your-account.liveagent.com/api/v3/';

// YOUR API KEY YOU CAN FIND IN MENU Configuration> System> API
const API_KEY = 'v3y24r9ha6tc59d4qc0bg1yvvuotd4mz';

// this is a helper function to make API call requests
function sendRequest($apiCommand, $params = array(), $filters = '') {
    if (!empty($filters)) {
        $filters = '&_filters='.urlencode($filters);
    }

    $headers = array('apikey: '.API_KEY);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, LIVEAGENT_API_URL . $apiCommand . '?' . http_build_query($params).$filters);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    $curl_response = curl_exec($ch);

    if ($curl_response === false) {
        $info = curl_error($ch);
        curl_close($ch);
        die('Error occurred during cURL execution. Additional info: ' . var_export($info));
    }
    curl_close($ch);
    return json_decode($curl_response);
}

// open a CSV file for writing
$fp = fopen('tickets-export.csv', 'w');

// set the CSV header
fputcsv($fp, array('Ticket ID','Ticket Code','Ticket owner','Tags','Subject','Messages'));

$page = 1;
$records = 20;

// get the list of all conversations with a specific tag
$tag = '1a2b';

$filters = '[["tags","L","'.$tag.'"]]';

// get first 20 tickets
do {
    $tickets = sendRequest('tickets', array('_page'=>$page, '_perPage'=>$records, '_sortDir'=>'ASC'), $filters);
    foreach ($tickets as $ticket) {

        if (!isset($ticket->id)) {
            die("There was an error: $ticket");
        }

        $ticketTags = implode(',',$ticket->tags);
        $messagesStr = '';
        $innerPage = 1;
        // get all messages of the ticket
        do {
            $allMessages = sendRequest('tickets/' . $ticket->id . '/messages', array('_page'=>$innerPage,'_perPage'=>$records,'_sortDir'=>'ASC'));
            foreach ($allMessages as $messages) {
                foreach ($messages->messages as $message) {
                    if ($message->type == 'M') {
                        $messagesStr .= $message->userid . ' (' . $message->datecreated . '): ' . $message->message . "\n";
                    }
                }
            }
            $innerPage++;
        } while (!empty($allMessages));
        fputcsv($fp, array($ticket->id,$ticket->code,$ticket->owner_email,$ticketTags,$ticket->subject,$messagesStr));

    }
    $page++;
} while (!empty($tickets));

fclose($fp);
?>

スクリプトの処理が完了すると、エクスポートされたチケットが tickets-export.csv ファイルに保存されます。