대화 컴포넌트

대화 컴포넌트는 자연어 기반 챗봇 엔진의 특성을 잘 이해한 후 꼭 필요한 곳에만 써야 효과적입니다.

대화 생성 방법에 익숙해졌다면 고급 기능인 대화 컴포넌트를 활용해 보세요. 대화 컴포넌트는 기능은 챗봇의 답변에서 좀 더 사용자 친화적인 답변을 할 수 있도록 도와주는 기능입니다.

네이버 클라우드 플랫폼 챗봇은 4가지의 대화 컴포넌트를 제공합니다.

  • 엔티티: 인명, 기관명, 장소, 날짜와 상품명 등 도메인 특화된 단어들이 등록된 사전을 의미합니다.
  • 정규식 변수 : 도메인에서 반복적으로 쓰이는 표현을 등록하여 패턴형 엔티티 또는 정규식 질문에 활용할 수 있습니다.
  • 액션 메소드: 외부의 URL을 호출하여 그 응답 결과값을 답변에 포함하여 제공하는 기능입니다.
  • 폼: 객관식 선택지를 제공하거나 주관식 답변을 유도하여, 그에 따른 피드백으로 시나리오를 이어가는 기능입니다.

엔티티

엔티티는 인명, 기관명, 장소, 날짜와 상품명 등 도메인 특화된 단어들이 등록된 사전을 의미합니다.

엔티티에는 빌트인으로 등록되어 모든 도메인에서 공통으로 사용 가능한 시스템 엔티티와, 작업자가 직접 등록하여 특정 도메인에서만 사용 가능한 도메인 엔티티로 나눌 수 있습니다. 또한 챗봇 빌더 내부에 직접 엔티티를 정의하는 대신, 외부 DB에 저장된 엔티티 데이터를 활용하는 API 연동현 엔티티도 지원합니다. 엔티티를 생성, 수정, 삭제한 후에는 빌드 또는 변경된 설정 적용을 완료해야 반영됩니다.

① 도메인 엔티티

chatbot-03-019.png

엔티티 생성 버튼을 클릭하여 엔티티를 생성할 수 있습니다.

chatbot-03-020.png

  • 엔티티 이름 : 엔티티의 이름을 입력합니다.
  • 엔티티 코드 : 해당 엔티티에 부여된 코드가 노출됩니다.
  • 엔티티 유형 : 엔티티의 유형을 선택합니다.
  • 사전형 엔티티 : 사전기반의 엔티티 유형입니다. 입력된 사전형의 엔티티 데이터는 모델 학습에 활용됩니다.
    • 대표어: 엔티티에 등록할 대표어를 입력합니다.
    • 유사어: 다양한 표현의 유사어를 입력합니다. 복수의 유사어를 입력하는 경우 콤마 (,)로 구분합니다.
    • 도메인 엔티티 내에서 중복되는 단어를 대표어 또는 유사어로 등록할 수 없으니 주의해야합니다.
  • 패턴형 엔티티 : 정규식 패턴 기반의 엔티티 유형입니다. 입력된 패턴의 엔티티는 모델학습에 활용되지는 않습니다.
    • 패턴 정의 : 정규 표현식을 활용하여 패턴으로서 엔티티를 분석합니다. 단, 패턴형 엔티티에는 사전형 엔티티, 시스템 엔티티, 시스템 변수, 도메인 변수만 입력할 수 있습니다.

② 시스템 엔티티

chatbot-03-020a.png

  • 해당 도메인에서 사용할 시스템 엔티티를 활성화 시킬 수 있습니다.
  • 만약 태스크 또는 정규식 질문에서 해당 시스템 엔티티를 참조하고 있는 경우 비활성화 할 수 없습니다.

③ API 연동형 엔티티

API 연동형 엔티티는 일반 엔티티와는 다르게 태스크의 슬롯으로 사용하거나, 답변 조건에서 엔티티 조건을 체크할 때, 그리고 액션메소드v1을 호출할때만 제한적으로 사용할 수 있습니다.

