Kakao i Agent::Service Agent Interface::System

페이지 이동경로

System

System 인터페이스는 KVS 시스템 환경 변수 제어와 관련된 Message를 제공합니다.

System 인터페이스
Message 인터페이스 설명
Event SynchronizeState 새 연결이 설정될 때, 모든 제품 구성 요소의 상태를 KVS에 업데이트
BootUp 애플리케이션이 재시작되어 네트워크가 연결될 때 전송
Exception KVS의 Instruction을 실행할 수 없을 때 전송
Idle System.SubscribeNextIdle Instruction에서 주어진 Interval 동안 Service Agent의 유휴 상태가 지속될 경우 전송
RequestCanceled 발화 인식 요청을 받고 KVS에 첨부 데이터를 전송하는 중, 해당 요청을 취소 할 때 다음 파트에 전송
RequestCompleted 발화 인식 요청을 받고 첨부 데이터의 전송이 정상적으로 완료되면 다음 파트에 전송
Instruction RequestSynchronizeState 절대적인 볼륨 조절이 필요할 때마다 KVS가 Service Agent에 지시
ClearCache Service Agent 자체적으로 사용하고 있는 캐시를 모두 제거하도록 지시
Close Service Agent에 서버와의 HTTP/2 연결을 종료하도록 지시
Heartbeat 주기적으로 KVS와 연결된 Down Channel로 전송하며, 연결 유지(Keepalive) 목적
SubscribeNextIdle Service Agent의 유휴 상태가 일정 시간 이상 지속될 경우, Service Agent에 해당 Event를 전송하라고 지시
UnsubscribeIdle Service Agent에 구독 요청한 Idle의 구독 취소를 요청할 경우, 이전에 구독 요청한 token을 포함하여 지시
State SystemState 디버깅 필요 시 Service Agent의 시스템 상태 정보를 key와 Value로 표시(Optional)

Event

Event Message의 호출 방식은 다음과 같습니다.

Event Message 호출 방식
메서드 요청 URL
POST /{{API version}}/events

SynchronizeState

System.SynchronizeState는 새 연결이 설정될 때 모든 제품 구성 요소의 상태를 KVS를 업데이트하기 위해 Service Agent가 KVS에 전송하는 Event입니다. Service Agent는 1시간마다 KVS로 System.SynchronizeState를 전송해야 합니다.

System.SynchronizeState가 발생하는 경우는 다음과 같습니다.

  • Servie Agent가 KVS와 새롭게 연결되었을 때
  • 주기적으로 System.RequestSynchronizeState Instruction을 수신했을 때

Request Syntax

코드예제System.SynchronizeState Request Syntax
{
   "instruction":{
      "header":{
         "type":"System.RequestSynchronizeState",
         "messageId":"{{String}}",
         "dialogRequestId":"{{String}}"
      },
      "body":{
         "settings":[
            {
               "key":"{{STRING}}",
               "value":"{{STRING}}"
            }
         ]
      }
   }
}

Request Header

System.SynchronizeState Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의

Request Body

System.SynchronizeState Request Body
파라미터 타입 필수 여부 설명
cause String 필수 해당 Event를 발생시킨 원인
- 상황에 맞게 아래 속성값을 선택해서 사용
initialConnect: 최초 연결 시 동기화
reconnected: 재연결 시 동기화
periodically: 주기적인 동기화
onDemand: 서버 요청으로 동기화
Object 선택 Key와 Value 값을 가지는 상위 항목
- key값을 선택하여 기재한 후, 선택한 Key에 해당하는 value 값을 입력
key String 필수 Key 항목
- 상황에 맞게 아래 속성값을 선택해서 사용
locale: 단말의 locale 정보
inactivity: 단말의 Idle 시간 설정
adid: 단말의 Advertising ID 설정
volume: 현재 볼륨 레벨 설정
muted: 음소거 설정(단, 스피커는 muted 미지원)
availableWuws: 스피커 앱에서 지원하는 Wake-up Word 목록
wuw: Wake-up Word 설정
micMuted: 마이크 음소거 여부 설정
recognitionTimeout: 클라이언트 인식 대기 시간 설정
pinning: SSL pinning 활성화 여부 설정
appServerEndpoint: 앱 서버의 연결 주소 설정
reliableThreshold: 호출 명령어 검출을 위한 문턱값 설정
wuSensitivity: 호출 명령어 검증을 위한 사용자 상대 민감도
log: 디버깅용 로그 설정
crashReporterID: 크래시 보고자 구분용 식별자 설정
timezoneOffset: 타임존 오프셋 설정
timezoneID: 타임존 아이디 설정
voiceType: 목소리 설정
toneType: 말투 설정
value String 필수 위에 선택한 Key에 대한 Value 값
locale에 해당되는 단말의 locale 정보값
inactivity에 해당되는 단말의 Idle 시간값(0 또는 공백)
adid에 해당되는 단말의 Advertising ID값
volume에 해당되는 현재 볼륨 레벨값
muted에 해당되는 음소거 여부 설정값
    - true: 음소거를 원할 경우
    - false: 음소거를 원하지 않을 경우
