| Studio Interface 목차 |
| 1. Explorer 2. Agents 3. Library 4. Hooks 5. Workflows 6. Variables 7. Knowledge Base 8. Tables 9. Nodes 10. Emulator 11. Inspector 12. Debugger, Logs & JSON 13. Botpress Hub 14. Keyboard Shortcuts 15. Chatbot Settings 16. Studio Preferences 17. Import & Export |
이 게시글은 내용이 전문적입니다. 처음 접하는 경우, Library(라이브러리) 정도만 참조하시고 다음 단계로 넘어가 주세요. Hooks(후크) 와 PG 결제 – 웹/나이스페이먼츠/휴대폰소액결제 매뉴얼 ( https://docs.bootpay.co.kr/v1/online/pg?pg=nicepay&pm=phone&language=web )은 코딩에 대한 전문적인 이해를 필요로 합니다. 코딩에 약하신 분들은 다음 단계(Workflows)로 pass해주세요.
컴퓨터 용어에서 라이브러리는 컴퓨터 프로그램에서 자주 사용되는 기능들을 모아놓은 것입니다. 개발자가 직접 구현하지 않고도 필요한 기능을 사용할 수 있도록 제공하는 것이 목적입니다.(출처 : Bard )
라이브러리는 크게 두 가지로 나눌 수 있습니다.
라이브러리를 사용하면 다음과 같은 장점이 있습니다.
라이브러리는 다양한 분야에서 사용됩니다. 대표적인 예로는 다음과 같은 것들이 있습니다.
라이브러리는 개발자가 필요한 기능을 쉽게 사용할 수 있도록 제공하는 중요한 도구입니다.
Botpress NLU(자연어 이해, Natural Language Understanding) )의 일부
탐색기 패널의 두 번째 탭은 라이브러리입니다. 여기에서 global Intents (전반적인 의도)와 엔터티를 찾을 수 있습니다. global Intents (전반적인 의도) 외에도 Botpress는 전환에서 정의할 수 있는 인라인 인텐트를 제공합니다.(The second tab of the Explorer panel is the Library. Here you will find your global Intents and Entities. In addition to global Intents, Botpress provides Inline Intents that can be defined on a Transition.)

