1. はじめに
こんにちは!
先日、エージェントのパフォーマンスを分析する為にAmazon Connectの履歴メトリクスを半年分取得する事になり、その経験で色々と学んだ事があったので、ここに残したいと思います。
結論から言うと、目的によってはGetMetricData APIは使い物になりません!
と言う所で早速本題に入っていきたいと思います。
2. やりたい事の概要
以下3つの履歴メトリクスを取得する
履歴メトリクス種別 | 期間 | 間隔 | タイムゾーン |
---|---|---|---|
電話番号 | 2022年1月~2022年7月 | 30分 | Japan |
電話番号 | 2022年1月~2022年7月 | 日別 | Japan |
エージェント | 2022年1月~2022年7月 | 30分 | Japan |
3. 履歴メトリクスを取得する方法
- Amazon Connectの画面から手動で取得する
- GetMetricData APIを用いて取得する ← 今回ご紹介するやり方(まぁ、結論できないんですが。
- Amazon Connectの画面から履歴メトリクスをスケジュールでS3に吐き出させたデータを用いて取得する
ちなみに、手動で30分間隔の履歴メトリクスを画面から取得する際は、1度に最大3日間までしか履歴メトリクスを取得できない(日別の場合は1月分)為、7ヶ月分のメトリクスを取得しようとすると、単純計算で、70回CSVのダウンロードを繰り返す必要があります。。なので、上記やりたい事を手動でやると6〜7時間かかります。。
4. GetMetricData APIについて
では、早速今回の目的である、GetMetricData APIを用いて履歴メトリクスを取得する方法をご紹介します!
4-1. 特徴
履歴メトリクス種別 | APIで取得かどうか |
---|---|
キュー | |
電話番号 | |
エージェント |
電話番号やエージェント毎にグルーピングして履歴メトリクスを取得したい場合は、GetMetricData APIは使い物になりません!
おそらくこの使い方が一番多いような気もするのですが、今後改善される事を願うばかりですね。
4-2. APIとGUIとで取得できるメトリクスの違い
4-3. 使い方
GASからAPIを叩く場合を扱っています。
※LambdaからAPIを叩く場合も基本的に書き方は同じですが、参考文献をご覧いただけますと幸いです。
ちょっと中途半端で可読性の悪いコードですが、参考程度に載せておきます〜
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<style>
適宜スタイルを書く
</style>
</head>
<body>
<div class="wrapper">
<button id="btn">履歴メトリクスの取得</button>
</div>
<div id="status"></div>
<div id="result"></div>
</body>
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1219.0.min.js"></script>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
<script type="text/javascript">
$(function()
{
$("#btn").on('click', function(){
// getSpreadsheetData SuccessHandler
function onSuccess(body){
AWS.config.region = 'ap-northeast-1';
AWS.config.update({
accessKeyId: "アクセスキー",
secretAccessKey: "シークレットキー",
});
// Create GetMetricData object
const connect = new AWS.Connect();
const historicalMetrics = [
{Name: "ABANDON_TIME",Unit: "SECONDS",Statistic: "AVG"}, // 平均キュー中止時間
{Name: "AFTER_CONTACT_WORK_TIME",Unit: "SECONDS",Statistic: "AVG"}, // 連絡作業後の時間
{Name: "API_CONTACTS_HANDLED",Unit: "COUNT",Statistic: "SUM"}, // 対応したAPIのお問い合わせ
{Name: "CALLBACK_CONTACTS_HANDLED",Unit: "COUNT",Statistic: "SUM"}, // 対応した問い合わせのコールバック
{Name: "CONTACTS_ABANDONED",Unit: "COUNT",Statistic: "SUM"}, // 中止された問い合わせ
{Name: "CONTACTS_AGENT_HUNG_UP_FIRST",Unit: "COUNT",Statistic: "SUM"}, // エージェントが先に切断した問い合わせ
{Name: "CONTACTS_CONSULTED",Unit: "COUNT",Statistic: "SUM"}, // 相談した問い合わせ
{Name: "CONTACTS_HANDLED",Unit: "COUNT",Statistic: "SUM"}, // 対応した問い合わせ
{Name: "CONTACTS_HANDLED_INCOMING",Unit: "COUNT",Statistic: "SUM"}, // 対応した着信問い合わせ
{Name: "CONTACTS_HANDLED_OUTBOUND",Unit: "COUNT",Statistic: "SUM"}, // 対応した発信問い合わせ
{Name: "CONTACTS_HOLD_ABANDONS",Unit: "COUNT",Statistic: "SUM"}, // 保留中に顧客が切断した問い合わせ
{Name: "CONTACTS_MISSED",Unit: "COUNT",Statistic: "SUM"}, // 問い合わせの不在着信
{Name: "CONTACTS_QUEUED",Unit: "COUNT",Statistic: "SUM"}, // キューに保存された問い合わせ
{Name: "CONTACTS_TRANSFERRED_IN",Unit: "COUNT",Statistic: "SUM"}, // 内部転送された問い合わせ
{Name: "CONTACTS_TRANSFERRED_IN_FROM_QUEUE",Unit: "COUNT",Statistic: "SUM"}, // キューから転送された問い合わせ
{Name: "CONTACTS_TRANSFERRED_OUT",Unit: "COUNT",Statistic: "SUM"}, // 外部転送された問い合わせ
{Name: "CONTACTS_TRANSFERRED_OUT_FROM_QUEUE",Unit: "COUNT",Statistic: "SUM"}, // キューから転送された問い合わせ
{Name: "HANDLE_TIME",Unit: "SECONDS",Statistic: "AVG"}, // 平均処理時間
{Name: "HOLD_TIME",Unit: "SECONDS",Statistic: "AVG"}, // 顧客の平均保留時間
{Name: "INTERACTION_AND_HOLD_TIME",Unit: "SECONDS",Statistic: "AVG"}, // エージェントの応答時間と顧客の保留時間
{Name: "INTERACTION_TIME",Unit: "SECONDS",Statistic: "AVG"}, // エージェントの平均対応時間
{Name: "OCCUPANCY",Unit: "PERCENT",Statistic: "AVG"}, // 利用率
{Name: "QUEUE_ANSWER_TIME",Unit: "SECONDS",Statistic: "AVG"}, // 平均キュー応答時間
{Name: "QUEUED_TIME",Unit: "SECONDS",Statistic: "MAX"}, // キューに入っている最大時間
{Name: "SERVICE_LEVEL",Unit: "PERCENT",Statistic: "AVG", Threshold: { Comparison: "LT",ThresholdValue: 60}}, // サービスレベルX
];
let starttime = new Date(2022,9-1,20,9,00,0);
let endtime = new Date(2022,9-1,20,22,30,0);
let params = {
EndTime: endtime,
Filters: { /* required */
Queues: [
"キューのIDを入れる",
/* more items */
]
},
HistoricalMetrics: historicalMetrics, /* required */
InstanceId: "インスタンスID", /* required */
StartTime: starttime,
Groupings: [
"QUEUE" | "Channel"
],
};
connect.getMetricData(params, function(err, data){
if(err){
alert(JSON.stringify(err));
}else{
alert(JSON.stringify(data.MetricResults[0]));
}
});
}
// getSpreadsheetData FailureHandler
function onFailure(e){
console.log(e, 'getSpreadsheetData()');
}
// End of onFailure()
google.script.run.withSuccessHandler(onSuccess).withFailureHandler(onFailure).getSpreadsheetData();
});
});
</script>
</html>
const settings_name = "Settings";
const sheet_name = "GetMetricData";
// スプレッドシートデータの取得
const app = SpreadsheetApp;
const ss = app.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheet_name);
const setting_sheet = ss.getSheetByName(settings_name);
// 実行ボタン表示
function GetMetricData(e){
const html = HtmlService.createHtmlOutputFromFile('btn').setWidth(240).setHeight(200);
app.getActiveSpreadsheet().show(html);
}
function getSpreadsheetData(){
// ここには色々な処理をかく。
return true;
}
5. 最後に
GetMetricData APIを用いて履歴メトリクス:電話番号及び履歴メトリクス:エージェントを効率的に取得しようとしたのですが、そもそも取得できないと言う残念な結果になってしまいました。
履歴メトリクス:キューを取得する場合は、上記方法でGAS又はLambdaからAPIを叩けばできると思うので、やってみてください〜
私は、また別の方法で試してみようと思います!
出来次第、近日アップデートしようと思います〜
5-1. 参考文献