1.1개요
테넌트 별 라우팅봇 시나리오 정보를 가져오기 위한 API 입니다.
API는 http/https 프로토콜을 사용하며, GET, POST method를 사용합니다.
request , response는 JSON String 형태로 전달됩니다.
1.1.1설명
그림 1-1시나리오 편집기 내재화 시스템구성도
AI Gateway 와 시나리오 편집기랑 연동하는 IF 입니다.
1.1.2지원 목록
테넌트 별 시나리오
1.1.3선결 과제
서버에는 반드시 시나리오편집기 GW 가 설치 되어있어야 합니다.
외부(내부) 통신을 하기 위해서는 8600 포트가 열려 있어야 합니다.
카테고리는 미리 정의 후 LLM 에 학습이 필요합니다.
1.1.4변수 정의
고객 전화번호 : ${phone}
고객 이름 : ${name}
1.2API
1.2.1시나리오 가져오기 (AI Gateway -> node-red)
1.2.1.1시나리오
시나리오 코드가 있을경우 시나리오 코드 부터 시작(1순위)
ChatMsg 있을경우 LLM 연동 또는 Answer 만 있을 경우는 분기 처리
POST /{시나리오코드}
- [Header]
Authorization: Bearer 토큰
- [Parameter]
키 | 타입 | 필수 | 설명 |
---|---|---|---|
CallId | text(255) | Y | 고객과 연결된 전화의 고유 Key |
ChatBotKey | text(50) | Y | Bot 고유 key |
Customer | text(35) | Y | 고객 전화번호 |
Agent | int(5) | Y | 상담원 내선번호 |
ChatMsg | text | N | 최초 대화는 메시지가 없음. |
DTMF | text | N | DTMF 입력값 |
Answer | text | N | 고객이 응답으로 네/아니오 등의 응답시 사용 (서비스 코드가 S0003 일 경우 사용 필수 사용) |
| text | Y | LLM 정보의 경우는 Gloval $ 변수로 제공됩니다. |
ScenarioCode | text | N | ScenarioCode : "무응답" ScenarioCode : "무응답종료" 이전에 전달 받은 ScenarioCode Dtmf 입력등 처리하기 위한 시나리오 코드를 사용됨 Dtmf 가 있을 경우 시나리오 코드는 필수 |
| text | N | ScenarioCode 로 변경 |
- [SAMPLE]
curl -H "Authorization: Bearer eyAiYWxnIjogIkhT...d8b2Thw" \ -X POST -H "Content-type: application/json" \ -d \ '{"CallId":"DS0000000001","ChatBotKey":"bot00001","Customer":"01012345678", "Agent":1000,"IsFirstChat":"Y","ChatMsg":"담당자확인전달요청",}' \ http://127.0.0.1:1880/SCENARIO01
* 응답
- [Response]
키 | 타입 | 필수 | 설명 |
---|---|---|---|
CallId | text(255) | Y | 고객과 연결된 전화의 고유 Key |
ChatBotKey | text(50) | Y | Bot 고유 key |
ServiceCode | text | Y | 서비스유형 (아래 항목 참조) |
TransCode | text | Y | 전송 결과 코드(아래 항목 참조) |
ScenarioCode | text | N | 세션 처음에는 빈값 세션 유지시에는 시나리오에서 받은값 |
Description | text | Y | 응답 메세지 |
DtmfLength | int | N | DTMF입력글자수 서비스 코드가 S1000(DTMF 입력) 일 경우는 필수 |
DtmfEndChar | text | N | DTMF입력종료문자 서비스 코드가 S1000(DTMF 입력) 일 경우 옵션 |
TransfterNumber | int | N | 호전환 전화번호 서비스 코드가 S2000(호전환) 일 경우는 필수 |
Timeout | int | N | DTMF를 입력받거나, 고객의 음성을 수집할때 대기시간(단위 초) |
* 응답
{ "CallId":"DS0000000001", "ChatBotKey":"bot00001", "Result": "Y", "ServiceCode": "S2000", "TransCode": "200", "TransfterNumber" : "40001", "Description": "상담원을 연결해 드리겠습니다. 잠시만 기다려 주세요." }
1.2.2대화분류(Node-red -> LLM)
1.2.2.1대화 분류
POST /{시나리오코드}/chat-gpt
- [Header]
Authorization: Bearer 토큰
- [Parameter]
키 | 타입 | 필수 | 설명 |
---|---|---|---|
question | text | Y | 문의 내용 |
- [SAMPLE]
curl -k -X POST -H 'Content-Type: application/x-www-form-urlencoded'\ -d "question=상담원:안녕하세요 넥서스 상담원 서민지입니다 무엇을 도와드 릴까요?\n고객:제가 봉투 모의고사 패키지를 신청했는데 언제쯤 배송될까요?\n상담원:시험일 기준 익일에 문제지, 해설지, 답 안지가 일괄 발송됩니다.고객:근데 아직 안 왔어요.\n상담원:혹시 지난 모의고사 신청하셨나요?\n고객:네 맞아요 지난번 꺼 신청했어요\n상담원:그러시면 매주 화요일 금요일에 일괄 발송되니까 조금만 더 기다려주세요\n고객:네 알겠습니다.\n상담원:네 감사합니다" \ https://10.10.40.30/star-wars/chat-gpt/
* 응답
- [Response]
키 | 타입 | 필수 | 설명 |
---|---|---|---|
category1 | text | N | 최초는 없음(대분류) |
category2 | text | N | 최초는 없음(중분류) |
category3 | text | N | 최초는 없음(소분류) |
answer | text | N | 응답내용 |
create_time | text | Y | 일자 |
* 응답
{ "catagory1": "기타", "category2": "기타", "category3": "담당자확인전달요청", "answer": " 고객이 봉투 모의고사 패키지 배송 일정에 대해 문의하였고, 상담원은 배송일이 시험일 기준으로 익일에 발송될 것이라고 안내하였습니다. 고객은 추가적인 질문을 하였고, 상담원은 기다려달라고 하였습니다.\n\n", "create_time": "2024-04-19T13:28:28.180710" }
1.3코드 정의
1.3.1서비스 유형 코드
code | message | 설명 |
---|---|---|
S0000 | 음성 플레이 | 음성플레이후 대기 |
S0001 | 음성 플레이 후 호 종료 | 시나리오 완료 시 등에 사용 |
S0002 | 음성 플레이 후 시나리오 요청 | 월켐 메시지 등의 맨트 후에 다시 시나리오 요청에 사용 |
S1000 | DTMF 입력 | 주민번호, 생년월일 등의 입력이 필요한 항목에 사용 |
S2000 | 음성 플레이 후 전환 | 상담사 또는 IVR 로 호 전환시 사용 |
1.3.2결과 코드
code | message | 설명 |
---|---|---|
200 | 정상코드 | |
400 | ForbiddenException | 권한 없음 |
401 | UnauthorizedException | 인증 실패 |
404 | [Error]Not found! | 찾기 실패 |
411 | [Error] tiimeout | 리턴시간 초과 |
412 | [Error] parameter error | 필수파라미터 값 없음 |
413 | [Error] Not found (server). | 데이터 오류 |
501 | [Error] Server DB (server) | 서버 DB 오류 |
502 | [Error] Server DB (editor) | 서버 DB 오류 |
600 | FailedToSendMessageException | 메시지 전송 실패 |
601 | InternalSystemErrorException | 내부 시스템 에러 |