스크립트 통합

봇 빌더에서 자신의 봇 작업을 생성할 수 있습니다. 이를 통해 대화에서 봇이 어떻게 응답할지 사용자 지정할 수 있습니다. 봇 작업은 대화 동안 봇의 응답을 정의하기 위해 대화닫힘 CXone Bot Builder의 Bot 스토리 및 규칙.에서 사용됩니다.

사용자 정의 작업은 봇 빌더에서 스크립트 통합으로 생성됩니다. 스크립트 통합은 JavaScript을(를) 지원합니다. 각 스크립트 통합에는 둘 이상의 작업이 있을 수 있습니다. 활성화된 경우, 사용자 정의 작업은 스토리닫힘 의도 및 컨텍스트를 기반으로 인터랙션 처리를 위해 Bot을 훈련하는 데 사용됩니다., 규칙닫힘 컨텍스트에 따라 변경되지 않는 메시지에 대한 Bot의 응답을 정의하는 데 사용됩니다. 또는 폴백닫힘 이 사이트는 CXone의 운영이 아닌 개발 및 지원을 위한 용도입니다. 이를 차단하면 플랫폼 내의 도움말 및 다운로드 링크에 대한 액세스가 방해받을 수 있습니다.에 봇 응답을 추가할 때 봇 작업 목록에서 사용할 수 있습니다.

다음 목록은 사용자 정의 봇 작업을 사용할 수 있는 몇 가지 방법의 예를 보여줍니다.

  • 조직의 고유한 요구 사항을 충족하도록 코드를 작성하여 봇 작업을 설계합니다.
  • 봇 작업으로 자체 외부 API를 호출합니다.
  • 봇 스킬에 스크립트를 추가하고 스킬 스토어에 게시합니다.

봇 빌더 스크립트는 서버에서 작동하므로 스크립트를 작성하는 동안 고려해야 할 몇 가지 제한 사항이 있습니다.

스크립트 편집기

스크립트 통합에는 두 개 이상의 작업이 있을 수 있습니다. 각 작업에 자체 스크립트가 있습니다. 각 작업의 속성에서 스크립트 편집기에 액세스할 수 있습니다.

편집기에서 왼쪽에 코드를 입력한 다음 실행 삼각형 오른쪽을 가리키는 삼각형 화살표.을 클릭하면 콘솔 창에서 결과를 볼 수 있습니다.

스크립트 변수

봇 빌더 스크립트에서 사용하기 위해 변수를 생성할 수 있습니다. 변수는 스크립트의 다른 곳에서 사용될 값을 저장할 수 있습니다. 변수는 변수를 생성한 스크립트 통합에서만 사용될 수 있지만, 해당 통합에 있는 모든 스크립트에서 이를 사용할 수 있습니다.

변수 값은 스크립트에서 변경할 수 없습니다. 변수 값은 스크립트 통합 페이지에서만 수정할 수 있거나 스토리닫힘 의도 및 컨텍스트를 기반으로 인터랙션 처리를 위해 Bot을 훈련하는 데 사용됩니다., 규칙닫힘 컨텍스트에 따라 변경되지 않는 메시지에 대한 Bot의 응답을 정의하는 데 사용됩니다. 또는 폴백닫힘 이 사이트는 CXone의 운영이 아닌 개발 및 지원을 위한 용도입니다. 이를 차단하면 플랫폼 내의 도움말 및 다운로드 링크에 대한 액세스가 방해받을 수 있습니다.에서 봇 응답에 변수를 참조하는 작업이 사용될 때만 수정할 수 있습니다.

작업에서 변수 사용하기:

  • 작업의 스크립트가 변수를 참조해야 합니다.
  • 값을 변경할 수 있으려면 해당 작업에서 변수를 편집 가능하게 만들어야 합니다.

