2.IVR 콜추적 연동 가이드

Edit

2.1개요

NEXUSCUBE 와 연동하여 IVR 의 서비스 통계를 남기기 위한 것입니다.

2.2설명

콜센터에 호 인입시 고객은 IVR을 통해, 여러 Depth를 거쳐 서비스에 대한 안내를 받아, 상담사와 연결 혹은 서비스를 종료하게 됩니다. 고객이 IVR에서 어떤 서비스를 이용하였는지 IVR Depth에 대한 콜추적을 하는 기능입니다.

2.3nxcapiPutTraceInfo함수

2.3.1nxcapiPutTraceInfo 함수 설명

- IVR 서비스에 대한 콜 추적을 하기 위해서는 IVR에서 호인입시부터 서비스 변경이 있을 때마다 nxcapiPutTraceInfo함수를 호출 하여야 합니다. NEXUSCUBE에서는 이 호출된 데이터를 DBFILE에 저장 한후 콜추적을 하게 됩니다.

- NEXUSCUBE로부터 수신된 정보로 입력해야 할 항목

- IVR에서 자체적으로 판단하여 넣어주어야 할 항목

gate

cnid

callid

channel

dnis

ani

invokeID

serviceCode

serviceCodeName

digit

reason

target

attach

(Mandatory)

(Mandatory)

(Mandatory)

(Mandatory)

(Mandatory)

(Mandatory)

(Option)

2.3.2PROTOTYPE

cubeAPI
nxcapiPutTraceInfo(  cubeGateID              gate,
                     cubeSHORT                invokeID,
                     cubeINT                  cnid,
                     cubeINT                  callid,
                     cubeString24             channel,
                     cubeString20             serviceCode,
                     cubeString100            serviceCodeName,
                     cubeString30             digit, 
                     cubeString24             dnis,
                     cubeString24             ani,
                    _eTraceInfo_reason       reason,
                    cubeString24             target,
                    cubeUEI                  *attach)

2.3.3nxcapiPutTraceInfo API Packet

- nxcapiPutTraceInfo 패킷은 서비스 코드 cubeS_PutTraceInfo 192

GATE ID (INT)

INVOKE ID (SHORT)

CNID (INT)

CALLID (INT)

CHANNEL LEN(CHAR) 최대길이 24

CHANNEL (CHANNEL LEN)

SERVICE CODE LEN(CHAR) 최대길이 20

SERVICE CODE (SERVICE CODE LEN)

SERVICE CODE NAME LEN(CHAR) 최대길이 100

SERVICE CODE NAME (SERVICE CODE NAME LEN)

DIGIT LEN(CHAR) 최대길이 30

DIGIT (DIGIT CHAR)

DNIS LEN(CHAR) 최대길이 24

DNIS (DNIS LEN)

ANI LEN(CHAR) 최대길이 24

ANI (ANI LEN)

2.3.4nxcapiPutTraceInfo PARAMETERS

gate

type: cubeGateID

access: read only

use: mandatory

CUBE와 연결하기 위한 핸들. nxcapiOpenServer시 얻어옵니다.

invokeID

type: cubeSHORT

access: read only

use: mandatory

nxcapiOpenServer에서 AsyncMode로 오픈시 이용한다. 동시에 여러 개의 명령을 요청했을 때 invokeID로 어떤 요청의 결과인지 알 수 있습니다. 1~65535범위 안에서 Loop처리하면 됩니다.

AsyncMode가 아닐경우 1~65535범위내의 하나의 숫자로 고정 사용해도 됩니다.

cnid

type: cubeINT

access: read only

use: mandatory

현재 채널에 인입된 호의 cnid 값을 입력합니다.

callid

type: cubeINT

access: read only

use: mandatory

현재 채널에 인입된 호의 callid 값을 입력합니다.

channel

type: cubeString24

access: read only

use: mandatory

현재 호가인입된 채널번호의 번호입니다.

serviceCode

type: cubeString20

access: read only

use: mandatory

IVR 서비스 코드번호 입니다.

옵션사항으로 서비스코드에 구분자 ‘-‘로 서비스 depth를 넣을 수 있습니다.

