Skip to content
This repository has been archived by the owner on May 30, 2023. It is now read-only.

Clova Session

Yuichi Morimichi edited this page Sep 14, 2018 · 2 revisions

SessionHolder

Clova Session is managed by SessionHolder

The usage of SessionHolder and its attribute values is as follows.

@IntentMapping("UpdateItemOrder")
CEKResponse handleUpdateOrder(SessionHolder sessionHolder, 
                              @SessionValue Optional<ItemOrder> itemOrder) {
    // 1st:empty, 2nd:contains ItemOrder instance
    System.out.println(itemOrder);
    // 1st:null, 2nd:Map instance
    System.out.println(itemOrder.getSession().getSessionAttribute().get("itemOrder")); 
    
    ItemOrder newItemOrder = itemOrder.orElseGet(() -> createItemOrder());
    sessionHolder.setAttribute("itemOrder", newItemOrder);

    return CEKResponse.builder()
                      .outputSpeech(OutputSpeech.text("Created an order."))
                      .shouldEndSession(false)
                      .build();
}

SessionHolder can be obtained with handler arguments. Its attribute value is also the same. By setting the attribute value with SessionHolder.setAttribute(name, value), you can retrieve its attribute value in the next request in the same session.