availableWuws 설정 시, 스피커 앱에서 지원하는 Wake-up Word 목록 업로드용 데이터
    - 콤마로 나열(ex.헤이 카카오, 카카오야, 카카오, 카카오 미니)
wuw에 해당되는 설정된 Wake-up Word 값
micMuted에 해당하는 마이크 음소거 여부값
    - true: 마이크 음소거 설정
    - false: 마이크 음소거 미설정
recognitionTimeout의 클라이언트 인식 대기 시간값
    - 단위: milliesecond, 기본값: 15000(15초)
pinning에 해당되는 SSL pinning 활성화 여부 설정값
    - true: SSL pinning 활성화 시
    - false: SSL pinning 비활성화 시
appServerEndpoint에 해당되는 앱 서버의 연결 주소값
reliableThreshold 설정 시, 명령어 검출에 사용되는 문턱값
wuSensitivity의 호출 명령어 검증을 위한 사용자 상대 민감도
log에 해당되는 디버깅용 로그
crashReporterID에 해당되는 크래시 보고자 구분용 식별자
timezoneOffset에 해당되는 타임존 오프셋값
timezoneID에 해당되는 타임존 아이디값
voiceType에 해당되는 목소리값 설정
    - summer: 감성적인 목소리(여성)
    - roman: 차분한 목소리(남성)
    - spring: 밝은 목소리(여성)
    - ryan: 다정한 목소리(남성)

* Service Agent마다 사용 가능한 목소리가 다르므로 별도 문의 필요
toneType에 해당되는 말투값 설정
    - default: 친절한 말투
    - friendly: 친구 같은 말투

BootUp

System.BootUp는 애플리케이션이 재시작되어 네트워크가 연결될 때, Service Agent가 KVS로 전송하는 Event입니다.

Request Syntax

코드예제System.BootUp Request Syntax
{
	"instruction": {
		"header": {
			"type": "System.Bootup",
			"messageId": "{{STRING}}",
		},
	  	"body": {
			"uptime": {{LONG}},
			"log": "{{STRING}}"
	  	}
	}
}

Request Header

System.BootUp Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의

Request Body

System.BootUp Request Body
파라미터 타입 필수 여부 설명
uptime Long 필수 애플리케이션이 구동된 시간
log String 필수 애플리케이션의 상태 로그

Exception

System.Exception는 Service Agent가 KVS가 전송한 Instruction을 실행할 수 없을 때, Service Agent가 KVS로 전송하는 Event입니다. Event 전송 시, Service Agent는 State를 포함한 모든 Service Agent의 구성 요소 상태를 전달해야 합니다.
State에 대한 자세한 설명은 State를 참고하시기 바랍니다.

Request Syntax

코드예제System.Exception Request Syntax
{
	"event" :{
			"header" :{
				"type": "System.Exception",
				"messageId": "{{STRING}}",
			},
	  "body":{
				"instruction": "{{STRING}}", 
				"error": {
					"type": "{{STRING}}",
					"token":  "{{STRING}}",
				  	"message": "{{STRING}}"
				}
		 }
	}
}

Request Header

System.Exception Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의

Request Body

System.Exception Request Body
파라미터 타입 필수 여부 설명
instruction String 필수 해당 Instruction이 발생한 시간
Object 필수 에러 발생 정보
type String 필수 Service Agent가 KVS의 Instruction을 실행하지 못한 에러 유형
UNEXPECTED_PROTOCOL: Instruction의 형식 또는 Body가 Instruction의 사양을 따르지 않음
INTERNAL_ERROR: Instruction 처리 중 지정된 범주에 속하지 않음
token String 선택 에러가 발생했을 때 KVS 서버로부터 전달받은 Token이 있는 경우 명시
message String 필수 종료 이유를 안내하는 메시지

Idle

System.Idle는 SubscribeNextIdle Instruction에서 주어진 interval 동안 Service Agent의 유휴 상태가 지속될 경우, Service Agent가 KVS로 전송하는 Event입니다. 유휴 상태란 Recognizer.Text Event가 진행 중이지 않으면서 발화, 재생 콘텐츠가 없는 경우를 의미합니다.

