0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GetMetricData APIでAmazon Connectの履歴メトリクスを取得する!

Last updated at Posted at 2022-09-22

1. はじめに

こんにちは!:grin:

先日、エージェントのパフォーマンスを分析する為にAmazon Connectの履歴メトリクスを半年分取得する事になり、その経験で色々と学んだ事があったので、ここに残したいと思います。

結論から言うと、目的によってはGetMetricData APIは使い物になりません!:sweat_smile:

と言う所で早速本題に入っていきたいと思います。

2. やりたい事の概要

以下3つの履歴メトリクスを取得する

履歴メトリクス種別 期間 間隔 タイムゾーン
電話番号 2022年1月~2022年7月 30分 Japan
電話番号 2022年1月~2022年7月 日別 Japan
エージェント 2022年1月~2022年7月 30分 Japan

3. 履歴メトリクスを取得する方法

  1. Amazon Connectの画面から手動で取得する
  2. GetMetricData APIを用いて取得する ← 今回ご紹介するやり方(まぁ、結論できないんですが。
  3. Amazon Connectの画面から履歴メトリクスをスケジュールでS3に吐き出させたデータを用いて取得する

ちなみに、手動で30分間隔の履歴メトリクスを画面から取得する際は、1度に最大3日間までしか履歴メトリクスを取得できない(日別の場合は1月分)為、7ヶ月分のメトリクスを取得しようとすると、単純計算で、70回CSVのダウンロードを繰り返す必要があります。。なので、上記やりたい事を手動でやると6〜7時間かかります。。:joy:

4. GetMetricData APIについて

では、早速今回の目的である、GetMetricData APIを用いて履歴メトリクスを取得する方法をご紹介します!

4-1. 特徴

履歴メトリクス種別 APIで取得かどうか
キュー :o:
電話番号 :heavy_multiplication_x:
エージェント :heavy_multiplication_x:

電話番号やエージェント毎にグルーピングして履歴メトリクスを取得したい場合は、GetMetricData APIは使い物になりません!
おそらくこの使い方が一番多いような気もするのですが、今後改善される事を願うばかりですね。

4-2. APIとGUIとで取得できるメトリクスの違い

0017-640x544 (1).png

4-3. 使い方

GASからAPIを叩く場合を扱っています。
※LambdaからAPIを叩く場合も基本的に書き方は同じですが、参考文献をご覧いただけますと幸いです。
ちょっと中途半端で可読性の悪いコードですが、参考程度に載せておきます〜

index.html
<!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>

main.gs
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. 参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?