봇 빌더 스크립트는 네 가지 유형의 변수를 지원합니다.

  • 텍스트: 텍스트 변수는 단순한 문자열 값을 저장합니다. 편집 가능한 텍스트 변수는 사용자 정의 봇 작업 UI에서 필드가 되는데, 여기에서 해당 필드에 텍스트를 입력하여 변수에 값을 할당할 수 있습니다.
  • 숫자: 숫자 변수는 숫자 값을 저장합니다. 편집 가능한 숫자 변수는 사용자 정의 봇 작업 UI에서 필드가 되는데, 여기에서 해당 필드에 숫자를 입력하여 변수에 값을 할당할 수 있습니다.
  • 선택: 변수에 사용 가능한 값을 여러 개 정의하려면 선택 변수를 사용합니다. 선택 변수는 사용자 정의 봇 작업 UI에서 드롭다운 목록이 됩니다. 드롭다운 목록의 옵션은 스크립트 탭의 변수 정의에 있는 필드에 정의됩니다.
  • 암호: 토큰이나 API 자격 증명과 같은 개인 데이터를 저장하려면 암호 변수를 사용합니다. 값을 입력한 후, 봇 빌더은(는) 처음 다섯 문자를 제외한 모든 문자를 별표(*)를 사용하여 숨깁니다. 값은 읽기 전용이므로 스크립트나 봇 작업을 통해 덮어쓰거나 변경할 수 없습니다. 값을 변경해야 하는 경우 스크립트의 변수 페이지에서 값을 업데이트해야 합니다. 암호 변수는 편집 가능하게 만들 수 없습니다.

텍스트 변수, 숫자 변수 및 선택 변수에 대한 기본값을 정의할 수 있습니다. 변수가 편집 가능한 경우, 봇 응답에 작업을 추가할 때 다른 값을 선택하거나 입력하여 기본값을 덮어쓸 수 있습니다. 편집할 수 없지만 작업 스크립트에서 참조되는 변수인 경우, 기본값이 있으면 기본값이 사용됩니다. 할당된 기본값이 없는 경우, 스크립트에서 변수가 값을 갖지 않습니다.

생성한 변수는 스크립트 통합에서 Variables 개체에 추가됩니다.

표준 개체 및 기능

표준 JavaScript 기능 외에도 봇 빌더에는 다음과 같은 봇별 프레임워크가 있습니다.

  • Bot 개체는 봇이 대화에서 응답하는 방식을 작성하는 대체 방법을 제공합니다.
  • Store 개체를 사용하면 하나의 스크립트 실행에 대한 컨텍스트 정보를 유지할 수 있습니다.
  • 변수 개체는 스크립트 통합에 추가하는 모든 변수를 저장합니다.
  • 가져오기 기능은 표준 JavaScript fetch을(를) 구현한 것입니다.
  • 콘솔을 사용하면 디버깅이 가능합니다.

봇 빌더 스크립트는 서버에서 작동하기 때문에 스크립트를 작성하는 동안 고려해야 할 몇 가지 제한 사항이 있습니다.

봇 개체

Bot 개체에는 봇 작업을 트리거하는 메서드가 포함되어 있습니다. 스크립트를 작성할 때 웹 편집기는 해당 인수 및 유형을 포함하여 사용 가능한 모든 메서드를 묻는 메시지를 표시합니다. Bot 개체를 사용할 때 다음 메서드를 사용할 수 있습니다.

Bot 개체의 많은 메서드는 선택적으로 options 매개변수를 사용하여 사용자 정의할 수 있습니다. Options 은(는) fallbackText (폴백) 또는 typing (스마트 타이핑)일 수 있습니다. typing 에 대해 가능한 값은 1, 2 또는 3입니다.

Options = {
	"fallbackText": "this is the fallback text",
	"typing": 2,
}

sendMessage

봇이 보낼 일반 텍스트 메시지를 입력합니다. .sendMessage(text: string, options: Options): void 형식을 사용합니다. options 매개변수는 필수가 아닙니다.

Bot.sendMessage('This is message written by bot')

sendButtons

최대 세 개의 버튼을 구성하여 보냅니다. 모든 버튼 설정은 속성을 설정하여 배열할 수 있습니다. 아래 예를 사용하여 대화 상자의 버튼 설정을 스크립트의 속성과 비교합니다. .sendButtons(text: string, buttons: ButtonPayload[], options: Options): void 형식을 사용합니다. options 매개변수는 필수가 아닙니다.