안내
System.Idle 인터페이스는 1.1 버전부터 지원합니다.

Request Syntax

코드예제System.Idle Request Syntax
{
	"event" :{
			"header" :{
				"type": "System.Idle",
				"messageId": "{{STRING}}",
				"dialogRequestId": "{{STRING}}"
			},
	  "body":{
				"token": "{{STRING}}"
	  }
	}
}

Request Header

System.Idle Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의
dialogRequestId String 필수 Recognizer 인터페이스의 특정 Event에 대한 응답(Instruction)을 상호 연관시키는데 사용되는 고유 ID
- 해당 Event 생성 시점에 Service Agent에서 임의의 UUID로 정의

Request Body

System.Idle Request Body
파라미터 타입 필수 여부 설명
token String 필수 이전에 구독 요청한 SubscribeNextIdle Instruction의 토큰
안내
대표 명령어 기능을 지원하기 위해서는 반드시 System.Idle 인터페이스를 구현해야 합니다.
대표 명령어 시나리오는 [카카오 i 기술문서] 대표 명령어를 참고하시기 바랍니다.

RequestCanceled

System.RequestCanceled는 Service Agent가 발화 인식 요청을 받고 KVS에 첨부 데이터를 전송하는 중, 해당 요청을 취소 할 때 다음 파트에 전송하는 Event입니다.

Request Syntax

코드예제System.RequestCanceled Request Syntax

{
	"event" :{
			"header" :{
				"type": "System.RequestCanceled",
				"messageId": "{{STRING}}",
				"dialogRequestId": "{{STRING}}"
			},
	  "body":{
				"cause": "{{STRING}}"
	  }
	}
}

Request Header

System.RequestCanceled Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의
dialogRequestId String 선택 Recognizer 인터페이스의 특정 Event에 대한 응답(Instruction)을 상호 연관시키는데 사용되는 고유 ID
- 해당 Event 생성 시점에 Service Agent에서 임의의 UUID로 정의

Request Body

System.RequestCanceled Request Body
파라미터 타입 필수 여부 설명
cause String 필수 요청을 취소한 원인

RequestCompleted

System.RequestCompleted는 Service Agent가 Multipart Message로 첨부 데이터를 전달할 때, 첨부 데이터 전송이 정상적으로 완료되었음을 Multipart 중 마지막 파트에 전달하는 Event입니다. 카카오 i 서버에서 전송된 첨부 데이터를 실시간 처리 중 Service Agent에서 취소를 한 경우에는 첨부 데이터 전송을 중단하고, 마지막 파트에 System.RequestCanceled Event를 전송하여 현재까지 전송된 첨부 데이터의 처리 결과를 무시하도록 합니다.

안내
첨부 데이터 전송 후 마지막 파트에 System.RequestCanceled 또는 System.RequestCompleted가 전달되지 않으면, System.RequestCompleted가 전송된 것과 동일하게 첨부 데이터 전송이 정상적으로 완료된 것으로 간주합니다.
예를 들어, Service Agent에서 카카오 i 서버로 음성인식을 요청할 때 Multipart Message의 <The First Part>에는 Recognizer.Speech Event의 Json 데이터, <The Second Part>에는 오디오 바이너리, <The Third Part>에는 System.RequestCompleted Event의 JSON 데이터를 전달합니다.

Request Syntax

코드예제System.RequestCompleted Request Syntax

{
	"event" :{
			"header" :{
				"type": "System.RequestCompleted",
				"messageId": "{{STRING}}",
				"dialogRequestId": "{{STRING}}"
			},
	  "body":{}
	}
}

Request Header

System.RequestCompleted Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의
dialogRequestId String 선택 Recognizer 인터페이스의 특정 Event에 대한 응답(Instruction)을 상호 연관시키는데 사용되는 고유 ID
- 해당 Event 생성 시점에 Service Agent에서 임의의 UUID로 정의

Request Body

Request Body는 없습니다.

Instruction

Instruction Message 수신을 위한 Down Channel 생성 방식은 다음과 같습니다.

Instruction Message 호출 방식
메서드 요청 URL
GET /{{API version}}/instructions

RequestSynchronizeState

System.RequestSynchronizeState는 KVS가 Service Agent로 State를 동기화하고 서버에서 변경된 세팅 값을 Service Agent에 반영하도록 지시하는 Instruction입니다. 이에 대한 응답으로 Service Agent는 주어진 내용을 반영 후 System.SynchronizeState Event를 전송해야 합니다.

Request Syntax