사용자 메시지의 의미를 인식하는 것은 필수적입니다. 이를 식별하는 것뿐만 아니라 정확하게 분류하는 것도 중요합니다. 이를 위해 자연스러운 대화(예: 인간과의 대화)에서 정보를 추출하도록 챗봇을 프로그래밍할 수 있습니다.
의도를 생성할 때 utterances((말로) 표현함, 입 밖에 냄, 발언)도 추가합니다. 발언은 사용자가 동일한 내용을 말하거나 요청하는 데 사용할 수 있는 다양한 진술을 나타냅니다.
전환을 위한 그때마다 즉시 처리하는 의도로 사용할 수도 있습니다.(You can also use them as inline intents for transitions.)
예를 들어, “Ordering a Coffee” Intents(인텐트, (사용자가 말하고자 하는) 의도)에 다음과 같은 utterances((말로) 표현함, 입 밖에 냄, 발언)를 추가할 수 있습니다.
특정 단어 대신 의도에 응답하도록 챗봇을 훈련시키기 위해 이러한 다양한 utterances((말로) 표현함)를 추가할 수 있습니다. 사용자 진술은 신뢰도 점수가 가장 높은 가장 적절한 의도와 비교되고 어울리게 됩니다.(The user statements are compared and matched with the most appropriate intent with the highest confidence score.)
| 사용자 메시지 | 의도 일치 | 신뢰 |
|---|---|---|
| 커피를 주문하고 싶습니다. | 주문하기 | 0.97 |
| 에스프레소 주세요 | 주문하기 | 0.91 |
| 더블 카푸치노 한 잔 주시겠어요? | 주문하기 | 0.96 |
새로운 의도(Intent)를 생성하려면,
참고
발화는 현재 최대 280자까지 가능합니다.
Botpress는 pattern(패턴, 정규식(RegEx, Regular Exrpession)을 사용하여 설명할 수 있는 형식으로 표시된 정보를 추출) 및 목록 엔터티(list entities)라는 두 가지 유형의 사용자 정의 엔터티를 제공합니다. Built-in Entities라는 것도 있는데 이것은 아직 어떤 의미인지 모르겠습니다.
엔터티를 intent(의도) 매개변수로 생각할 수 있습니다. 색상, 날짜, 시간 또는 무게와 같은 개념을 나타냅니다. 엔터티 추출은 사용자 문구나 챗봇에 보내는 메시지에 원하는 엔터티가 있는 경우 이를 추출하고 정규화하는 데 도움이 됩니다.(You can think of Entities as intent parameters. They represent a concept such as a colour, a date, a time, or a weight. Entity extraction helps you extract and normalize desired entities if they are present in a user phrase or message to the chatbot.)
예: 주문 intent(의도)에는 커피에 카페인이 포함되어 있는지, 카페인이 없는지 지정하는 카페인이라는 엔터티가 포함될 수 있습니다. 싱글 또는 더블 샷의 경우, 적합한 크기가 엔터티입니다. 요청한 음료의 종류를 특정하는 경우, 음료 엔터티가 될 수 있습니다.
NLU 추출에 연결하면 시스템 및 사용자 정의 엔터티의 배열인 엔터티 속성을 찾을 수 있습니다.(Attached to NLU extraction, you will find an entities property which is an array of System and Custom entities.)
자연어 이해(NLU)에서 entity는 자연어 문장에서 의미 있는 단어 또는 단어 그룹을 말합니다. 예를 들어, “오늘 날씨는 어때?”라는 문장에서 “오늘”과 “날씨”는 각각 entity입니다.(출처 : Bard)
entity는 크게 두 가지 유형으로 나눌 수 있습니다.
NLU 시스템은 자연어 문장에서 entity를 인식해야 합니다. 이를 통해 사용자의 의도를 더 정확하게 이해하고 적절한 응답을 생성할 수 있습니다.
entity를 인식하는 방법에는 여러 가지가 있습니다. 대표적인 방법으로는 다음과 같은 것들이 있습니다.
최근에는 머신 러닝 방법이 주로 사용되고 있습니다. 머신 러닝 방법은 규칙 기반 방법에 비해 더 정확하고 유연한 entity 인식 결과를 제공할 수 있습니다.
entity를 인식하는 것은 NLU 시스템의 핵심 기능 중 하나입니다. entity를 정확하게 인식할 수 있다면, 사용자와 더욱 자연스럽고 효율적인 상호 작용을 할 수 있습니다.
다음은 entity의 몇 가지 예입니다.
이러한 예를 통해 entity의 다양한 모습을 확인할 수 있습니다.
Botpress는 pattern(패턴, 정규식(RegEx, Regular Exrpession)을 사용하여 설명할 수 있는 형식으로 표시된 정보를 추출) 및 목록 엔터티(list entities)라는 두 가지 유형의 사용자 정의 엔터티를 제공합니다. 사용자 지정 엔터티를 정의하려면 탐색기의 라이브러리 탭으로 이동하세요. 여기에서 챗봇이 처리하는 모든 입력 메시지에 사용할 수 있는 사용자 정의 엔터티를 정의할 수 있습니다. 계속해서 새 엔터티를 클릭하세요.
후크, 흐름 전환 또는 코드 실행 카드에서 event.nlu.entities 변수를 조회하여 엔터티 데이터에 액세스하고 사용할 수 있습니다.(You may access and use entity data by looking up the event.nlu.entities variable in your hooks, flow transitions or Execute Code cards.)
목록 추출은 패턴 추출과 유사하게 작동합니다. 그러나 해당 동의어를 사용하여 엔터티의 다양한 항목을 추가할 수 있습니다. 공항 코드를 예로 들어 보겠습니다. 추출은 다음과 같이 진행됩니다. 사용자가 유형 값 “SFO에서 뭄바이까지 항공편 찾기” “공항 코드” [“SFO”, “BOM”]라고 말했습니다.(List extraction behaves similarly to pattern extraction. However, you’ll be able to add different occurrences of your entity with corresponding synonyms. Let’s take Airport Codes as an example: Extraction will go like this: User said Type Value “Find a flight from SFO to Mumbai” “Airport Codes” [“SFO”, “BOM”])
패턴 또는 정규식 추출을 사용하면 정규식(RegEx)을 사용하여 설명할 수 있는 형식으로 표시된 정보를 추출할 수 있습니다. 패턴 엔터티를 생성하면 Botpress Native NLU는 들어오는 각 메시지에 대해 정규식 추출을 수행하고 이를 event.nlu.entities에 추가합니다. 예: [AZ] 3 -[0-9] 4 -[AZ] 3을 패턴으로 사용하는 패턴 엔터티 정의가 주어 지면 추출은 다음과 같이 진행됩니다. 사용자가 말한 유형 값 제품 BHZ-1234-UYT SKU BHZ-1234- 찾기 UYT( Pattern or Regular Expression Extraction allows you to extract information presented in a format that can be described using Regular Expression (RegEx). Once you’ve created a pattern entity, Botpress Native NLU will perform a regex extraction on each incoming message and add it to event.nlu.entities. Example: Given a Pattern Entity definition with [A-Z]3-[0-9]4-[A-Z]3 as a pattern: Extraction will go like this: User said Type Value Find product BHZ-1234-UYT SKU BHZ-1234-UYT)
탐색기 패널의 후크 탭을 사용하면 후크를 생성할 수 있습니다. 후크는 이벤트 기반 사용자 정의 코드 조각입니다.(The Hooks Tab of the Explorer panel allows you to create Hooks. Hooks are event-driven custom code snippets.)
후크는 특정 이벤트가 발생할 때 JavaScript 코드를 실행하는 편리한 방법입니다. (코드 실행 카드 및 유효성 검사 필드와 유사(Hooks are a handy way to execute JavaScript code when specific events occur.(similar to Execute Code cards and Validation fields)))
Note(참고)
후크를 편집하면 즉시 적용됩니다. 즉, 다음 이벤트의 변경 사항과 함께 실행된다는 의미입니다. 이로 인해 개발 속도가 훨씬 빨라집니다.
후크는 실행될 때 이벤트 엔진의 지점을 사용하여 구별됩니다. (Hooks are differentiated using the point in the event engine when they are executed.)다음은 코드에 후크를 삽입할 수 있는 인스턴스입니다.
JavaScript에서 매개변수는 함수에 전달되는 값입니다.
Hooks는 매개변수를 갖는 함수입니다. 후크 유형에 따라 매개변수가 다릅니다. event가장 일반적인 매개변수이며 항상 사용할 수 있습니다. event(이벤트) 객체에는 후크를 트리거한 이벤트에 대한 모든 정보가 포함되어 있습니다.(Hooks are functions that take parameters. The parameters are different depending on the hook type. event is the most common parameter, and it is always available. The event object contains all the information about the event that triggered the hook.)
이 후크는 들어오는 모든 미들웨어가 이벤트를 처리한 직후, 대화 엔진이 이벤트 처리를 시작하기 전에 호출됩니다.(This hook is called right after all incoming middleware have processed the event but before the Dialogue Engine starts processing it.) 특수 처리를 위해 필요한 모든 데이터(NLU intent(의도) 포함)에 액세스하고 이벤트에 어떤 일이 발생할지 결정할 수 있습니다.
여기서 일반적인 작업은 Botpress에게 이벤트를 무시하고 처리하지 말라고 지시하는 것입니다(예: 대화 엔진에 보내지 않음).
Botpress는 이벤트를 수신한 후 미들웨어를 처리하기 전에 이 후크를 호출합니다. 이벤트 속성을 변경할 수 있습니다.(Botpress calls this hook after receiving an event but before processing any middleware. It is possible to change event properties.)
Botpress는 종종 이 후크를 사용하여 일부 처리를 건너뛰도록 플래그를 설정합니다. 예를 들어 QnA가 빠른 응답일 때 처리하는 것을 방지합니다.(Botpress often uses this hook to set flags to skip some processing, for example, to prevent the QnA from processing it when it’s a quick reply.)
Before Incoming Message(메시지가 도착하기 전)에 아래와 같은 JavaScript 코드를 추가하였다면,
async function hook(event: IO.Incoming Event): Promise<void> {
/** Your code starts below */
// IMPORTANT LEAVE THIS ALONE
if (!event.state.session.fullHistory) {
event.state.session.fullHistory = '';
}
event.state.session.fullHistory += `user: ${event.payload.text}\n`;
/** Your code ends here */
}
이 코드는 사용자와 봇의 대화 기록을 추적하는 데 사용됩니다. 사용자가 봇에게 말을 하면 함수는 대화 기록에 사용자의 말을 추가합니다. 이렇게 하면 봇은 사용자의 이전 대화에서 정보를 얻을 수 있으므로 사용자에게 더 나은 응답을 제공할 수 있습니다.
코드의 세부 내용은 다음과 같습니다.
hook() 함수는 IO.Incoming Event 유형의 event 매개변수를 사용합니다. 이 매개변수는 사용자의 메시지를 포함하는 이벤트입니다.event.state.session.fullHistory 속성이 정의되어 있는지 확인합니다. 정의되어 있지 않은 경우 함수는 속성을 빈 문자열로 설정합니다.event.state.session.fullHistory 속성에 추가합니다.user: ${event.payload.text}
event.payload.text 속성에는 사용자가 입력한 텍스트가 포함되어 있습니다.
대화 관리자는 봇의 응답이 사용자에게 전송되기 전에 이 후크를 호출합니다.(The Dialogue Manager calls this hook before the bot’s reply is sent to the user.)
여기에서 봇의 전체 응답을 저장할 수 있습니다.(Here you can save the bot’s complete response.)
async function hook (outgoingEvent: 10.OutgoingEvent, event: IO.IncomingEvent): Promise<void> {
/** Your code starts below */
// IMPORTANT LEAVE THIS ALONE
if (!event.state.session.fullHistory) {
event.state.session.fullHistory = '';
}
event.state.session.fullHistory += `assistant: ${outgoingEvent.payload.text}\n`;
/** Your code ends here */
}
이 코드는 봇이 사용자에게 보내는 응답을 추적하는 데 사용됩니다. 이 정보는 봇의 응답을 향상시키는 데 사용될 수 있습니다.
예를 들어, 사용자가 봇의 응답을 이해하지 못하는 경우 봇은 fullHistory 속성을 사용하여 문제가 무엇인지 확인할 수 있습니다. 그런 다음 봇은 응답을 다시 작성하거나 추가 정보를 제공할 수 있습니다.
코드의 세부 내용은 다음과 같습니다.
hook() 함수는 두 개의 매개변수를 사용합니다. 첫 번째 매개변수는 outgoingEvent이며 IO.OutgoingEvent 유형입니다. 이 매개변수는 봇이 사용자에게 보내는 메시지를 포함합니다. 두 번째 매개변수는 event이며 IO.IncomingEvent 유형입니다. 이 매개변수는 사용자의 메시지를 포함합니다.event.state.session.fullHistory 속성이 정의되어 있는지 확인합니다. 정의되어 있지 않은 경우 함수는 속성을 빈 문자열로 설정합니다.event.state.session.fullHistory 속성에 추가합니다.botpress는 개발자 또는 관리자가 사용자의 질문 내용을 보지 못하는 한계가 있는데, event.state.session.fullHistory 속성을 가져와 이용할 수 있다면 전체 대화 내용를 볼 수 있습니다. 구글 스프레드시트, make, airtable 등 중 어떤 것을 이용해서 가져올 수 있는지와 어떻게 가져올 수 있는지는 아직 모르겠습니다.
이 문서 구하기 힘든 code를 PG사별로 결제수단별로 언어별로 제공하는데, JavaScript 코드도 있습니다. 후크(특정 이벤트가 발생할 때 JavaScript 코드를 실행하는 편리한 방법)를 이용하여 JavaScript 코드를 실행하면 PG를 호출할 수 있고 PG결제를 받을 수 있습니다.

