다음에 대한 메시지를 처리한 후 서비스 호출 IBM Cloud Pak for Data
메시지 후 웹훅을 사용하여 어시스턴트가 응답을 생성한 후 외부 서비스를 호출할 수 있습니다.
다음과 같은 사용 사례에 메시지 후 웹훅을 사용할 수 있습니다:
- 사용자 지정 작업 ID를 사용하여 외부 소스에서 응답을 검색합니다.
- 어시스턴트의 응답을 사용자의 언어로 번역합니다.
- 개인정보 보호를 위해 이전에 제거한 개인 데이터를 다시 삽입합니다.
자세한 정보
관련 기능 및 세부 사항에 대한 자세한 내용은 다음 리소스를 참조하세요:
시작하기 전에
웹훅 서비스는 이러한 기술 요구 사항을 충족해야 합니다:
- 프로덕션 환경에서는 웹훅을 설정하거나 테스트하지 마세요.
- 호출은 POST HTTP 요청이어야 합니다.
- 요청과 응답은 JSON(콘텐츠 유형: application/json)을 사용해야 합니다.
- 응답은 30초 이내에 반환되어야 합니다.
프로시저
이 섹션에서는 Cloud Pak for Data 에 대한 포스트 메시지 웹훅을 정의, 테스트 및 제거하는 절차에 대해 설명합니다.
웹훅 구성
웹훅 세부사항을 추가하려면 다음 단계를 완료하십시오.
-
탐색 패널에서 환경을 클릭하고 웹훅을 구성할 환경을 엽니다.
-
아이콘을 클릭하여 환경 설정을 여십시오. -
사후 메시지 웹훅 스위치를 사용으로 설정하십시오.
-
동기 이벤트에서 다음 옵션 중 하나를 선택합니다:
-
오류가 있는 경우 웹훅 업데이트 없이 사용자 입력을 계속 처리합니다.
-
웹훅 호출이 실패하면 클라이언트에 오류를 반환합니다.
자세한 내용은 후처리를 위한 웹훅 오류 처리 구성을 참조하세요.
-
-
URL 필드에서 HTTP POST 요청 콜아웃을 전송할 외부 애플리케이션의 URL을 추가하십시오.
예를 들어, 어시스턴트의 응답을 별도의 컨텐츠 관리 시스템에 저장할 수 있습니다. 어시스턴트가 입력을 이해하는 경우 처리된 조치는 CMS의 응답에 해당하는 고유 ID를 리턴합니다. 지정된 고유 ID에 대해 CMS로부터 응답을 검색하는 서비스를 호출하려면 서비스 인스턴스의 URL을 지정하십시오. 예:
https://example.com/get_answer.SSL 프로토콜을 사용하는 URL을 지정해야 하므로
https시작 URL을 지정하십시오. -
메시지 후 웹훅에 대한 인증을 구성하려면 인증 편집을 클릭합니다. 자세한 지침은 메시지 전 및 메시지 후 웹훅에 대한 인증 방법 정의하기를 참조하세요.
-
시간 제한 필드에서 어시스턴트가 오류를 반환하기 전에 웹훅의 응답을 기다릴 시간(초)을 지정합니다. 제한시간 지속 기간은 1초보다 짧거나 30초보다 길 수 없습니다.
-
헤더 섹션에서 헤더 추가 +를 클릭하여 서비스에 전달할 헤더를 한 번에 하나씩 추가합니다.
호출하는 외부 애플리케이션이 응답을 반환하는 경우 다른 형식으로 응답을 보낼 수 있습니다. 웹훅은 응답이 JSON으로 형식화되어야 합니다. 다음 표는 반환할 결과값이 JSON 형식임을 나타내는 헤더를 추가하는 방법을 설명합니다.
헤더 예제 헤더 이름 헤더 값 Content-Typeapplication/json -
헤더 값을 저장한 후에는 문자열이 별표로 바뀌며 다시 볼 수 없습니다.
-
웹훅 세부사항이 자동으로 저장됩니다.
후처리를 위한 웹훅 오류 처리 구성하기
웹훅 호출이 실패할 경우 사후 처리 단계에서 오류를 반환할지 여부를 결정할 수 있습니다. 다음과 같은 두 가지 옵션이 존재합니다.
-
오류가 있는 경우 웹훅 업데이트 없이 사용자 입력을 계속 처리합니다: 어시스턴트가 오류를 무시하고 웹훅 결과 없이 메시지를 처리합니다. 후처리가 유용하지만 필수적인 것은 아니라면 이 옵션을 고려하세요.
-
웹훅 호출이 실패하면 클라이언트에 오류를 반환합니다: 어시스턴트가 응답을 보낸 후 사후 처리가 중요한 경우 이 옵션을 선택합니다.
웹훅 호출이 실패할 경우 클라이언트에 오류 반환을 사용 설정하면 후처리 단계가 성공적으로 완료될 때까지 모든 작업이 중지됩니다.
외부 프로세스를 정기적으로 테스트하여 잠재적인 장애를 파악하세요. 필요한 경우 이 설정을 조정하여 응답 처리의 중단을 방지하세요.
웹훅 테스트
프로덕션 환경에서 사용되는 어시스턴트에 웹훅을 사용 설정하기 전에 웹훅에 대한 광범위한 테스트를 수행하세요.
웹훅은 어시스턴트가 메시지를 처리하고 응답이 채널에 반환될 준비가 된 경우에만 트리거됩니다.
웹훅 문제점 해결
다음 오류 코드는 발생할 수 있는 문제의 원인을 추적하는 데 도움이 될 수 있습니다. 예를 들어 웹 채팅 연동 서비스를 사용하는 경우 제출하는 모든 테스트 메시지가 There is an error with the message you just sent, but feel free to ask me something else 와 같은 메시지를 반환하면 웹훅에 문제가 있다는 것을 알 수 있습니다. 이 메시지가
표시되면 cURL, 등의 REST API 도구를 사용하여 테스트 /message API 요청을 보내면 오류 코드와 반환되는 전체 메시지를 확인할 수 있습니다.
| 오류 코드 및 메시지 | 설명 |
|---|---|
| 422 웹훅이 올바르지 않은 JSON 본문과 함께 응답 | 웹훅의 HTTP 응답 본문을 JSON으로 구문 분석할 수 없습니다. |
422 웹 훅이 [500] 상태 코드와 함께 응답 |
호출한 외부 서비스에 문제가 발생했습니다. 코드가 실패했거나 외부 서버가 요청을 거부했습니다. |
500 프로세서 예외: [connections to all backends failing] |
웹훅 마이크로서비스에서 오류가 발생했습니다. 백엔드 서비스에 연결할 수 없습니다. |
요청 본문 예
외부 코드에서 처리할 수 있도록 요청 후 메시지 웹훅 본문의 형식을 아는 것이 유용합니다.
페이로드에는 어시스턴트가 버전 2의 /message, 상태 저장 및 상태 비저장, API 호출에 대해 반환하는 응답 본문이 포함되어 있습니다. 이벤트 이름 message_processed 은 메시지 후 웹훅이 요청을 생성한다는 것을 나타냅니다. 메시지 요청 본문에 대한 자세한 내용은 API 참조를 참조하세요.
다음 샘플은 간단한 요청 본문 형식이 어떻게 지정되는지 보여줍니다:
{
"event": {
"name": "message_processed"
},
"options": {},
"payload": {
"output": {
"intents": [
{
"intent": "General_Greetings",
"confidence": 1
}
],
"entities": [],
"generic": [
{
"response_type": "text",
"text": "Hello. Good evening"
}
]
},
"user_id": "test user",
"context": {
"global": {
"system": {
"user_id": "test user",
"turn_count": 11
},
"session_id": "sxxx"
},
"skills": {
"actions skill": {
"user_defined": {
"var": "anthony"
},
"system": {
"state": "nnn"
}
}
}
}
}
예제 1
이 예는 어시스턴트의 각 응답 끝에 y'all 을 추가하는 방법을 보여 줍니다.
메시지 후 웹훅 구성 페이지에서 다음 값이 지정됩니다:
- URL:
https://your-webhook-url/ - 헤더 이름: 컨텐츠 유형
- 헤더 값: application/json
메시지 후 웹훅은 IBM Cloud Functions 웹 액션 이름 add_southern_charm 을 호출합니다.
add_southern_charm 웹 조치의 node.js 코드는 다음과 같습니다.
function main(params) {
console.log(JSON.stringify(params))
if (params.payload.output.generic[0].text !== '') {
//Get the length of the input text
var length = params.payload.output.generic[0].text.length;
//create a substring that removes the last character from the input string, which is typically punctuation.
var revision = params.payload.output.generic[0].text.substring(0,length-1);
const response = {
body : {
payload : {
output : {
generic : [
{
//Replace the input text with your shortened revision and append y'all to it.
"response_type": "text",
"text": revision + ', ' + 'y\'all.'
}
],
},
},
},
};
return response;
}
else {
return {
body : params
}
}
}
예제 2
이 예는 메시지 응답을 고객의 언어로 다시 번역하는 방법을 보여줍니다. 예제 2의 단계를 수행하여 원본 메시지를 영어로 번역하는 사전 메시지 웹훅을 정의한 경우에만 작동합니다.
IBM Cloud Functions에서 웹 조치 시퀀스를 정의하십시오. 시퀀스의 첫 번째 작업은 메시지 전 웹훅 코드에서 original_input 이라는 컨텍스트 변수에 저장한 원본 수신 텍스트의 언어를 확인합니다. 시퀀스의 두 번째 조치는 대화 상자 응답 텍스트를 영어에서 고객이 사용한 원래 언어로 변환합니다.
메시지 후 웹훅 구성 페이지에서 다음 값이 지정됩니다:
- URL:
https://your-webhook-url/ - 헤더 이름: 컨텐츠 유형
- 헤더 값: application/json
시퀀스의 첫 번째 웹 조치에 대한 node.js 코드는 다음과 같습니다.
let rp = require("request-promise");
function main(params) {
console.log(JSON.stringify(params))
if (params.payload.output.generic[0].text !== '') {
const options = { method: 'POST',
url: 'https://api.us-south.language-translator.watson.cloud.ibm.com/instances/572b37be-09f4-4704-b693-3bc63869nnnn/v3/identify?version=2018-05-01',
auth: {
'username': 'apikey',
'password': 'nnnn'
},
headers: {
"Content-Type":"text/plain"
},
body: [
params.payload.context.skills['actions skill'].user_defined.original_input
],
json: true,
};
return rp(options)
.then(res => {
//Set the language property of the incoming message to the language that was identified by Watson Language Translator.
params.payload.context.skills['actions skill'].user_defined['language'] = res.languages[0].language;
console.log(JSON.stringify(params))
return params;
})
}
else {
params.payload.context.skills['actions skill'].user_defined['language'] = 'none';
return param
}
};
시퀀스의 두 번째 웹 조치는 다음과 같습니다.
let rp = require("request-promise");
function main(params) {
console.log(JSON.stringify(params))
if ((params.payload.context.skills["actions skill"].user_defined.language !== 'en') && (params.payload.context.skills["actions skill"].user_defined.language !== 'none')) {
const options = { method: 'POST',
url: 'https://api.us-south.language-translator.watson.cloud.ibm.com/instances/572b37be-09f4-4704-b693-3bc63869nnnn/v3/translate?version=2018-05-01',
auth: {
'username': 'apikey',
'password': 'nnn'
},
body: {
text: [
params.payload.output.generic[0].text
],
target: params.payload.context.skills["actions skill"].user_defined.language
},
json: true
};
return rp(options)
.then(res => {
params.payload.context.skills["actions skill"].user_defined["original_output"] = params.payload.output.generic[0].text;
params.payload.output.generic[0].text = res.translations[0].translation;
return {
body : params
}
})
}
return {
body : params
}
};
웹훅 제거
웹훅으로 메시지 응답을 처리하지 않으려면 다음 단계를 완료하세요:
-
어시스턴트에서 환경으로 이동하여 웹훅을 제거하려는 환경을 엽니다.
-
아이콘을 클릭하여 환경 설정을 여십시오. -
환경 설정 페이지에서 메시지 웹후크 게시를 클릭합니다.
-
다음 단계 중 하나를 수행하십시오.
-
모든 수신 메시지 처리를 위해 웹훅 호출을 중지하려면 메시지 후 웹훅 스위치를 사용 안 함으로 설정하세요.
-
호출하려는 웹훅을 변경하려면 웹훅 삭제를 클릭합니다.