begin.rive로 다시 돌아가서 유용한 2가지 타입이 있습니다.


Global Variables


전역 변수(Global Variables)는 봇 변수(bot variables)와 비슷하지만 봇과 관련은 없습니다. 

전역 변수는 RiveScript 인터프리터에 의해 정의 될 수 있습니다. 이번에는  RiveScript 인터프리터에 직접 영향을주는 두 가지 특수한 전역 변수에 대해서 배워 보겠습니다.


Debug Mode

! global debug = true
! global debug = false

이 전역 변수는 RiveScript 인터프리터에서 디버그 모드를 켜거나 끌 수 있습니다. 디버그 모드는 https://play.rivescript.com/에서 Debug Mode를 클릭하면 실제 어떻게 출력 되는지 볼 수 있습니다.


Recursion Depth

! global depth = 50

이 전역 변수는 RiveScript 응답은 서로 리다이렉트 할 수 있기 때문에 무한 재귀를 피할 수있는 보호 기능이 있습니다 (예를 들어, 다른 트리거로 리다이렉트되고 그 트리거가 처음 트리거로 리다이렉트하는 등).

기본적으로 제한 값으로 50으로 설정이 됩니다. 즉, 50개의 리디렉션 후에 응답을 찾을 수 없으면 "ERR: Deep Recursion Detected"라고 응답합니다.  또한 이 값은 0보다 큰수여야 합니다.


Person Substitutions


1인칭 대명사와 2인칭 대명사를 교환하기 위한 기능입니다. brain에서 정의해기 때문에 begin.rive에서 작성 되어야 합니다. 대체를 정의하기 위한 방법은 다음과 같습니다. 

! person i am    = you are
! person you are = i am
! person i'm     = you're
! person you're  = I'm
! person my      = your
! person your    = my
! person you     = I
! person i       = you

대체를 호출 하려면 <person>태그(<star>대치 가능)를 사용하거나 {person}...{/person}로 사용할 수 있습니다. 실제 예를 통해서 테스트를 해보겠습니다.

+ say *
- Umm... "<person>"

실제로 구동 상태에서 "say I am the greatest"라고 메시지를 보내면 봇은 "Umm... "you are the greatest"라고 응답할 것입니다. 만약 대치 하지 않았다고 한다면 봇은 "i am the greatest"라고 말했을 것입니다.

'프로그래밍 > RiveScript' 카테고리의 다른 글

[Tutorial] CONCLUSION  (0) 2017.03.09
[Tutorial] TAGS  (0) 2017.03.09
[Tutorial] MORE DEFINITIONS  (0) 2017.03.09
[Tutorial] The Begin Block  (0) 2017.03.09
[Tutorial] Topics  (0) 2017.03.09
[Tutorial] Conditionals  (0) 2017.03.09

Begin Block은 이전에 저희가 살펴봤던 RiveScript brain의 선택적 기능입니다.

brain에 관한 자세한 내용은 [Tutorial] The Begin File 에서 설명하고 있습니다.

Begin Block또한 begin.rive에 포함되고 토픽과 비슷한 형태로 동작합니다. 예를 들어 보겠습니다.

> begin

  + request
  - {ok}

< begin

Begin Block 응답을 가져오기 위한 전처리와 후처리로 사용됩니다. 

Begin Block이 있으면 사용자가 말하는 각 메시지에 대해 요청 트리거가 작동됩니다.

응답에 {ok}태그가 있으면 사용자 메시지에 대한 응답을 가져오게 됩니다.

> begin

  // If we don't know their name, set the new_user topic and continue.
  + request
  * <get met> == undefined => <set met=true>{topic=new_user}{ok}
  - {ok}

< begin

> topic new_user

  + *
  - Hi! I'm <bot name>! I'm a chatbot written in RiveScript.\s
  ^ What is your name?{topic=asked_name}

< topic

> topic asked_name

  + #
  - Your name is a number?

  + *
  - I only want your first name.

  + _
  - <set name=<formal>>Nice to meet you, <get name>!{topic=random}

< topic

request는 어떤 메시지는 들어 왔을 때 {topic=new_user}로 넘어가게 됩니다. 그리고 이름을 받도록 토픽을 설정해 놨는데 숫자나 특수문자가 아닌 <formal>문자가 들어 왔을 때 이름을 저장하고 토픽 {topic=random}으로 넘어오게 됩니다.


'프로그래밍 > RiveScript' 카테고리의 다른 글

[Tutorial] TAGS  (0) 2017.03.09
[Tutorial] MORE DEFINITIONS  (0) 2017.03.09
[Tutorial] The Begin Block  (0) 2017.03.09
[Tutorial] Topics  (0) 2017.03.09
[Tutorial] Conditionals  (0) 2017.03.09
[Tutorial] Short Discussions  (2) 2017.03.09


LABELED SECTIONS

레이블이 지정된 섹션에는 세 가지 유형이 있습니다.

레이블은 > 기호를 사용하여 정의되며 <로 끝납니다.

완료되면 라벨이 붙은 모든 섹션이 제대로 닫혀 있어야합니다 (파일의 끝에 있더라도).

스타일을 위해서 레이블이 붙은 섹션의 내용도 들여 써야합니다.

라벨이 지정된 섹션은 서로 안에 삽입 할 수 없습니다.


Topics

토픽(Topic)은 트리거의 논리접 그룹을 말합니다. 사용자가 토픽안에 있으면 봇은 토픽 안에 있는 트리거에만 동작합니다.

+ i hate you
- You're really mean! I'm not talking again until you apologize.{topic=sorry}

> topic sorry

  // This will match if the word "sorry" exists ANYWHERE in their message
  + [*] sorry [*]
  - It's OK, I'll forgive you!{topic=random}

  + *
  - Nope, not until you apologize.
  - Say you're sorry!
  - Apologize!

< topic

해당 예제에서는 "i hate you"라고 트리거가 동작할 때 토픽은 sorry로 넘어가며 해당 토픽에서 빠져 나오기 위해서는 sorry라를 트리거를 작동시켜야지만 빠져 나올 수 있습니다. 태그는 가장 기본적으로 정의되는 {topic=random}토픽이며 sorry 토픽에서 빠져나오기 위해서 {topic=random}태그를 사용하게 됩니다.

토픽은 상속 할 수 있으며 다른 트리거를 포함 시킬 수 있습니다. 그렇지만 이것은 고급 사용자를 위한 것이고 Tutorial 범위에 벗어납니다. 이에 대해 자세한 예를 보고 싶다면 rpg.rive를 참고하시기 바랍니다.

존재하지 않는 토픽을 지정하면 더이상 대화를 할 수 없냐고 물어 볼 수 있지만 RiveScript는 이를 감지해서 자동으로 기본 토픽("random")으로 되돌립니다. 

'프로그래밍 > RiveScript' 카테고리의 다른 글

[Tutorial] MORE DEFINITIONS  (0) 2017.03.09
[Tutorial] The Begin Block  (0) 2017.03.09
[Tutorial] Topics  (0) 2017.03.09
[Tutorial] Conditionals  (0) 2017.03.09
[Tutorial] Short Discussions  (2) 2017.03.09
[Tutorial] Redirections  (0) 2017.03.09

+ Recent posts