Bot.sendButtons('This is message written by bot', [
{
	title: 'Button 1',
	intent: {
		name: 'mood'
	}
}
])

스크립트를 통해 entityValue, 텍스트 또는 URL을 트리거할 수도 있습니다.

이러한 속성을 결합하면 오류나 예기치 않은 동작이 발생할 수 있습니다.

// triggers intent
{
	title: 'Title',
	intent: 'mood'
}

// triggers intent with entity value
{
	title: 'Title',
	intent: {
		name: 'mood',
		entity: 'myEntity',
		value: 'entity value'
	}
}

// url
{
	title: 'Title',
	url: 'https://www.nice.com'
}

// text
{
	title: 'Title',
	text: 'This is a text'
}

sendQuickReplies

최대 세 개의 빠른 응답을 구성하여 보냅니다. 모든 빠른 응답 설정은 속성을 설정하여 배열할 수 있습니다. 빠른 응답 옵션은 버튼 옵션과 동일합니다. .sendQuickReplies(text: string, quickReplies: QuickReplyPayload[], options: Options): void 형식을 사용합니다. options 매개변수는 필수가 아닙니다.

Bot.sendQuickReplies('This is message written by bot', [
{
	title: 'Quick reply 1',
	intent: {
		name: 'mood'
	}
}
])

스크립트를 통해 entityValue, 텍스트 또는 URL을 트리거할 수도 있습니다.

이러한 속성을 결합하면 오류나 예기치 않은 동작이 발생할 수 있습니다.

// triggers intent
{
	title: 'Title',
	intent: 'mood'
}

// triggers intent with entity value
{
	title: 'Title',
	intent: {
		name: 'mood',
		entity: 'myEntity',
		value: 'entity value'
	}
}

// url
{
	title: 'Title',
	url: 'https://www.nice.com'
}

// text
{
	title: 'Title',
	text: 'This is a text'
}

sendCards

최대 10 개의 카드를 구성하여 보냅니다. .sendCards(cards: CardPayload[], options: Options): void 형식을 사용합니다. options 매개변수는 필수가 아닙니다.

Bot.sendCards([{
	title: 'Card title',
	description: 'Card description',
	image: 'https://picsum.photos/200/300',
	mimetype: 'image/jpeg',
	button: {
		title: 'Button title',
		url: 'https://www.nice.com/'
	}
}])

sendMultimedia

멀티미디어는 봇 빌더로 확인되지 않지만 다른 통합에서는 유효성을 확인할 수 있습니다. 스크립트가 사용되는 전체 시간 동안 URL의 콘텐츠를 사용할 수 있어야 합니다. 또한 스크립트가 실행될 때 반복적으로 다운로드되므로 공개적으로 액세스할 수 있어야 합니다. 미디어 유형 및 크기 제한은 멀티미디어 봇 작업을 사용할 때와 동일합니다. .sendMultimedia(url: string, mimetype: string, options: Options): void 형식을 사용합니다. options 매개변수는 필수가 아닙니다.

Bot.sendMultimedia('https://picsum.photos/200/300', 'image/jpeg')

sendRichLink

리치 링크를 구성하여 보냅니다. .sendRichLink(richlink: RichLinkPayload): void 형식을 사용합니다.

Bot.sendRichLink({
	title: 'Title',
	url: 'https://www.nice.com',
	image: 'https://picsum.photos/200/300',
	mimetype: 'image/jpeg'
})

sendListPicker

최대 12개의 목록 선택기 옵션을 구성하고 보냅니다. 모든 목록 선택기 옵션은 속성을 설정하여 배열할 수 있습니다. 빠른 응답 옵션은 버튼 옵션과 동일합니다. .sendListPicker(message: string, description: string, actions: ListPickerPayload[], options: Options): void 형식을 사용합니다. options 매개변수는 필수가 아닙니다.

