| 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 |
마트 POS는 엑셀로 다운로드/업로드합니다. 마트POS의 상품 DB 엑셀을 구해서 botpress에 연결하면 마트bot이 됩니다. 정말 중요한 기능이오니 심도있게 살펴보시고 적용하여 Make the Money 하세요.
참고 무료 플랜에서는 열 20개 , 행 10,000개로 구성된 테이블을 최대 10개까지 생성할 수 있습니다 . 한도를 늘리고 싶다면. 연락하세요
(새 탭에서 열림)

테이블은 탐색기의 필수 기능으로, 챗봇 환경 내에서 로컬 데이터베이스 역할을 합니다. 이는 워크플로 내에서 필요에 따라 액세스하고 조작할 수 있는 다양한 유형의 데이터에 대한 구조화된 저장소를 제공합니다.
이는 사용자 프로필, 트랜잭션 기록 및 시간이 지남에 따라 검색하고 업데이트해야 하는 기타 유형의 데이터와 같이 여러 세션에서 유지되어야 하는 정보를 저장하는 데 특히 유용합니다.

새 테이블을 추가하려면 explorer menu(탐색기 메뉴)로 이동하여 Add Table를 선택하세요 . 그런 다음 테이블에 이름을 지정하고 필드를 추가할 수 있습니다. 각 필드에는 이름과 유형이 있습니다. 유형에 따라 필드에 저장할 수 있는 데이터의 종류가 결정됩니다. 예를 들어 String유형이 있는 필드는 모든 텍스트 값을 저장할 수 있는 반면, Number유형이 있는 필드는 숫자 값만 저장할 수 있습니다.
Searchable확인란을 선택하여 필드를 검색 가능하게 만들 수 있습니다 . 이렇게 하면 필드의 값을 기반으로 레코드를 검색할 수 있습니다. 예를 들어,Name라는 필드가 있고 이를 검색 가능하게 설정한 경우 해당 사람의 이름을 기준으로 레코드를 검색할 수 있습니다. 이는 String유형이 있는 필드에만 사용할 수 있습니다.(You can make a field searchable by checking the Searchable checkbox. This will allow you to search for records based on the values in the field. For example, if you have a field called Name and you make it searchable, you can search for records based on the name of the person. This is only available for fields with the type String.)
Table(테이블)을 Import(가져오기)할 때는 잊지말고 검색 가능하게 할 Column(열)을 선택해주세요.

테이블에 추가할 수 있는 필드 유형에는 여러 가지가 있습니다. 각 필드 유형에는 특정 목적이 있으며 특정 유형의 데이터만 저장할 수 있습니다. 선택할 수 있는 필드 유형은 String, Number, Boolean, Date 및 Object입니다.

테이블 선택기는 테이블에서 데이터를 선택하거나 필터링하는 데 사용하는 쿼리입니다. 예를 들어, 사용자 ID나 거래 번호와 같은 특정 기준에 따라 특정 기록을 찾아야 할 수 있습니다. 테이블 선택기를 사용하면 이러한 조건을 일반 영어로 표현하여(한국어로 표현해도 됩니다.) 직관적이고 강력하게 만들 수 있습니다. 쿼리의 예로는 “‘user_id’가 ‘123’과 동일한 모든 레코드 찾기”, “product name 상품의 이름에 A가 들어가는 모든 레코드 찾기’등이 있습니다.
쿼리 선택기를 추가하려면 탐색기 메뉴에서 테이블을 클릭하세요. 그러면 테이블의 모든 레코드 목록이 표시됩니다. Add Query Selector새 쿼리 선택기를 추가하려면 오른쪽 패널에서 버튼을 클릭하세요 . 그런 다음 텍스트 필드에 쿼리 선택기를 입력할 수 있습니다.

선택기 취소는 우측의 휴지통 아이콘을 누루시면 됩니다.

테이블을 만든 후에는 레코드를 추가할 수 있습니다. 이렇게 하려면 탐색기 메뉴에서 테이블을 클릭하세요. 그러면 테이블의 모든 레코드 목록이 표시됩니다. Add Record버튼을 클릭하면 새 레코드를 추가할 수 있습니다. 그런 다음 레코드의 각 필드에 값을 입력할 수 있습니다.
표 셀을 두 번 클릭하거나 클릭하고 Enter키를 누르면 셀 값을 변경할 수 있는 입력이 표시됩니다. 완료되면 Enter를 다시 누르거나 다른 곳을 클릭하여 새 값을 저장하세요.
테이블에서 레코드를 삭제하려면 레코드에서 우클릭하시고 Delete Record를 선택하세요 .
카드 작업에 대해 자세히 알아보려면 tool box중 테이블 카드 설명서를 확인하세요 .