chatbot-03-020b.png

  • URL : 엔티티를 분석할 수 있는 API의 주소를 입력합니다. 챗봇은 입력된 URL로 형태소 분석한 결과를 포함하여 호출하게 됩니다.
  • 엔티티 생성 : API 연동형 엔티티의 이름을 입력하여 엔티티를 생성합니다.
  • 요청 형식은 다음과 같습니다.
{
  "query": "한국살아",
  "nlpResult": {
    "data": [
      {
        "words": [
          {
            "in": [
              {
                "morph": "한국",
                "tag": "NOUN",
                "ner": "Ner=B-한국 엔티티 이름",
                "lemma": null,
                "start": 0,
                "end": 5,
                "feature": 0,
                "additionals": ""
              },
              {
                "morph": "살아",
                "tag": "NORMALVERB",
                "ner": "Ner=O",
                "lemma": "살다",
                "start": 6,
                "end": 11,
                "feature": 0,
                "additionals": "아"
              }
            ],
            "word": "한국살아"
          }
        ]
      }
    ],
    "success": true
  }
}
  • 응답 형식은 다음과 같습니다.
{
  "code": "OK",
  "message": "Option[String]",
  "entity": [
    {
      "name": "국가",
      "userInput": "한국",
      "represent": "Korea"
    }
  ]
}

④엔티티 태깅

등록된 사전형 엔티티는 대화의 일반 질문에 태깅할 수 있습니다. 엔티티를 등록한 후 모델 빌드가 완료되었다면, 일반 질문 입력 시 자동으로 해당하는 엔티티가 태깅됩니다. 만약 수동으로 엔티티를 태깅하기 위해서는 다음과 같은 방법을 따릅니다.

  1. 먼저 '포테이토 피자'를 마우스로 끌어 선택합니다.
  2. 엔티티 선택 창이 나타나면 태깅하고자 하는 엔티티를 선택합니다.
  3. 새로운 대표어로 추가하거나, 이미 등록된 대표어의 유의어로 추가할 수 있습니다.
  4. 만약 엔티티가 없는 경우 엔티티 생성을 클릭하여 신규 생성합니다.

chatbot-03-062.png

엔티티가 태깅된 경우에는 대화의 질문에 엔티티가 파란색으로 표시됩니다. 이렇게 엔티티가 태깅된 질문은 모델 학습에 반영되어 사용자의 발화를 인식하는데 도움을 줍니다.

정규식 변수

정규식 변수에는 빌트인으로 등록되어 모든 한국어 도메인에서 공통으로 사용 가능한 시스템 변수와, 작업자가 직접 등록하여 특정 도메인에서만 사용 가능한 도메인 변수로 나눌 수 있습니다. 정규식 변수를 생성, 수정, 삭제한 후에는 빌드 또는 변경괸 설정 적용을 완료해야 반영됩니다.

① 도메인 변수

chatbot-03-019.png

도메인 변수 생성 버튼을 클릭하여 도메인 변수를 생성할 수 있습니다.

chatbot-03-019.png

  • 도메인 변수 이름 : 도메인 변수의 이름을 입력합니다.
  • 변수 정의 : 정규 표현식을 활용하여 도메인 변수를 정의합니다. 단, 도메인 변수에는 사전형 엔티티, 시스템 변수만 입력할 수 있습니다.

② 시스템 변수

chatbot-03-019.png

  • 한국어 어미 활용형 변수를 활용하여 다양한 패턴의 사용자 발화를 분석할 수 있습니다.
  • 만약 태스크 또는 정규식 질문에서 해당 시스템 엔티티를 참조하고 있는 경우 비활성화 할 수 없습니다.

액션 메소드

액션 메소드는 기본적으로 ${ActionMethodName}의 형태로 정의되며 지원하는 액션메소드에는 "액션메소드V1.0, 액션메소드V2.0, LINE PAY, Naver Pay 그리고 CEK Request 전송"이 있습니다.