Bot.sendListPicker('Message', 'Description', [{
	title: 'Title',
	description: 'Description',
	image: {
		url: 'https://picsum.photos/200/300',
		mimetype: 'image/jpeg'
	}
	intent: {
		name: 'mood'
	}
}])

handover

queueId을(를) 사용하여 핸드오버닫힘 라이브 상담원으로의 전환이 트리거되는 컨택 메시지가 진행되는 위치를 구성합니다. 자동 재라우팅을 사용하려면 null로 남겨두거나, 기존 대기열의 ID를 정할 수 있습니다. .handover(queueId: ?string): void 형식을 사용합니다.

queueId 찾기:

  1. CXone에서 앱 선택기 를 클릭하고 선택합니다.ACD.

  2. Digital Experience > 라우팅 대기열로 이동합니다.

  3. ID가 필요한 대기열을 찾아 편집을 클릭합니다.

  4. 대기열 편집 페이지에서 브라우저의 URL을 확인합니다. /edit/ 다음의 숫자가 queueId입니다. 대시로 구분된 5개의 숫자와 문자 집합처럼 보입니다. 예시: 67bf5865-4556-40db-ba44-6c0cc3f88ffa.

Bot.handover(null)
// or
Bot.handover('queueId')

addTags

어떤 태그를 적용해야 하는지 구성합니다. 스크립트에 사용된 모든 태그는 봇 빌더에 이미 존재해야 합니다. 스크립트에서 태그가 호출되었지만 존재하지 않는 경우 해당 작업은 무시됩니다. .addTags(tags: string[]): void 형식을 사용합니다.

Bot.addTags(['Tag 1', 'Tag 2'])

waitForResponse

어떤 경우에는 고객 응답을 기다렸다가 스크립트 실행을 계속해야 합니다. 고객과의 커뮤니케이션이 비동기적이기 때문에 응답을 기다리는 것도 비동기적입니다. Bot.waitForResponse 메서드는 하나의 매개 변수, 즉 응답을 받은 후 실행될 함수의 이름을 사용합니다. .waitForResponse(functionName: string): void 형식을 사용합니다.

이 함수에는 연기된 동작이 있습니다. 즉 실행 시 결과가 즉시 적용되지 않음을 의미합니다. 대신 현재 스크립트 실행이 먼저 완료되어야 합니다. 연기된 동작 함수로 스크립트를 종료하려면 return 문이나 조건을 사용하여 스크립트 실행을 명시적으로 중지해야 합니다.

function main() {
	console.log('Testing wait for response')
	Bot.waitForResponse('response') //The script continues to run and the next line executes while listening for a customer response
	console.log('This is still going to be executed')
}

function response() {
	console.log('Customer responded', Bot.slots['last customer message'].value)
}

fillSlot

어떤 슬롯닫힘 컨택의 메시지에서 추출하여 Bot 응답에 사용하기 위해 저장되는 엔터티입니다. 변수와 비슷합니다.을 적용해야 할지 구성합니다. 스크립트에 사용된 모든 슬롯봇 빌더에 이미 존재해야 합니다. 스크립트에서 슬롯이 호출되었지만 존재하지 않는 경우 해당 작업은 무시됩니다.

스크립트 실행을 위한 값만 저장하려면 로컬 변수를 사용하거나 Store 개체를 사용합니다. .fillSlot(name: string, value: any[]): void 형식을 사용합니다.

실제 슬롯 값에 액세스하려면 .value 속성에 액세스해야 합니다.

function main() {
	Bot.fillSlot('slotName', 'slotValue');
	console.log(Bot.slots.slotName.value);
}

slots

점 표기법에서 편집기는 사용 가능한 slots닫힘 컨택의 메시지에서 추출하여 Bot 응답에 사용하기 위해 저장되는 엔터티입니다. 변수와 비슷합니다.을 프롬프트할 수 있지만 이는 슬롯 이름에 공백이나 특수 문자가 포함되지 않은 경우에만 해당됩니다. 슬롯 이름에 공백이나 특수 문자가 포함된 경우 대괄호 표기법을 대신 사용해야 합니다.

