# ACW テーブル設計 ## 概要 Backlog https://scenelive.backlog.com/board/SL?selectedIssueKey=SL-289&category=237835 今回のACW のタスクで、**架電状況(発信準備時間, 発進時間, 通話時間, ACW)**と**OPの画面閲覧**の保存をし、そのデータを管理画面等で表示して分析等に利用してもらう ## 必要になりそうなデータについて 上記経緯によって今回の実装で今回DB保存で必要になりそうなデータをまとめました。 - オペレーターの架電状況 OPごとで必要な値 - 架電準備時間 - プレディクト待機時間(==※プレディクトの場合は別途待機時間必要==) - 発信時間 - 通話時間 - ACW 又、これらデータについてはモニタリング画面でリアルタイムで表示が切り替わるようにしたいという要望が現在上がっています。 - OPの画面閲覧時間情報とログイン・ログアウト OPごとで必要な値 - 架電画面表示時間 - リスト検索表示時間 - 離席画面表示時間 - 再コール確認時間 - ログイン - ログアウト 又、これらデータについてはモニタリング画面でリアルタイムで表示が切り替わるようにしたいという要望が現在上がっています。 ## 架電状況テーブル設計 ### hisotry テーブル (カラム追加) (追加するカラムのみ追記) | カラム名 | 型 | COMMENT | | -------- | -------- | -------- | | call_preparation | int(11) | 発信準備時間 | | wait_predictive | int(11) | プレディクティブ待機時間 | | acw | int(11) | ACW | いずれも「情報をセット」時に保存する想定。 ## サイドメニュー テーブル設定 ### side_menuテーブル(データ追加) DB名: listnavi_user_master テーブル名: side_menu に以下のデータを追加 | side_menu_id | parent_menu_id | name | page | icon | sort | is_admin | is_company | is_sub_admin | is_sub_company | | --------------- | -------------- | ------------------------ | ---- | ---- | ---- | -------- | ---------- | ------------ | --- | | 44 | 6 | オペレーター分析 | operator_analysis | NULL | 5 | 1 | 1 | 1 | 1 | サイドメニューの表示に必要。 設定内容ではサブ管理でも設定が可能というフラグで登録しています。 ## 閲覧情報・ログインログアウトのテーブル設計 ### operator_action テーブル オペレーターのアクションを定義するマスタテーブルを新規作成 OPの履歴の保存処理のために使用 | カラム名 | 型 | OPTION | COMMENT | | ------------------- | ------------------- | -------------------- | --- | | operator_action_id | int(11) | NOT NULL | 主キー | | name | varchar(20) | NOT NULL | ページ名 | | created_at | current_timestamp() | | 作成日時 | | updated_at | current_timestamp() | | 更新日時 | #### 登録するデータ | operator_action_id | name | | ------- | ------------------ | | 1 | 架電画面 | | 2 | 離席画面 | | 3 | リスト検索画面 | | 4 | 再コールリスト画面 | | 998 | ログイン | | 999 | ログアウト | ### operator_action_log テーブル オペレーターのサイト回遊の履歴テーブルを新規作成 オペレーター毎の離席時間とリスト検索時間はリストに紐づかないため、別途保存のために必要。 | カラム名 | 型 | OPTION | COMMENT | | ------------------- | ------------------- | -------------------- | --- | | operator_action_log_id | int(11) | NOT NULL | 主キー | | operator_id | int(11) | NOT NULL | オペレーターid | | operator_action_id | int(11) | NOT NULL | | | cookie | longtext | NOT NULL | cookie | | time | int(11) | DEFAULT 0, NOT NULL | 時間(秒) | | page_access | DATETIME | NOT NULL | アクセス日時 | | page_exit | DATETIME | NOT NULL | 離脱日時 | | created_at | current_timestamp() | | 作成日時 | | updated_at | current_timestamp() | | 更新日時 | ## 画面リロード、❌ 閉じの考慮 ### 画面リロード - プレディクト状態のリロード時 挙動: 「..Loading」になる - 通常状態のリロード時 挙動: 通常モードで、架電画面が開く ### ❌ ボタンを押す - 画面を❌ ボタンを押して閉じた場合に関して、 - タブの❌ ボタンで閉じた際 セッションに値が入らず再度ログインが必要になります。(中村さん確認済) => 画面を❌ ボタンを押して閉じた時はcokkieの値が変わるので大丈夫そう。 - Chrome左上❌ ボタンで閉じ、window の復元をした際 挙動: ログインした状態でwindowが開く 対応のためには、タブclose でイベント(調査した結果JSでは取得不可)もしくは、Chromeの復元機能で画面を開いたかのフラグが必要なのかなと思います。 対応不可? ### 考慮すべきこと 1. OPログイン後、リロード時に履歴データのバグが発生しないかを考慮 - 対応について 架電画面と「...Loading」の画面で過去のpage_exitを更新し、架電画面のhistoryレコードをinsertする処理があれば対応できると思います。 1. 画面を❌ ボタンを押して閉じた時に考慮できているか - 対応について window ごと閉じられた場合は対応不可な気がします。(ユーザーに消してもらう?) タブ閉じは対応できます。 --- 今回の実装で画面遷移・画面離脱時刻の取得が必要な画面 - 再コールリスト画面 - リスト検索画面 - 離席画面 **実装内容** 方針 => 最新のデータレコードに対してのみ更新を行う(ログイン・ログアウトは例外で更新しない) 1. ログイン時 1-1. operator_cookie をlocal_storageからキーごと削除 1-2. 新規cookie値を local_storageで発行 local_storageへの保存型式は下を想定(数字は秒区切りの時間) ['operator_cookie' => `op${op_id}_172812_${非表示のhash値}`] 1-3. login のデータをoperator_historyへinsert ※ ==簡易ログインの時との区別のため、OPログイン画面を経由しているかの判別が必要== ※ 以降の処理は、どのアクションも、operator_cookie がある場合のみ行う 「離席画面 => 架電画面 の画面遷移を例とし、考慮すると」 2. 架電画面から離席画面遷移時 2-1. 前データがあれば更新処理 ``` (「所持している operator_cookieの値」 === operator_history.cookie) && ( operator_history.operator_action_id !== 2 && operator_history.operator_action_id < 900 ) ``` の条件で 該当があれば最新1件のみ => page_exit に今の時刻をいれて更新 2-2. insert処理 is_updated = false、 leave_time_startに今の時刻、 leave_time_end に今の時刻 aciton_id = 2 でinsert 3. 離席画面から架電画面 2-1. 前データがあれば更新処理 ``` (「所持している operator_cookieの値」 === operator_history.cookie) && ( operator_history.operator_action_id !== 1 && operator_history.operator_action_id < 900 ) ``` の条件で 該当があれば最新1件のみ => page_exit に今の時刻をいれて更新 2-2. insert処理 is_updated = false、 leave_time_startに今の時刻、 leave_time_end に今の時刻 aciton_id = 1 でinsert - ログアウト時 => 他画面へ遷移せずログアウトした場合でも、正確な時間を取得する必要があるため実装がいると思います。 **実装内容** 1. 過去データの終了時間を更新 ``` (「所持している operator_cookieの値」 === operator_history.cookie) && ( && operator_history.operator_action_id < 900 ) ``` の条件で 該当があれば最新1件のみ => page_exit に今の時刻をいれて更新 2. logout のデータを、operator_historyへinsert 3. operator_cookie をlocal_storageからキーごと削除
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up