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

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

  2. より実践的な例として、特定のタグが付いたチケットなど、条件を絞ってエクスポートしてみましょう。そのためには、エクスポートスクリプトにフィルターを追加します。詳細については、APIv3の高度なフィルターを参照してください。タグフィルターはタグ名では機能しないため、タグIDを調べる必要があります。タグIDはAPIv3ドキュメントのプレイグラウンドなどを使って確認できます。特定のタグを持つチケット(他のタグが付いていても可)のフィルターは次のようになります。

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

  2. CSVのヘッダーには以下の値を使用します。 Ticket 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 ファイルに保存されます。