① 액션메소드V1.0

  • GET 방식

    chatbot-03-021.png

    • 이름 : 액션메소드의 이름을 입력합니다.

    • URL : 호출할 URL을 입력합니다.

    • 응답 형식은 다음과 같습니다.

      HttpMethod: GET
      Http Headers: {
        X-KAA-USERENTITY=test_date%3dsaturday%26test_time%3d3o%27clock%26test_num%3d2people, 
        X-KAA-USERKEY=4d4cf7425f5b4769807fb4cba66bd987,
        X-KAA-USERMSG=%E3%85%87,
        X-KAA-USERID=9ff4-b49e74ea22e4
      }
      body ={}
      
      • X-KAA-USERKEY: 해시된 유저 키 값을 전달합니다
      • X-KAA-USERENTITY: 태스크가 종료됐거나, 슬롯이 진행중일 때, 등장한 엔티티 정보가 담겨있습니다 엔티티키=엔티티값&엔티티키=엔티티값&... 과 같은 형식으로 들어 있으며 utf-8 로 인코딩 돼 있습니다.
      • X-KAA-USERMSG: 사용자의 발화가 담겨있습니다. 주관식 폼이 등장했을 때, 유저가 입력했을 경우만 동작합니다. utf-8로 인코딩 돼 있습니다
      • X-KAA-USERID: 사용자의 original userId가 담겨 있습니다.
      • X-KAA-CLOVA-OAUTH-ACCESS-TOKEN: Clova 플랫폼으로 요청이 들어올 경우 해당 도메인이 외부인증을 사용하고 있다면, 인증 토큰이 Clova요청에 담겨져 오게 됩니다. 해당 값을 유통하게 설정한 액션메소드를 호출한 경우, 이 해더를 통해 해당 토큰값을 전달합니다.
      • X-KAA-SESSION-ATTRIBUTES: ActionMethod의 응답값으로 이 값을 키로한 헤더값이 있다면 엔진은 잠시동안 해당 값을 기억하고 있다가, 이 값을 전달해달라는 플래그가 on인 액션메소드가 호출됐을 경우 해더에 받았던 값을 그대로 담아 전달합니다
    • 이렇게 생성한 액션메소드는 답변 필드에 입력하여, 답변이 응답되는 타이밍에 호출하게 됩니다.

      • 예를 들어 답변을 "현재 정자동의 날씨는 ${weather}도입니다."라고 정의한 경우, ${weather}의 값은 정의한 URL을 호출해서 Response로 돌아오는 정보입니다. 이 값이 '24'이면 챗봇은 "현재 정자동의 날씨는 24도입니다."라고 답변합니다.
      • 단, 액션메소드V1.0은 한 답변에 최대 2개까지 입력 가능합니다.
  • JSON(POST) 방식

    chatbot-03-022.png

    • JSON(POST) 방식은 GET 방식과 동일하나, URL 호출에 데이터를 포함하여 보낼 수 있습니다. 데이터를 보내는 형식은 JSON 형태입니다.

    • 요청 형식은 다음과 같습니다.

      HttpMethod:  POST
      Http Headers: {
        X-KAA-USERENTITY=test_date%3dsaturday%26test_time%3d3o%27clock%26test_num%3d2people, 
        X-KAA-USERKEY=4d4cf7425f5b4769807fb4cba66bd987,
        X-KAA-USERMSG=%E3%85%87,
        X-KAA-USERID=9ff4-b49e74ea22e4
      }
      body ={"state": "korea", "country": "seoul"}
      
  • 만약 액션메소드V1.0을 테스트하고싶으시다면, echo호출을 클릭해주세요.
  • 액션 메소드V1.0은 엔티티 데이터 외에도 특정 값을 함께 전송할 수 있습니다.

  • Clova OAuth Access Token 설정을 활성화하여 Clova Extension에서 인증된 사용자 계정의 Access token을 전달할 수 있습니다.

  • Session Attributes 설정을 활성화하여 특정 문자열을 X-KAA-SESSION-ATTRIBUTES 헤더에 포함하여 전달할 수 있습니다. 이때 문자열은 UTF-8로 URL 인코딩 되어야 합니다.

    • 챗봇서버가 호출한 액션 메소드 응답값의 헤더에 X-KAA-SESSION-ATTRIBUTES 값이 존재한다면, 챗봇서버는 해당 문자열을 각 유저별로 캐싱해둡니다
    • 액션 메소드 생성 시 Session Attributes 설정을 활성화하였다면 가장 최근에 캐싱된 문자열을 X-KAA-SESSION-ATTRIBUTES 헤더에 포함하여 전달합니다.

