Session

Play 와 Client 간의 세션을 유지하기 위한 규격

Version

최신 버전은 1.0 입니다.

Version Date Description
1.0 2020.06.05 규격 추가

SDK Interface

SessionAgent 사용

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

  • Android
  • iOS
  • Linux

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

복사성공!
1
val sessionAgent = nuguAndroidClient.getAgent(SessionAgent.NAMESPACE)

보이스 크롬 UI 구성을 위해 TTS interface, ASR interface, Chips interface, Session interface 를 병합해주는 DialogUXStateAggregator 를 제공합니다.

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

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

보이스 크롬 UI 구성을 위해 TTS interface, ASR interface, Chips interface, Session interface 를 병합해주는 DisplayStateAggregator 를 제공합니다.

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

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

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

복사성공!
1
2
3
4
5
6
auto session_handler(std::shared_ptr<ISessionHandler>(
        CapabilityFactory::makeCapability<SessionAgent, ISessionHandler>()));

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

세션 상태 정보

세션 유지상태 정보를 확인할 수 있습니다.

  • Android
  • iOS
  • Linux

DialogUXStateAggregatorInterface.Listener 를 추가합니다.

복사성공!
1
2
3
4
5
6
val listener = object: DialogUXStateAggregatorInterface.Listener {
    override fun onDialogUXStateChanged(newState: DialogUXState, dialogMode: Boolean, chips: RenderDirective.Payload?, sessionActivated: Boolean) {
        ...
    }
}
nuguAndroidClient.addDialogUXStateListener(listener)

DialogStateDelegate 를 추가합니다.

복사성공!
1
2
3
4
5
6
class MyDialogStateDelegate: DialogStateDelegate {
    func dialogStateDidChange(_ state: DialogState, isMultiturn: Bool, chips: [ChipsAgentItem.Chip]?, sessionActivated: Bool) {
        ...
    }
}
dialogStateAggregator.add(delegate: MyDialogStateDelegate())

ISessionListener 를 추가합니다.

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
class MySessionListener : public ISessionListener {
public:
    ...

    void onState(SessionState state, const std::string& dialog_id) override
    {
        ...
    }

    ...
};
auto session_listener(std::make_shared<MySessionListener>());
CapabilityFactory::makeCapability<SessionAgent, ISessionHandler>(session_listener.get());

Context

복사성공!
1
2
3
4
5
6
7
8
9
10
11
{
  "Session": {
    "version": "1.1",
    "list": [
      {
        "sessionId": "{{STRING}}",
        "playServiceId": "{{STRING}}"
      }
    ]
  }
}
parameter type mandatory description
list array N 현재 활성화 되어 있는 세션 리스트
list.sessionId string Y -
list.playServiceId string Y -

Directives

Set

복사성공!
1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "Session": {
    "namespace": "Session",
    "name": "Set",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}",
    "version": "1.0"
  },
  "payload": {
    "playServiceId": "{{STRING}}",
    "sessionId": "{{STRING}}"
  }
}
parameter type mandatory description
sessionId string Y