코드예제System.RequestSynchronizeState Request Syntax
{
		"instruction" :{
			"header" :{
				"type": "System.RequestSynchronizeState",
				"messageId": "{{String}}",
				"dialogRequestId": "{{String}}"
			},
      "body" :{
				"settings": [
									{
											"key": "{{STRING}}",
											"value": "{{STRING}}"
								   }
				  ]
			}
		}
	}
}

Request Header

System.RequestSynchronizeState Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의
dialogRequestId String 선택 Recognizer 인터페이스의 특정 Event에 대한 응답(Instruction)을 상호 연관시키는데 사용되는 고유 ID
- 해당 Event 생성 시점에 Service Agent에서 임의의 UUID로 정의

Request Body

System.RequestSynchronizeState Request Body
파라미터 타입 필수 여부 설명
settings Object 필수 Key와 Value 값을 가지는 상위 항목

ClearCache

System.ClearCache는 KVS가 Service Agent 자체적으로 사용하고 있는 캐시를 모두 제거하도록 지시하는 Instruction입니다.

Request Syntax

코드예제System.ClearCache Request Syntax
{
	"instruction" :{
			"header" :{
				"type": "ClearCache",
				"messageId": "test",
				"dialogRequestId": "test"
			},
	  "body":{
	  }
	}
}

Request Header

System.ClearCache Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의
dialogRequestId String 선택 Recognizer 인터페이스의 특정 Event에 대한 응답(Instruction)을 상호 연관시키는데 사용되는 고유 ID
- 해당 Event 생성 시점에 Service Agent에서 임의의 UUID로 정의

Close

System.Close는 KVS가 Service Agent에 서버와의 HTTP/2 연결을 종료하도록 지시하는 Instruction입니다.

Request Syntax

코드예제System.Close Request Syntax
{
	"instruction" :{
			"header" :{
				"type": "System.Close",
				"messageId": "{{STRING}}",
			},
	  "body":{
			"type": "{{STRING}}",
			"token": "{{STRING}}",
			"message": "{{STRING}}"
	  }
	}
}

Request Header

System.Close Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의

Request Body

System.Close Request Body
파라미터 타입 필수 여부 설명
type String 필수 KVS가 Service Agent에 HTTP/2 연결을 종료하도록 지시하는 유형
LOG_OUT_BY_USER: 사용자가 로그아웃을 한 경우
- Service Agent는 KVS와의 연결을 끊고 로그아웃 처리
- 반복되거나 켜져 있는 LED 상태를 표시하는 Led.LedState를 삭제
SERVER_SHUTDOWN: 서버가 닫힌 경우
- KVS는 종료 전에 접속된 Down Channel로 해당 Instruction을 보내고 더 이상 요청을 받아들이지 않음
- 진행 중인 요청이 있는 경우 최대 timeout만큼 기다린 후 종료
- Service Agent는 이 Instruction을 받으면 더 이상 새로운 요청을 하지 않고, 진행 중인 요청이 모두 처리되면 HTTP/2 연결을 모두 끊고 재접속해야 함
token String 선택 식별자
message String 선택 종료 이유를 안내하는 메시지

Heartbeat

System.Heartbeat는 주기적으로 KVS와 연결된 Down Channel로 Keepalive 연결을 목적으로 하는 Instruction입니다. Service Agent는 주기적으로 해당 Instruction의 수신 여부를 확인하여 Down Channel이 유효한지 검사하며, Service Agent가 수행해야 할 별도의 처리는 없습니다.

Request Syntax

코드예제System.Heartbeat Request Syntax
{
	"instruction" :{
			"header" :{
				"type": "System.Heartbeat",
				"messageId": "{{STRING}}",
			},
	  "body":{
				"time": "{{STRING}}",
	  }
	}
}

Request Header

System.Heartbeat Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의

Request Body

System.Heartbeat Request Body
파라미터 타입 필수 여부 설명
time String 필수 해당 Instruction이 전송된 시간

SubscribeNextIdle

System.SubscribeNextIdle은 Service Agent의 유휴 상태가 일정 시간 이상 지속될 경우 KVS가 Service Agent에 System.Idle Event를 전달하도록 지시하는 Instruction입니다. 유휴 상태란 Recognizer.Text Event가 진행 중이지 않으면서 발화 또는 재생 콘텐츠가 없는 경우를 의미합니다.

안내
SubscribeNextIdle 인터페이스는 1.1 버전부터 지원합니다.

Request Syntax

코드예제System.SubscribeNextIdle Request Syntax
{
	"instruction" :{
		"header" :{
			"type": "System.SubscribeNextIdle",
			"messageId": "{{STRING}}",
			"dialogRequestId": "{{STRING}}"
			},
	  	"body":{
			"token": "{{STRING}}",
			"idleType": "{{STRING}}",
			"interval": {{LONG}},
			"ttl": {{LONG}},
			"suspendPlayMs": {{LONG}}
	  }
	}
}