코드를 사용하여 테이블 작업을 할때는 Excute Card를 실행해야 하며 기존에 테이블에 Column 의 값과 같게 선언해주어야 합니다.
테이블에 코드로 새 레코드를 생성하려면 이 createRecord 함수를 사용하세요. 레코드의 각 필드에 대한 값을 지정할 수 있습니다. 이 기능은 신규 사용자의 세부정보나 새로 완료된 거래 등 새로운 정보를 저장해야 할 때 특히 유용할 수 있습니다.
// Create a record in the table
await Data1Table.createRecord({ Age: 25, Name: ‘Tom’, Occupation: ‘Student’ })
테이블에 여러 레코드를 생성하려면 이 createRecords 함수를 사용하세요. 레코드의 각 필드에 대한 값을 지정할 수 있습니다. 한 번에 여러 레코드를 생성하는 데 유용합니다.
// Creating two records in the table
await Data1Table.createRecords([
{ Name: ‘Tom’, Age: 25, Occupation: ‘Student’, ‘Is Friendly’: true },
{ Name: ‘Didier’, Age: 54, Occupation: ‘Pilot’, ‘Is Friendly’: true },
])
테이블의 레코드를 삭제하려면 이 deleteRecord 함수를 사용하세요. 삭제하려는 레코드의 레코드 ID를 지정해야 합니다.
javascript // Delete a record in the table at record ID 7 await Data1Table.deleteRecord(7)
테이블의 여러 레코드를 삭제하려면 이 deleteRecords함수를 사용하세요. 삭제하려는 레코드의 레코드 ID를 배열로 지정해야 합니다.
javascript // Delete records in the table at record IDs 7, 8, 9 await Data1Table.deleteRecords([7, 8, 9])
테이블에서 레코드를 찾으려면 findRecords함수를 사용하세요. 필터를 추가하거나 모든 항목을 쿼리하거나 의미 검색(semantic search)(예: Google 검색)을 사용하여 검색할 수 있습니다.
Botpress의 테이블에서 데이터를 검색하려면 이 findRecords함수를 사용할 수 있습니다. 이 함수를 사용하면 제한(반환할 레코드 숫자)과 오프셋(시작할 행 수)을 지정할 수 있습니다.
예를 들어 처음 10개의 레코드를 원하는 경우 제한을 10으로 설정하고 오프셋을 0으로 설정할 수 있습니다. 다음 10개의 레코드를 가져오려면 제한을 10으로 설정하고 오프셋을 10으로 설정할 수 있습니다.
사용 가능한 레코드가 더 있는지 확인하려면 반환된 배열의 길이를 확인하면 됩니다. 길이가 0보다 크면 추가 레코드가 있음을 나타냅니다.(To determine if there are more records available, you can check the length of the array returned. If the length is greater than 0, it indicates the presence of additional records.)
예는 다음과 같습니다.
const limit = 10
const startRow = 0
workflow.records = await DataTable1.findRecords({
limit,
offset: startRow,
})
// Checking the second page
const secondPage = await Data1Table.findRecords({
limit,
filter: AIeverything,
offset: startRow + limit,
})
workflow.hasNextPage = secondPage.length > 0 // This flag can be consumed in your bot flow to handle pagination
유사한 접근 방식을 적용하여 이전 페이지도 있는지 확인할 수 있습니다.
기존 검색을 수행하려면 Botpress에서 DataTable1.findRecords() 함수를 호출할 때 검색 매개변수를 사용하세요. 예는 다음과 같습니다.
workflow.records = await DataTable1.findRecords({ search: ‘red velvet chairs’ })
event.preview와 같은 변수를 검색 매개변수에 전달하여 사용자 입력이나 기타 변수를 검색할 수 있습니다. 이를 통해 검색을 수행하기 전에 사용자 입력을 전처리할 수 있습니다.(You can pass variables like event.preview to the search parameter to search for user input or any other variable. This allows you to preprocess the user’s input before performing the search.)
필터를 사용하여 결과를 필터링할 수 있습니다. MongoDB와 유사하게 이 코드는 결과를 필터링하는 방법을 제공합니다. 필터링 메커니즘은 Primitive Filter(기본 필터링)과 Logical Filter(논리 필터링)의 두 가지 주요 범주로 나눌 수 있습니다.
코드를 다루고 싶지 않으신가요? AI 생성 필터에 대해서는 다음 섹션 으로 건너뛰세요 .
Primitive Filter(기본 필터)
기본 필터는 사용하기 쉽고 간단하여 찾고 있는 값을 정확하게 일치시킬 수 있습니다. 사용할 수 있는 몇 가지 기본 요소는 다음과 같습니다.
$eq : 지정된 값과 동일한 값을 일치시킵니다.{ "name": { "$eq": "John" } }($eq : Matches values that are equal to a specified value.{ "name": { "$eq": "John" } })$gt: 지정된 값보다 큰 값과 일치합니다.{ "age": { "$gt": 20 } }($gt: Matches values that are greater than a specified value.{ "age": { "$gt": 20 } })$gte : 지정된 값보다 크거나 같은 값을 일치시킵니다.{ "age": { "$gte": 20 } }$lt: 지정된 값보다 작은 값과 일치합니다.{ "age": { "$lt": 20 } }$lte: 지정된 값보다 작거나 같은 값을 일치시킵니다.{ "age": { "$lte": 20 } }$ne: 지정된 값과 동일하지 않은 모든 값과 일치합니다.{ "name": { "$ne": "John" } }$in: 배열에 지정된 값과 일치합니다.{ "name": { "$in": ["Alice", "Bob", "John"] } }$nin: 배열에 지정된 값과 일치하지 않습니다.{ "name": { "$nin": ["Alice", "Bob", "John"] } }$exists: 지정된 필드가 있는 문서를 일치시킵니다.{ "name": { "$exists": true } }$mod : 필드 값에 대해 모듈로 연산을 수행하고 필드 % 제수가 지정된 나머지와 같은 문서를 일치시킵니다.{ "qty": { "$mod": [4, 0] } }$size : 배열 필드에 지정된 수의 요소가 포함된 모든 문서와 일치합니다.{ "tags": { "$size": 3 } }$regex : 쿼리에서 패턴 일치 문자열에 대한 정규식 기능을 제공합니다. SQL 주입을 방지하기 위해 자리 표시자를 사용합니다.{ "name": { "$regex": "[a-z]" } }$options : $regex옵션을 활성화하도록 연산자를 수정합니다. 현재 대소문자를 구분하지 않는 ‘i’와 대소문자를 구분하는 ‘c’의 두 가지 옵션이 있습니다.{ "name": { "$regex": "[a-z]", "$options": 'i' } } // case insensitive{ "name": { "$regex": "[a-z]", "$options": 'c' } } // case sensitiveLogical Filter(논리 필터)
논리 연산자를 사용하면 더 많은 필터링 절(문장은 절로 나눌 수 있다.의 절을 의미하면 단어보다는 길고 문장보다는 짧은 의미절을 의미합니다.)을 연결할 수 있습니다.
$and: 논리적 AND를 사용하여 쿼리 절을 조인합니다. 두 절의 조건과 일치하는 모든 문서를 반환합니다.{ "$and": [{ "price": { "$ne": 1.99 } }, { "price": { "$exists": true } }] }$or: 쿼리 절을 논리적 OR로 조인합니다. 두 절의 조건과 일치하는 모든 문서를 반환합니다.{ "$or": [{ "price": { "$eq": 1.99 } }, { "price": { "$exists": false } }] }($or: Joins query clauses with a logical OR. Returns all documents that match the conditions of either clause.{ "$or": [{ "price": { "$eq": 1.99 } }, { "price": { "$exists": false } }] })$not: 쿼리 표현식의 효과를 반전시키고 쿼리 표현식과 일치하지 않는 문서를 반환합니다.{ "$not": { "price": { "$eq": 1.99 } } }($not: Inverts the effect of a query expression and returns documents that do not match the query expression.{ "$not": { "price": { "$eq": 1.99 } } })이러한 필터와 연산자를 함께 사용하여 요구 사항에 정확히 맞는 복잡한 쿼리를 만들 수 있습니다.
다행히 Botpress에는 레코드 필터링과 관련하여 인공 지능(AI) 기능이 제공됩니다. 즉, 인간과 유사한 쿼리를 제공할 수 있으며 AI는 이를 지능적으로 해독하여 쿼리에 적합한 필터를 생성합니다.
이를 통해 복잡한 쿼리 구성을 크게 단순화하고 프로세스에서 인적 오류가 발생할 가능성을 줄일 수 있습니다.
This can significantly simplify the construction of complex queries and reduce the likelihood of human errors in the process.
const leads = await LeadsTable.findRecords({
filter: AIworks either at ${workflow.company} OR is not in IT,
limit: 10,
offset: 0,
})
쿼리는 `filter: AI` 뒤에 오는 백틱(`) 안에 작성됩니다. AI는 쿼리 문자열을 기대하므로 백틱이 사용됩니다.(The query is written inside the backticks (`) that come after `filter: AI`. The AI expects a query string, and that’s why backticks are used.)
선택기는 재사용할 수 있는 필터입니다. 반복해서 작성할 필요는 없습니다.
예를 들어, “18세 이상의 사용자”라는 쿼리 선택기를 사용하여 18세 이상의 모든 사용자를 테이블에서 찾을 수 있습니다.
// Find records in the table
const data = await Data1Table.findRecords({ selectorName: ‘adults’ })
workflow.adults = data
Botpress의 표준 Search 는 사용자 이름과 같은 특정 문자열을 식별하는 데 사용됩니다. 특정 문자 집합을 일치시켜 정밀도 기반 결과를 제공합니다.(A standard Search in Botpress is employed to identify specific strings like a user’s name. It gives precision-based results by matching specific sets of characters.)
반면에 AI Filter는 범위를 넓히고 결과를 명시적으로 검색하기보다는 주로 결과를 필터링하는 데 사용됩니다. 25세 이상 연령 등 특정 기준에 따라 사용자를 추적하는 데 도움이 됩니다.
AI 필터는 기본적으로 정확한 문자열 찾기를 위해 설계되지 않았지만 이를 허용할 만큼 충분히 유연합니다. 예를 들어 이를 사용하여 Canada를 주별로 결과를 필터링할 수 있습니다.(Although the AI Filter is not primarily designed for exact string hunting, it’s flexible enough to allow it. For instance, you could use it to filter results for Canada as a country.)
getRecord 함수(getRecord function)를 사용하면 고유 식별자를 기반으로 테이블에서 특정 레코드를 검색할 수 있습니다. 예를 들어, getRecord 함수(getRecord function)을 사용하여 고유한 사용자 ID를 기반으로 사용자의 프로필 정보를 검색할 수 있습니다.
// 1 is the record ID and User is the variable name
workflow.User = data
updateRecord 함수를 사용하여 테이블의 특정 레코드를 수정할 수 있습니다. 이는 레코드의 특정 필드를 업데이트해야 할 때 유용합니다. 예를 들어, 이 기능을 사용하여 사용자 프로필 정보를 업데이트하거나 거래 상태를 업데이트할 수 있습니다.
// Update at record ID 8’s Age to 45
await Data1Table.updateRecord(8, { Age: 45 })
upsertRecords 함수를 사용하면 단일 작업으로 테이블의 레코드를 업데이트하거나 생성할 수 있습니다. 행이 이미 존재하는지 여부에 대해 걱정할 필요 없이 테이블에 데이터를 업데이트하거나 삽입해야 하는 모든 상황에 유용합니다.
Example:
// Update the name and address of the records with IDs 1 and 2.
await CustomersTable.upsertRecords(‘id’, [
{ id: 1, name: ‘John Doe’, address: ‘123 Main Street’ },
{ id: 2, name: ‘Jane Doe’, address: ‘456 Elm Street’ },
])
이 코드는 레코드를 CustomersTable에 업데이트합니다. ID 1과 2의 레코드가 테이블에 이미 있는 경우 함수는 기존 행을 새 이름과 주소 값으로 업데이트합니다. ID 1과 2의 레코드가 테이블에 아직 없으면 함수는 새 이름과 주소 값을 사용하여 테이블에 새 행을 삽입합니다.
CSV 파일에서 테이블을 가져올 수 있습니다. 표 위의 Import Table 버튼을 클릭 하고 가져오려는 CSV 파일을 선택하세요. Botpress는 CSV 파일에서 열 이름과 유형을 자동으로 감지하고 테이블 구조를 생성합니다.
Export Table버튼을 클릭하면 테이블을 내보낼 수 있습니다. 그러면 표가 CSV 파일로 컴퓨터에 다운로드됩니다.💡
데이터 손실 및 가져오기 오류를 방지하려면 CSV 파일을 직접 편집하지 마세요. 대신 Botpress Studio에서 변경한 다음 업데이트된 테이블을 다시 내보냅니다.
봇을 내보낼 때 테이블도 함께 내보내지므로 다른 봇에서 사용하려는 경우가 아니면 별도로 내보낼 필요가 없습니다.