console.log(Bot.slots)

// example
let contactId = Bot.slots['contact.id'].value
let lastCustomerMessage = Bot.slots['last customer message'].value

sendAsCustomer

이 함수를 사용하면 스토리닫힘 의도 및 컨텍스트를 기반으로 인터랙션 처리를 위해 Bot을 훈련하는 데 사용됩니다.규칙닫힘 컨텍스트에 따라 변경되지 않는 메시지에 대한 Bot의 응답을 정의하는 데 사용됩니다.컨택닫힘 컨택 센터의 상담원, IVR 또는 Bot과 인터랙션하는 사람입니다.이 말할 수 있는 내용을 추가할 수 있습니다. .sendAsCustomer(text: string): void 형식을 사용합니다.

이 함수에는 연기된 동작이 있습니다. 즉 실행 시 결과가 즉시 적용되지 않음을 의미합니다. 대신 현재 스크립트 실행이 먼저 완료되어야 합니다. 연기된 동작 함수로 스크립트를 종료하려면 return 문이나 조건을 사용하여 스크립트 실행을 명시적으로 중지해야 합니다.

Bot.sendAsCustomer('Hello bot')

Store 개체

Store 은(는) 스크립트 실행 중에 데이터 저장을 위해 생성된 개체입니다. 로컬 변수와 비교할 때, 여러 .waitForResponse 함수에서 사용할 수 있다는 장점이 있습니다.

set, get

Store.set(name: string, value: any[]): void

Store.get(name: string): any[]

function main() {
	Store.set('token', 'my-secret-token')
	Bot.waitForResponse('response')
}

async function response() {
	console.log(Store.get('token')) // my-secret-token is logged
}

변수 개체

Variables 개체는 스크립트 통합에서 생성한 변수를 저장합니다. 각 변수는 Variables의 속성입니다. 각 변수에는 해당 변수에 대한 정보를 저장하는 하위 속성 집합이 있습니다. 다음 예에서는 colorChoice라는 선택 변수를 보여줍니다.

"colorChoice": {
  "defaultValue": "red",
  "options": [
	"red",
	"green",
	"blue"
	],
  "type": "select",
  "value": "red",
  "name": "colorChoice"
}		

이 예에서 변수에 할당된 값의 목록은 options 속성에 포함되어 있습니다.

defaultValue 속성과 value 속성은 처음에 같은 값을 가지고 있습니다. 선택 변수에 대한 기본값을 지정하지 않은 경우, 기본값은 null입니다. 변수 값은 스크립트에서 변경할 수 없지만, 편집 가능하게 만든 다음 스토리나 규칙에서 작업이 사용될 때 변경할 수 있습니다.

스크립트에서 변수 참조

점 표기법을 사용하여 변수 값을 참조합니다: Variables.varName.value

선택 변수에서 옵션의 목록을 참조합니다: Variables.varName.options

스크립트 통합에서 기존 변수 보기

다음 줄을 코드에 추가한 다음 스크립트를 실행하면 스크립트에서 기존 변수 및 해당 속성의 목록을 볼 수 있습니다. 목록이 콘솔에 나타납니다. 코드는 다음과 같습니다: console.log(변수). 마찬가지로, 스크립트에 console.log(Variables.varName.value) 또는 console.log(Variables.varName.options)를 추가하여 단일 변수의 내용을 볼 수 있습니다.

fetch 함수

fetch(url: string, ?options), 여기에서 사용 가능한 옵션은 다음과 같습니다:

  • 메서드 - 'GET', 'POST', 'PUT', 'DELETE'
  • 헤더
  • form_params
  • json
  • 본문

API와 통신하려면 fetch를 사용합니다. 이는 임의의 CXone API일 수도 있고 사용자 고유의 것일 수도 있습니다.

const URL = 'https://nice.com'