Request Header

System.SubscribeNextIdle Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의
dialogRequestId String 선택 Recognizer 인터페이스의 특정 Event에 대한 응답(Instruction)을 상호 연관시키는데 사용되는 고유 ID
- 해당 Event 생성 시점에 Service Agent에서 임의의 UUID로 정의

Request Body

System.SubscribeNextIdle Request Body
파라미터 타입 필수 여부 설명
token String 필수 대표 명령어(WORKFLOW) 작업의 토큰
idleType String 선택 idle 판단 기준
DIALOG_PLAY: 마이크가 열린 상태가 아니면서 음성 답변, 재생 콘텐츠가 없어야 함
DIALOG: 마이크가 열린 상태, 음성 답변 상태가 아니어야 하지만 재생 콘텐츠의 재생 여부는 상관없음
interval Long 선택 유휴 상태의 지속 시간(ms 단위)
ttl Long 선택 Event 구독에 대한 유효 시간(ms 단위)
- 0인 경우, default 값으로 적용
suspendPlayMs Long 선택 idleTypeDIALOG일 때, audio resume 지연 시각 지정
안내
대표 명령어 기능을 지원하기 위해서는 반드시 System.SubscribeNextIdle 인터페이스를 구현해야 합니다.
자세한 설명은 [카카오 i 기술문서] 대표 명령어를 참고하시기 바랍니다.

UnsubscribeIdle

System.UnsubscribeIdle은 KVS가 Service Agent에 구독 요청한 Idle의 구독 취소를 요청할 경우, 이전에 구독 요청한 token을 포함하여 지시하는 Instruction입니다.

안내
SubscribeNextIdle 인터페이스는 1.2 버전부터 지원합니다.

Request Syntax

코드예제System.UnsubscribeIdle Request Syntax

{
	"instruction" :{
			"header" :{
				"type": "System.UnsubscribeIdle",
				"messageId": "{{STRING}}",
				"dialogRequestId": "{{STRING}}"
			},
	  "body":{
				"token": "{{STRING}}"
	  }
	}
}

Request Header

System.UnsubscribeIdle Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름
messageId String 필수 특정 메시지를 나타내는 고유 ID
- 해당 메시지의 생성 주체가 임의의 UUID로 정의
dialogRequestId String 필수 Recognizer 인터페이스의 특정 Event에 대한 응답(Instruction)을 상호 연관시키는데 사용되는 고유 ID
- 해당 Event 생성 시점에 Service Agent에서 임의의 UUID로 정의

Request Body

System.UnsubscribeIdle Request Body
파라미터 타입 필수 여부 설명
token String 필수 이전에 구독 요청한 SubscribeNextIdle Instruction의 토큰

State

SystemState

디버깅이 필요한 경우에 Service Agent의 시스템 상태 정보를 Key와 Value로 표시하여 전달합니다. 해당 State는 선택적으로 전송됩니다.

Request Syntax

코드예제System.SystemState Request Syntax

{
    "header": {
        "type": "System.SystemState"
    },
    "body": {
        "properties": [
            {
                "key":"{{STRING}}",
                "value":"{{STRING}}"
            }
        ]
    }
}

Request Header

System.SystemState Request Header
파라미터 타입 필수 여부 설명
type String 필수 해당 인터페이스 이름

Request Body

System.SystemState Request Body
파라미터 타입 필수 여부 설명
key String 필수 Key 항목
- 상황에 맞게 아래 속성값을 선택해서 사용
wifi: 와이파이 정보(스피커용)
stateHistory: 스피커의 현재 상태 리포트
sysCall: CPU를 점유하는 top 프로세스
refreshedAt: SystemState 갱신 시점
idleAt: IDLE 상태가 된 시간
memory: availableHeapSize
thread: 사용 중인 쓰레드
value String 필수 위에 선택한 Key에 대한 Value 값
wifi에 해당하는 와이파이 정보(스피커용)
stateHistory에 해당하는 스피커의 현재 상태 리포트
sysCall에 해당하는 CPU를 점유하는 top 프로세스
refreshedAt에 해당하는 SystemState 갱신 시점
idleAt에 해당하는 IDLE 상태가 된 시간
memory에 해당하는 availableHeapSize
thread에 해당하는 사용 중인 쓰레드
이 문서가 만족스러운 이유를 알려주세요.
이 문서에 아쉬운 점을 알려주세요.
평가해주셔서 감사합니다.

더 자세한 의견은 documentation@kakaoenterprise.com 으로 제보해주세요.