②액션메소드V2.0

액션메소드V1.0과의 차이점은 한번의 호출로 복수의 값을 받을 수 있다는 점입니다.

chatbot-03-025.png

  • 액션메소드V2.0은 JSON(POST) 방식만 지원합니다.

  • 이름 : 액션메소드의 이름을 입력합니다.

  • URL : 호출할 URL을 입력합니다.

  • 요청 형식은 다음과 같습니다.

    {
      "actionMethod": {
        "name": "액션메소드이름입니다",
        "methods": [
          {
            "args": [
              "arg1",
              "age2"
            ],
            "variableName": "답변에 포함된 변수명입니다1"
          },
          {
            "variableName": "답변에 포함된 변수명입니다2"
          }
        ]
      },
      "userInfo": {
        "id": "메신저로부터 받은 사용자의 아이디가 담겨있습니다",
        "key": "서빙 엔진 내부에서 사용하는 사용자의 고유 키를 해시한 값입니다",
        "query": "사용자가 이번 턴에 입력한 발화입니다",
        "entities": {
          "엔티티코드1": "사용자가 입력한 엔티티1",
          "엔티티코드2": "사용자가 입력한 엔티티2"
        },
        "taskEntities": {
          "엔티티이름1": "태스크의 슬롯에 채워진 엔티티1",
          "엔티티이름2": "태스크의 슬롯에 채워진 엔티티2"
        }
      }
    }
    
  • 응답 형식은 다음과 같습니다.

    {
      "data": [
        {
          "variableName": "변수명에 해당하는 부분입니다",
          "value": "variableName에 해당하는 변수를 어떤 값으로 치환할지를 결정합니다"
        }
      ]
    }
    
  • 이렇게 생성한 액션메소드는 답변 필드에 입력하여, 답변이 응답되는 타이밍에 호출하게 됩니다.

    • 답변에 액션메소드V2.0을 입력할 때는 $2{액션메소드2이름} 또는 $2{액션메소드2이름.변수명} 의 형식으로 입력합니다.
    • 예를 들어, 답변을 " ${membership.name} 고객님의 잔여포인트는 ${membership.point} 포인트 입니다."라고 정의한 경우 ${membership.name}와 ${membership.point}의 값은 정의한 URL을 호출해서 Response로 돌아오는 variableName의 value입니다. name 의 vlaue가 홍길동, point 의 value가 1000 이었다면, 챗봇은 "홍길동 고객님의 잔여포인트는 1000포인트 입니다."라고 답변합니다.
    • 단, 액션메소드V1.0은 한 답변에 최대 2개까지 입력 가능합니다.
  • 만약 액션메소드V2.0을 테스트하고싶으시다면, echo호출을 클릭해주세요.

    • $2{액션메소드이름.method} 를 입력하는 경우 ??를 에코해줍니다.
    • $2{액션메소드이름.body} 를 입력하는 경우 body를 에코해줍니다.

③ LINE PAY/ NAVER PAY

LINE PAY와 NAVER PAY 액션 메소드를 통해 간편하게 LINE PAY, NAVER PAY로 결제하는 시나리오를 구성할 수 있습니다.