( ServiceDepth는 v2.7.4.47 부터 지원가능합니다 )

예를들어 “1-10000”이면 서비스 depth는 1, 서비스코드는 10000이 됩니다.

serviceCodeName

type: cubeString100

access: read only

use: mandatory

IVR 서비스 코드명 입니다.

digit

type: cubeString30

access: read only

use: mandatory

서비스 단계 이동을 위해 사용된 digit 입력값 입니다.

dnis

type: cubeString24

access: read only

use: mandatory

dnis 번호 입니다.

ani

type: cubeString24

access: read only

use: mandatory

고객의 번호입니다.

reason

type: _eTraceInfo_reason

access: read only

use: mandatory

서비스 단계 변경에 대한 사유 값 입니다.

채널에 호가 최초인입된 시점부터 종료될때까지의 사유값을 통해 통계 데이터를 남깁니다.

사유값은 아래의 5가지 항목이 있습니다.


eTraceInfo_first = 0 // 고객이 최초 인입했을 때

- IVR에서는 반드시 최초 채널에 호가 인입 했을때 eTraceInfo_first 사유값으로 nxcapiPutTraceInfo를 호출해주어야 합니다.


eTraceInfo_move = 1 // 서비스가 이동했을때

- IVR멘트를 청취한 고객이 특정 서비스 digit를 누르고 서비스가 이동될때 eTraceInfo_move 사유값으로 nxcapiPutTraceInfo를 호출해주어야 합니다.



eTraceInfo_talk = 2 // 고객이 상담연결을 요청했을때

- 고객이 상담원 연결 요청을 할때 eTraceInfo_talk 사유값으로 nxcapiPutTraceInfo를 호출해주어야 합니다. 상담원 연결을 요청하면 IVR은 서비스에 해당하는 큐로 호를 전환할 것 입니다. 이때 traget 항목에 호전환 할 큐번호도 입력해 주어야합니다.


eTraceInfo_abandon = 3 // 서비스도중 고객이 끊었을때

- 고객이 서비스 도중 끊었을때 eTraceInfo_abandon 사유값으로 nxcapiPutTraceInfo를 호출해주어야 합니다. 서비스 도중에 멘트를 듣는도중 끊거나, 또는 멘트를 듣고 digit를 입력해야하나 입력하지 않고 끊은 경우에 해당합니다.


eTraceInfo_exit = 4 // 서비스를 마치고 정상 종료할때

- 고객이 서비스 종료 digit를 누르고 명시적으로 서비스가 종료될때 eTraceInfo_exit 사유값으로

nxcapiPutTraceInfo를 호출해주어야 합니다.

target

type: cubeString24

access: read only

use: mandatory

고객이 상담연결을 요청했을 때 IVR이 호전환 할 큐 번호 입니다.

reason이 eTraceInfo_talk일때 사용 합니다.

attach

type: cubeUEI

access: read only

use: option

IVR이 고객으로부터 수집된 정보입니다. (향후 데이터 확장을 위해 사용.)

2.3.5RETURN VALUE

호출에 성공하면 무조건 1을 리턴합니다.

2.4마감 Flow

2.4.1마감 Flow

  1. IVR에서 nxcapiPutTraceInfo를 호출 하면 해당 데이터는 DBFILE에 남게 됩니다.

  2. NEXUSCUBE에서는 다음 순서에 의해 해당 DBFILE에대해 Database 입력 후 마감을 합니다.

  3. PROC_DAILYSTATISTIC_CLOSING은 실시간 마감으로 PROC_OT_IVRTRACE_INSERT 프로시져를 호출 하며, 이 프로시져는 OT_IVRTRACE 테이블과 BU_OT_IVRTRACE 테이블에 데이터를 입력합니다.

  4. PROC_DAY_CLOSING은 일배치 마감으로 PROC_OT_IVRTRACE_BACKUP 프로시져를 호출 하며, 이 프로시져는 OT_IVRTRACE 테이블에서 해당 날짜 데이터를 삭제합니다.

2.4.2OT_IVRTRACE & BU_OT_IVRTRACE테이블

