Text

텍스트 명령을 Play 로 전달하기 위한 규격

Version

최신 버전은 1.7 입니다.

Version Date Description
1.0 2019.11.24 규격 추가
1.1 2020.03.23 TextInput event 에 asrContext 필드 추가
1.2 2020.06.05 TextInput event 의 sessionId 필드 삭제
TextInput event 의 asrContext 에 playServiceId 필드 추가
1.3 2020.09.02 TextSource 에 playServiceId 추가
1.4 2020.11.13 TextRedirect directive 추가
1.5 2020.11.30 TextSourceFailed, TextRedirectFailed event 추가
1.6 2021.12.09 ExpectTyping Directive 추가
1.7 2022.04.05 TextInput 이벤트에 source 필드 추가

SDK Interface

TextAgent 사용

Text interface 규격에 따른 디바이스의 동작 제어는 TextAgent 가 처리합니다.

  • Android
  • iOS
  • Linux

NuguAndroidClient instance 를 통해 TextAgent instance 에 접근할 수 있습니다.

복사성공!
1
val textAgent = nuguAndroidClient.textAgent

NuguClient instance 를 통해 TextAgent instance 에 접근할 수 있습니다.

복사성공!
1
let textAgent = nuguClient.textAgent

CapabilityFactory::makeCapability 함수로 TextAgent 를 생성하고 NuguClient 에 추가해 주어야합니다.

복사성공!
1
2
3
4
5
6
auto text_handler(std::shared_ptr<ITextHandler>(
        CapabilityFactory::makeCapability<TextAgent, ITextHandler>()));

nugu_client->getCapabilityBuilder()
    ->add(text_handler.get())
    ->construct();

텍스트 명령

임의의 텍스트 명령을 TextInput event 로 요청할 수 있습니다.

  • Android
  • iOS
  • Linux
복사성공!
1
textAgent.requestTextInput(text)
복사성공!
1
textAgent.requestTextInput(text: textInput, requestType: .normal)
복사성공!
1
text_handler->requestTextInput(text)

Context

복사성공!
1
2
3
4
5
{
  "Text": {
    "version": "1.5"
  }
}

Directive

TextSource

  • 외부 시스템에서 Device Gateway를 사용하여 직접 연동하는 경우에만 사용
복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "header": {
    "namespace": "Text",
    "name": "TextSource",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.5"
  },
  "payload": {
    "text": "{{STRING}}",
    "token": "{{STRING}}",
    "playServiceId": "{{STRING}}"
  }
}
parameter type mandatory description
text string Y 디바이스로 전달한 뒤 context를 추가하여 다시 Device Gateway로 전송해야 하는 text
token string Y 전송하는 text를 식별하기 위한 unique string
playServiceId string N 값이 존재하면 TextInput의 playServiceId 값을 설정하는데 사용 ASR.ExpectSpeech 보다 우선하여 동작 함.
(TextSource 에 playServiceId 가 있는 경우 ASR.ExpecSpeech 에서 받은 playServiceId, domainTypes, asrContext 를 TextInput 으로 전달하지 않음)

TextRedirect

Play에서 다른 Play로 처리를 넘기는데, 특정 Text를 전달해서 실행하고자 하는 경우에 사용

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "header": {
    "namespace": "Text",
    "name": "TextRedirect",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.5"
  },
  "payload": {
    "text": "{{STRING}}",
    "token": "{{STRING}}",
    "playServiceId": "{{STRING}}",
    "targetPlayServiceId": "{{STRING}}"
  }
}
parameter type mandatory description
text string Y 디바이스로 전달한 뒤 context를 추가하여 다시 Device Gateway로 전송해야 하는 text
token string Y 전송하는 text를 식별하기 위한 unique string
playServiceId string Y 디렉티브를 지시한 PlayServiceId (Play에서 NPK 통한 응답일때는 라우터가 알아서 채워줌)
targetPlayServiceId string N 값이 존재하면 TextInput의 playServiceId 값을 설정하는데 사용 명확히 라우팅되어야 하는 Play를 지정하는 경우에 사용되고, 지정하지 않으면 라우팅 로직에 의해 라우팅 ASR.ExpectSpeech 보다 우선하여 동작 함.
(TextRedirect에 targetPlayServiceId가 있는 경우 ASR.ExpecSpeech 에서 받은 playServiceId, domainTypes, asrContext 를 TextInput 으로 전달하지 않음)

ExpectTyping

Text input을 했을때 멀티턴 Play로 강제 라우팅 할 때 사용

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "header": {
    "namespace": "Text",
    "name": "TextSource",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.5"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "domainTypes": [],
    "asrContext": {
      "task": "{{STRING}}",
      "sceneId": "{{STRING}}",
      "sceneText": [
        "{{STRING}}"
      ],
      "playServiceId" : "playServiceId"
    }
  }
}
parameter type mandatory description
playServiceId string N 값이 존재하면 이후 입력하는 TextInput 이벤트의 playServiceId 값을 설정하는데 사용
domainTypes string N TextInput 이벤트로 입력되는 text 분석 시 NLU에서 사용할 domainType 셋팅 정보(ASR.ExpectSpeech의 domainTypes와 동일한 용도)
asrContext object N ExpectTyping directive 수신 후 ASR.Recognize 이벤트 발생 시 포함 되어야 함
asrContext.task string N -
asrContext.sceneId string N -
asrContext.playServiceId string N -
asrContext.sceneText Array N -

Events

TextInput

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "header": {
    "namespace": "Text",
    "name": "TextInput",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.5"
  },
  "payload": {
    "text": "{{STRING}}",
    "token": "{{STRING}}",
    "sessionId": "{{STRING}}",
    "playServiceId": "{{STRING}}",
    "domainTypes": [
      "{{STRING}}"
    ],
    "source" : "{{STRING}}"
  }
}
parameter type mandatory description
text string Y TextSource directive 에서 전달한 text 디바이스에서 생성한 임의의 text
token string N TextSource에 의해 생성된 이벤트인 경우 TextSource의 token을 그대로 사용
Chips interface, Display interface, Routine interface 에 의해 생성된 이벤트의 경우 해당 directive 에서 전달받은 token 을 사용
디바이스에서 생성된 text는 임의의 값을 갖거나 필드를 갖지 않아도 됨
playServiceId string N ASR/Display/Routine/Text interface 에 의해 생성된 이벤트의 경우 해당 directive 에서 전달받은 playServiceId 를 사용
domainTypes array of string N ExpectSpeech에 의한 발화인 경우에만 ExpectSpeech에서 받은 domainTypes를 적용
source string N TextInput을 유발한 원인에 대한 정보 값

TextSourceFailed

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "header": {
    "namespace": "Text",
    "name": "TextSourceFailed",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.5"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "token": "{{STRING}}",
    "errorCode": "{{STRING}}"
  }
}
parameter type mandatory description
token string Y TextSource에서 정의한 token
errorCode string Y NOT_SUPPORTED_STATE

TextRedirectFailed

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "header": {
    "namespace": "Text",
    "name": "TextRedirectFailed",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.5"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "token": "{{STRING}}",
    "errorCode": "{{STRING}}"
  }
}
parameter type mandatory description
token string Y TextSource에서 정의한 token
errorCode string Y NOT_SUPPORTED_STATE