LINE PAY 연동 가이드NAVER PAY 연동 가이드를 참고하여 LINE PAY, NAVER PAY 서비스를 연동한 후에 사용해주세요.

  • 가격 입력형

    chatbot-2-8-06.png

    • 입력된 가격으로 LINE PAY/NAVER PAY 결제를 진행합니다. 가격의 변동이 없는 상품을 결제할 때 활용하는 것을 권장합니다.

    • 이름: 가격 입력형의 경우 액션 메소드의 이름을 직접 입력하지 않습니다. 가격정보와 상품명을 입력하면 액션 메소드 이름이 자동완성됩니다.

    • 가격정보: 결제할 가격을 입력합니다. LINE PAY의 기준 통화는 엔(¥), NAVER PAY의 기준 통화는 원(₩) 입니다.

    • 상품명: 결제할 상품의 이름을 입력합니다.

  • API 연동형

    chatbot-03-029.png

    • 입력된 외부 URL을 호출하여 확인된 가격으로 LINE PAY/NAVER PAY 결제를 진행합니다. 가격이 고정되어 있지 않거나, 사용자가 선택한 슬롯 정보에 따라 가격이 변동되는 경우 활용하는 것을 권장합니다.
    • 이름: 액션 메소드의 이름을 입력합니다.
    • URL: 가격정보를 확인할 수 있는 외부 URL을 입력합니다.

예를 들어 사용자가 콤비네이션 피자 S사이즈 2판을 주문하였다면, 아래의 슬롯 정보를 외부 URL로 전달합니다. Response로 돌아오는 값이 '49900'이라면, 챗봇은 49,900원을 LINE PAY/NAVER PAY를 통해 결제합니다.

@피자 : 콤비네이션 피자
@피자 사이즈 : S사이즈
@피자 수량 : 2판

④CEK Request 전달

CEK Request를 전부 bypass 해주는 액션메소드입니다.

chatbot-03-030.png

  • CEK Request 전달 액션메소드는 JSON(POST) 방식만 지원합니다.
  • 이름 : 액션메소드의 이름을 입력합니다.
  • URL : CEK Request를 전달할 URL을 입력합니다.
  • CEK 에서 전달된 Request body를 전달합니다.
  • 메신저가 Clova인 경우에만 동작하며, 챗봇빌더의 수동테스트 및 자동테스트에서는 동작하지 않습니다.

폼은 사용자의 질문에 따라서 객관식 및 주관식의 질문을 제공하고, 그 답변에 따른 피드백으로 대화를 이어갈 수 있게 하는 기능입니다.

폼 이름을 정의하면, 답변에서 #{FormName}의 형태로 컴포넌트를 사용할 수 있습니다.

폼은 다음의 두 가지 타입을 제공합니다.

  • 객관식: 객관식 버튼 중에 하나의 버튼을 선택하도록 합니다.

chatbot-03-023.png

예를 들어 고객에게 확인받는 Yes/No를 객관식 폼으로 만들었다면 이 컴포넌트를 다양한 경우에 사용할 수 있습니다. 폼을 적용하려면 1) 객관식 답변 유형을 선택하여 폼을 불러오거나, 2) 답변 입력창에서 #을 입력하고 폼 목록이 보이면 상황에 맞게 선택하여 적용합니다.

  • 주관식: 챗봇의 질문에 사용자의 Text 응답을 받아서 답변을 제공하도록 합니다.

주관식 폼에서는 먼저 사용자가 질문을 하면 먼저 주관식 폼의 안내 문구를 먼저 응답합니다. 그리고 사용자의 입력이 있으면 주관식 폼의 답변을 챗봇에서 내보냅니다. 응답 흐름은 다음과 같습니다.

사용자: 견적 문의하기

챗봇 답변: 안내 메일을 받을 수 있는 이메일을 입력해주세요. 입력한 정보는 담당자에게 전달됩니다.
==> (FORM의 안내문구)

사용자: abc@navercorp.com

챗봇 답변:  담당자에게 이메일 주소를 전달했습니다. 감사합니다.
==> (FORM의 답변)

chatbot-03-023.png

주관식 폼 답변이 나가는 경우 해당 메시지에 액션 메소드가 존재한다면, 해당 액션 메소드의 헤더에 X-KAA-USERMSG를 key로 하여 utf-8로 인코딩된 메시지가 전달됩니다.

chatbot-03-023.png

연관 정보 바로가기

도메인 생성, 대화 목록과 컴포넌트 관리 및 통계 관리와 관련하여 아래 사용 가이드를 참고하실 수 있습니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...