- OT_IVRTRACE 테이블과 BU_OT_IVRTRACE테이블은 다음의 구조로 되어 있습니다.

2.4.3DBFILE

- /home/cube/nexus/products/cube/dbfile디렉토리에 TRACE_yyyymmdd 형태로 DBFILE이 남게 되며 해당 데이터는 다음의 형식으로 되어 있습니다.

[I]CONNECT_ID:SEQUENCE:IVR채널번호:서비스코드별인입시간:센터ID:서비스코드:서비스명:콜아이디:DIGIT입력값:DNIS:고객번호(ANI):유지시간:사유:분배대상:추가정보:서비스뎁스

- 서비스뎁스는 v2.7.4.47 부터 지원가능합니다.

- SEQUECE는 v2.7.5.15부터 지원 가능합니다

2.5환경 설정

2.5.1sh.start / sh.startha

- 엔진 시작시 sh.start 혹은 sh.startha 파일을 수정하여 nxAdaptor_ST –TRACE 프로세스를 실행 시켜줍니다.

nxAdaptor_ST 프로세스를 개별로 실행 시킬경우 다음과 같이 nxAdaptor_ST –TRACE 프로세스 관련 하여 주석을 해제합니다.

만일 nxAdaptor_ST 프로세스를 통합으로 실행 시킬경우 자동으로 TRACE관련되어 작동이 됩니다.

2.6참고 사항

  1. PutTraceInfo 함수는 IVR에 고객호 인입 시부터 IVR 서비스 변경시마다 함수를 호출하게 되고 이를 통해 콜추적 DBFILE을 생성합니다.

  2. 콜추적 DBFILE의 경우 다른 DBFILE처럼 엔진 재시작시 백업후 신규로 생성하지 않습니다. (nxstart 프로세스)

  3. 콜추적 DBFILE을 DB에 입력하기 위해서는 nxadaptorST실행시 콜추적 옵션을 설정합니다.

    nxadaptorST 프로세스 통합실행시는 자동으로 콜추적 DBFILE을 읽어 들입니다.

  4. ENCRYPTION DB암호화로 인해 OT_IVRTRACE 테이블의 ANI칼럼 사이즈는 VARCHAR2(50)으로 적용됩니다. (API 24byte)

  5. IVR 앞단인 경우 IVR 콜추적하기 위해서는 큐에 대한 설정을 (큐종류: 3 Queue, 큐타입: 7 Trace Queue)로 설정하여야 합니다.

  6. PutTraceInfo API함수 호출시 API데이터에 대해서 엔진에서는 채널에 등록 여부만 체크 하고, String으로 된 값들은 유효성 체크를 하지 않습니다. 즉, 함수 호출시 모든 결과 값은 1이 됩니다.

  7. IVR에서 함수 호출시 CNID와 REASON값을 정상 Flow에 맞게 보내지않으면, 서비스시간은 0으로 간주 됩니다.

  8. IVR에서 함수 호출시 Reason의 종료 사유인 2,3,4번이 오지 않을 경우 해당 Row는 마감 되지 않고 있다가 해당 채널에 함수 호출시 미마감 row 마감됩니다.

  9. IVR 채널에 호 인입시 nxcapiPutTraceInfo 함수를 eTraceInfo_first = 0사유로 호출해야 합니다.

  10. IVR 채널에서 호가 끊어지거나, 호전환 같은 호 종료시에는 nxcapiPutTraceInfo 함수를 아래 사유중 하나로 호출 해야 합니다. (종료 사유는 아래 3개중 하나로만 호출 해야 합니다.)

  11. 동일한 CNID, SERVICE CODE, REASON으로 호출되면, 이는 무시됩니다.(v2.7.4.47 이후버전)

2.7Sequence Diagram

2.7.1Sequence Diagram

2.7.1.1Summary

2.7.2Example Diagram

2.7.2.1Scenario #1

- 고객이 컨택센터에 전화를 걸어 IVR에 연결됨

- IVR 멘트 청취 후, 상담원 연결 Digit를 누름

- 고객이 컨택센터에 전화를 걸어 IVR에 최초인입이 되면 IVR은 Delivered Event 를 수신하게 됩니다.