JavaScript
import BootPay from "bootpay-js"
PG와 결제수단을 선택하여 해당 PG사의 결제수단 창을 띄우는 코드를 작성해보세요.
JavaScript
//실제 복사하여 사용시에는 모든 주석을 지운 후 사용하세요
BootPay.request({
price: '1000', //실제 결제되는 가격
application_id: "[ WEB SDK용 Application ID ]",
name: '블링블링 마스카라', //결제창에서 보여질 이름
pg: 'kcp',
method: 'card', //결제수단, 입력하지 않으면 결제수단 선택부터 화면이 시작합니다.
show_agree_window: 0, // 부트페이 정보 동의 창 보이기 여부
items: [
{
item_name: '나는 아이템', //상품명
qty: 1, //수량
unique: '123', //해당 상품을 구분짓는 primary key
price: 1000, //상품 단가
cat1: 'TOP', // 대표 상품의 카테고리 상, 50글자 이내
cat2: '티셔츠', // 대표 상품의 카테고리 중, 50글자 이내
cat3: '라운드 티', // 대표상품의 카테고리 하, 50글자 이내
}
],
user_info: {
username: '사용자 이름',
email: '사용자 이메일',
addr: '사용자 주소',
phone: '010-1234-4567'
},
order_id: '고유order_id_1234', //고유 주문번호로, 생성하신 값을 보내주셔야 합니다.
params: {callback1: '그대로 콜백받을 변수 1', callback2: '그대로 콜백받을 변수 2', customvar1234: '변수명도 마음대로'},
account_expire_at: '2020-10-25', // 가상계좌 입금기간 제한 ( yyyy-mm-dd 포멧으로 입력해주세요. 가상계좌만 적용됩니다. )
extra: {
start_at: '2019-05-10', // 정기 결제 시작일 - 시작일을 지정하지 않으면 그 날 당일로부터 결제가 가능한 Billing key 지급
end_at: '2022-05-10', // 정기결제 만료일 - 기간 없음 - 무제한
vbank_result: 1, // 가상계좌 사용시 사용, 가상계좌 결과창을 볼지(1), 말지(0), 미설정시 봄(1)
quota: '0,2,3', // 결제금액이 5만원 이상시 할부개월 허용범위를 설정할 수 있음, [0(일시불), 2개월, 3개월] 허용, 미설정시 12개월까지 허용,
theme: 'purple', // [ red, purple(기본), custom ]
custom_background: '#00a086', // [ theme가 custom 일 때 background 색상 지정 가능 ]
custom_font_color: '#ffffff' // [ theme가 custom 일 때 font color 색상 지정 가능 ]
}
}).error(function (data) {
//결제 진행시 에러가 발생하면 수행됩니다.
console.log(data);
}).cancel(function (data) {
//결제가 취소되면 수행됩니다.
console.log(data);
}).ready(function (data) {
// 가상계좌 입금 계좌번호가 발급되면 호출되는 함수입니다.
console.log(data);
}).confirm(function (data) {
//결제가 실행되기 전에 수행되며, 주로 재고를 확인하는 로직이 들어갑니다.
//주의 - 카드 수기결제일 경우 이 부분이 실행되지 않습니다.
console.log(data);
var enable = true; // 재고 수량 관리 로직 혹은 다른 처리
if (enable) {
BootPay.transactionConfirm(data); // 조건이 맞으면 승인 처리를 한다.
} else {
BootPay.removePaymentWindow(); // 조건이 맞지 않으면 결제 창을 닫고 결제를 승인하지 않는다.
}
}).close(function (data) {
// 결제창이 닫힐때 수행됩니다. (성공,실패,취소에 상관없이 모두 수행됨)
console.log(data);
}).done(function (data) {
//결제가 정상적으로 완료되면 수행됩니다
//비즈니스 로직을 수행하기 전에 결제 유효성 검증을 하시길 추천합니다.
console.log(data);
});