사용자 정의 스크립트 노드
사용자 정의 스크립트 노드는 기본 제공 기능만으로는 해결할 수 없는 복잡한 계산이나 외부 데이터 연동 및 정제 과정 등이 필요한 시나리오에서 프로그래밍 언어를 이용하여 시나리오를을 구현하는 노드입니다.
실행환경
런타임: Node.js v12
타임아웃: 5,000
ms
코드길이 제한: 50,000
byte
응답크기 제한: 50,000
byte
실행 과정에서 오류가 발생하거나 수행시간이 5,000ms 를 초과할 경우 스크립트 실행이 종료됩니다.
만일 수행 시간이 초과된 경우 실행 중인 스크립트에 대한 결과는 보장할 수 없습니다. 따라서 제한 시간을 넘지 않도록 주의해 주시고, 오류 발생시 분기가 필요하다면 오류 처리하기 항목을 참고해 주세요.
제공되는 Node.js 라이브러리
패키지
용도
버전
apn
Apple Push Messaing
2.2.0
aws-sdk
AWS SDK
2.389.0
axios
HTTP request utility
0.19.2
bluebird
Javascript (Promise) Utility
3.7.2
cheerio
HTML DOM Parser
1.0.0-rc.3
crypto
Crypto Utility
-
csv-parse
CSV Manipulation
4.8.8
fetch
HTTP request utility
1.1.0
gm
Image Manipulation
1.23.1
googleapis
Google API SDK
48.0.0
iconv-lite
Text Encoding Converter
0.5.1
imagemagick
Image Manipulation
0.1.3
jsonwebtoken
JWT Token
8.5.1
lodash
Javascript Utility
4.17.15
moment
DateTime Utility
2.24.0
moment-timezone
DateTime Utility
0.5.28
nodemailer
SMTP Mailer
6.4.6
request
HTTP request utility
2.88.2
request-promise
HTTP request utility
4.2.5
superagent
HTTP request utility
5.2.2
underscore
Javascript Utility
1.10.2
uuid
UUID
7.0.3
xml2js
XML Manipulation
0.4.23
핸들러 함수
사용자 정의 스크립트 노드에 작성하는 script는 하나의 Node.js의 모듈과 동일합니다.
CLOSER에서는 module.exports
에 반환된 핸들러 함수를 실행하며, 핸들러 함수는 callback과 async function 두 가지 형태를 지원합니다.
handler(context, callback?): void
context (Object)
진행중인 대화의 현재 맥락을 담고 있는 객체. Context 참조
callback(error, result) (Function)
챗봇에 결과를 전달하는 콜백 함수
Callback 예시
handler(context): Promise<HandlerResult>
context (Object)
진행중인 대화의 현재 맥락을 담고 있는 객체. Context 참조
Promise형태로 결과값을 반환할 수 있습니다.
Promise 예시
Async Function 예시
데이터 타입
Bot
Property
Type
Description
Required
title
String
봇의 이름
Y
description
String
봇의 설명
N
Context
Property
Type
Description
conversationId
String
진행 중인 대화 식별자
endUserId
String
진행 중인 대화의 고객 식별자
params
Object
진행 중인 대화의 파라미터 딕셔너리
platform
String
진행 중인 대화의 메시징 채널 식별자'kakao', 'kakaobiz', 'facebook', 'line', 'navertalk', 'bizchat', 'wechat', 'web', 'test'
userKey
String
메시징 플랫폼에서 제공하는 고객의 고유 Id
HandlerResult
Property
Type
Description
Required
custom
Object
이후 노드에서 sandbox.result.custom
으로 접근할 객체
N
params
Object
노드 실행 후 설정할 파라미터 (설정된 키에 대한 값만 덮어씌워집니다.)
N
오류 처리하기
사용자 정의 스크립트 노드 수행 중 오류가 반환되는 경우 sandbox.error
객체가 생성됩니다. 개발자 도구를 통해 오류를 확인하거나 템플릿 문법을 통해 메시지를 출력할 수 있고, 연결 조건을 이용하면 오류 발생 시 다른 시나리오가 진행되도록 분기점을 설정하는 것도 가능합니다.
오류 확인하기 (개발자 도구)
개발자 도구를 이용하면 스크립트 실행 중 어떤 오류가 발생했는지 쉽게 확인 가능합니다. 위 스크린샷에서는 error1
이라는 이름의 존재하지 않는 변수를 사용하여 오류가 발생하였음을를 확인할 수 있습니다.
오류 출력하기 (템플릿 문법)
sandbox
객체는 컨텍스트에 존재하는 값으로서, 템플릿 문법을 활용하여 오류 메시지를 출력할 수 있습니다. {{sandbox.error}}
혹은 {{sandbox.error.message}}
값을 이용해 보세요.
이 때, 최종 사용자에게 해당 메시지가 그대로 노출되지 않도록 유의하세요.
아래는 대화 테스트(platform: test
)일 때에 오류가 존재하면 오류의 정보를 출력하는 디버깅 방법의 예시입니다.
오류 발생 시 분기
사용자 정의 스크립트 노드에서 오류가 발생할 경우 챗봇은 아무런 메시지를 반환하지 않지만, sandbox.error
값의 존재 유무를 통해 오류가 발생하였을 경우의 시나리오를 처리할 수 있습니다.
더 자세한 사항은 연결 조건 설정하기 항목을 참고하세요.
예제
1. 간단한 곱셈 스크립트
위 플로우는 챗봇에서 가격과 세율를 입력 받아 곱한 값을 반환하는 시나리오입니다. 제품의 가격을 사용자 입력 요청노드를 통해 입력받고, 파라미터 설정 노드에서 price
에 {{message}}
를 설정합니다. 세율을 사용자 입력 요청노드를 통해 입력받고, 파라미터 설정 노드에서 taxRate
에 {{message}}
를 설정합니다.
앞서 입력받은 파라미터는 사용자 정의 스크립트 노드에서 context.params
에서 참조할 수 있습니다. context.params.price
와 context.params.taxRate
를 곱한 값을 반환합니다.
custom
에 반환되는 값은 이후 노드에서 {{sandbox.result.custom}}
으로 참조할 수 있습니다. params
에 반환되는 값은 이후 노드에서 해당 파라미터의 값을 설정합니다. 예제 스크립트의 경우 price
파라미터를 새 값으로 덮어 씁니다.
만일 message
로 { text: '가격: ' + price * taxRate }
을 반환하면 챗봇은 사용자 정의 스크립트 노드가 종료되는 시점에 text
에 해당하는 String을 최종 사용자에게 메시지로 전달합니다. 메시지 객체의 타입은 추후 변경될 수 있으니 가급적 추가적으로 메시지 응답 노드를 생성하여 템플릿 문법을 활용하는 것을 추천합니다.
2. HTTP 요청 처리하기 (API 연동)
HTTP 요청 노드보다 복잡한 처리(payload 전처리 및 response 후처리 등)가 필요한 경우에는 스크립트 노드를 통해 HTTP 요청을 수행할 수 있습니다.
CLOSER에서는 현재 사용자 정의 스크립트 노드에 request
, superagent
두 가지 HTTP 요청 라이브러리를 제공하고 있습니다. 각각의 라이브러리에 대한 자세한 설명은 다음을 참고해주세요.
다음은 request
라이브러리와 템플릿 문법을 이용해 템플릿 문법 > 스타워즈 우주선 목록을 재구현해 본 예시입니다. 첨부된 플로우 또는 스크립트를 참고하여 고객님께 필요한 기능을 추가해보세요.
Last updated