- Delivered Event에는 nxcapiPutTraceInfo 호출에 필요한 cnid, callid, channel, dnis, ani 정보가 있습니다.

이때 nxcapiPutTraceInfo를 reason eTraceInfo_first 로 호출 합니다.

- 호를 IVR채널이 받으면 Established Event 가 수신됩니다.

- IVR멘트 청취 후, 상담원 연결 digit를 입력하면, IVR은 큐로 호전환을 하게 됩니다.

- 호전환에 성공하면 nxcapiPutTraceInfo를 eTraceInfo_talk 로 호출 합니다.

- NEXUSCUBE는 통계데이터를 생성하고, IVR은 호전환이 되어 채널이 Idle 상태가됩니다

2.7.2.2Scenario #2

- 고객이 컨택 센터에 전화를 걸어 IVR에 연결됨
- IVR 멘트 청취 후 요금 조회를 선택
- IVR 멘트 청취 후 부가 서비스를 선택
- IVR 멘트 청취 후 콜백 요청 선택
- IVR은 콜백 요청 정보를 기록하고 호를 종료

- 고객이 컨택센터에 전화를 걸어 IVR에 최초인입이 되면 IVR은 Delivered Event 를 수신하게 됩니다.

- Delivered Event에는 nxcapiPutTraceInfo 호출에 필요한 cnid, callid, channel, dnis, ani 정보가 있습니다.

이때 nxcapiPutTraceInfo를 reason eTraceInfo_first 로 호출 합니다.

- 호를 IVR채널이 받으면 Established Event 가 수신됩니다.

- IVR멘트 청취 후, 요금조회 digit를 입력합니다.

이때 nxcapiPutTraceInfo를 reason eTraceInfo_move로 호출 합니다.

- IVR멘트 청취 후, 부가서비스 digit를 입력합니다.

이때 nxcapiPutTraceInfo를 reason eTraceInfo_move로 호출 합니다.

- IVR멘트 청취 후, 콜백요청 digit를 입력합니다.

이때 nxcapiPutTraceInfo를 reason eTraceInfo_move로 호출 합니다.

- IVR은 서비스가 종료되었음을 판단하고, nxcapiPutTraceInfo를 reason eTraceInfo_exit로 호출 후

호를 종료시킵니다.

- NEXUSCUBE는 통계데이터를 생성하고, IVR은 호가 종료되어 채널이 Idle 상태가됩니다.

2.8Application 연동

2.8.1Test Program 사용법

2.8.1.1PutTraceInfo

- Test 프로그램의 Private 메뉴를 보면 아래와 같이 PutTraceInfo 메뉴가 있습니다.

해당 메뉴 클릭시 다음과 같은 창이 나타나며 해당 값들을 입력시 nxcapiPutTraceInfo 함수가 호출 됩니다.

2.8.2nxcapiPutTraceInfo 예제

//------- GetEvent 시가져오는 EventData 값설정 --------//
           int cnid     = eventData.cnid;        
           int callid   = eventData.callRefId;   
           int channel  = eventData.monitorParty;
           int dnis     = eventData.calledParty;  <-- or eventData.thirdParty
           int ani      = eventData.otherParty;

// * 사이트 환경에 따라 DNIS 및 ANI값은 상이 할수 있습니다.

           //------- reason 설정 --------//
           int reason   = (_eTraceInfo_reason)eTraceInfo_first;
           //------- attach data 설정 --------//
           cubeUEI attach;
           memset (attach, 0x00, sizeof(cubeUEI));
           attach.UEIData = "PutTraceInfo attach data";  <-- 사용자임의값
           attach.UEILen = (attach.UEIData).lenth;
            * UEIData 사용시 attach 필드에 [eventData.UEI]를그대로사용
           //------- PutTraceInfo 호출 --------//
           nxcapiPutTraceInfo( gate,
                               invoke,
                               cnid,
                               callid,
                               channel,
                               serviceCode,           
                               serviceCodeName,   
                               digit,                 
                               dnis,
                               ani,
                               reason, 
                               target,  
                               attach )