async function main() {
	// 1. using async/await
	try {
		const response1 = await fetch(URL, { 'method': 'GET' })

		console.log(
			'response 1',
			response1.ok,
			response1.status,
			response1.statusText,
			response1.url,
			response1.headers
		)
		console.log('response 1', await response1.text())
	} catch (exception) {
		console.log('Error occured', exception)
	}

	// 2. using Promises
	fetch(URL, { 'method': 'GET' })
		.then(response => {
			console.log(
				'response 2',
				response.ok,
				response.status,
				response.statusText,
				response.url,
				response.headers
			)
	
			return response.text()
		})
		.then(response => {
			console.log('response 2', response)
		})
		.catch(exception => {
			console.log('Error occured', exception)
		})
	
	// 3. using fetchSync
	try {
		const response3 = fetchSync(URL, { 'method': 'GET' })
		console.log('response 3', response3)
	} catch (exception) {
		console.log('Error occured', exception)
	}
}

fetchSync

fetch 함수는 Promise를 반환하고 응답 시 .json() 또는 .text() 함수를 실행하는 JavaScript fetch의 표준 구현입니다.

Promise가 아닌 응답을 직접 반환하는 동기 변형 fetchSync도 있습니다. JavaScript의 비동기 환경과 일관성을 유지하려면 표준 fetch 함수를 사용합니다.

console 함수

console 은(는) 스크립트를 테스트하는 데 사용됩니다. 원하는 데이터를 기록할 수 있습니다. 로그 결과도 대화 내역에 저장되지만 컨택닫힘 컨택 센터의 상담원, IVR 또는 Bot과 인터랙션하는 사람입니다.으로 전송되지는 않습니다.

log

console.log(…output: any[]): void 형식을 사용합니다.

console.log('my log', 123, {pi: 3.14})

warn

console.warn(…output: any[]): void 형식을 사용합니다.

console.warn('my warn', 123, {pi: 3.14})

info

console.info(…output: any[]): void 형식을 사용합니다.

console.info('my info output', 123, {pi: 3.14})

debug

console.debug(…output: any[]): void 형식을 사용합니다.

console.debug('my debug output', 123, {pi: 3.14})

error

console.error(…output: any[]): void 형식을 사용합니다.

console.error('my error output', 123, {pi: 3.14})

오류 처리

onError

onError 함수를 정의하여 예상치 못한 예외로 인한 오류를 처리할 수 있습니다.

let onError = (e) => console.log('my handler', e.message)
		
function main() {
	Bot.nonExistentMethod()
}

CXone 봇 빌더의 스크립팅 제한

봇 빌더로 작성된 사용자 정의 스크립트는 서버에서 작동합니다. 아래에서 스크립트와 서버 모두에 대해 최적의 성능을 보장하는 현재 제한 사항을 자세히 설명합니다.

  • 구조: 모든 코드는 main 함수 내에 포함되어야 합니다. 함수 외부의 코드는 실행되지 않습니다.
  • 최대 이벤트 제한: 각 스크립트는 스크립트 실행당 최대 200개의 이벤트로 제한됩니다. 이벤트에는 각 함수와 각 함수에 의해 트리거되는 모든 작업이 포함됩니다.
  • 메모리 제한: 각 스크립트 실행에는 최대 10MB의 메모리가 허용됩니다.
  • 실행 시간 제한: 각 스크립트의 실행은 10초로 제한됩니다.
  • 봇 함수 호출 제한: 다음 봇 함수는 스크립트 실행당 최대 20회 호출할 수 있습니다.
    • sendMessage
    • sendButtons
    • sendQuickReplies
    • sendCards
    • sendMultimedia
    • sendRichLink
    • sendListPicker
    • handover
    • addTags
    • waitforResponse
  • fillSlot 호출 제한: fillSlot 함수는 스크립트 실행당 최대 100회 호출할 수 있습니다.
  • console 함수의 호출 제한: 다음 console 함수는 모든 스크립트 실행에 대해 각각 최대 100회 호출할 수 있습니다.
    • log
    • info
    • warn
    • debug
    • error
  • fetchSync 호출 제한: fetchSync 메서드는 각 스크립트 실행에 대해 최대 20번 호출할 수 있습니다.