Kore.ai SDK 라이브러리는 웹 소켓 채널을 사용하여 Kore.ai 봇 플랫폼과 통신합니다. 웹 소켓 세션을 초기화하려면, Kore.ai SDK는 다음 봇 플랫폼 엔드포인트를 사용합니다. Kore.ai 봇 플랫폼 SDK를 사용하는 경우, JWT 토큰만 생성하고 클라이언트 SDK로 전달해야 합니다.
초기화
이 섹션에서는 Kore.ai SDK가 웹 소켓을 초기화하는 방법을 설명하며 참조 전용입니다.
필수 구성 요소
클라이언트 앱이 등록되어 있고, 클라이언트 ID 및 시크릿 키가 Kore.ai 봇 빌더 도구에서 생성되어 있습니다.
1단계
JWT가 클라이언트 앱 자격 증명 및 사용자 정보를 사용하여 서버 측에서 생성됩니다. JWT가 클라이언트 앱으로 전달됩니다.
2단계
클라이언트 앱은 다음 봇 플랫폼 엔드포인트를 사용하여 봇 플랫폼에서 JWT 토큰을 accessToken
으로 교환합니다. 이 섹션에서는 다음 JSON 구문을 기반으로 /api/1.1/oAuth/token/jwtgrant
엔드포인트를 사용하여 대화에서 메시지 게시 요청 형식을 지정하는 방법을 설명합니다.
POST
https://{{APIHost}}/api/1.1/oAuth/token/jwtgrant
{ "assertion": “{{JWT Token}}”, "botInfo": { "chatBot": "{{Bot Name}}", "taskBotId": "st-f74a3430-3b19-55a3-be41-1ab1a35c4685" } )
샘플 cURL
curl 'https://{{APIHost}}/api/1.1/oAuth/token/jwtgrant' \ -H 'content-type: application/json' \ --data-binary '{"assertion":"{JWT Token}}","botInfo":{"chatBot":"{{Bot Name}}","taskBotId":"st-f74a3430-3b19-55a3-be41-1ab1a35c4685"}}
응답
다음 샘플 JSON 응답은 accessToken
및 해당 토큰과 관련된 사용자를 보여줍니다.
{ "authorization": { "accessToken": "ZdV2OL_UZ_MvHog-rs8k9KJFNWBICvquSc3jpeaRDE_-", // access token to user at /api/rtm "token_type": "bearer", "expiresDate": "2019-06-28T06:52:23.160Z", //expiry date for access token "issuedDate": "2019-02-28T06:52:23.160Z" //access token issuedDate }, "userInfo": { "userId": "u-4f6c68e0-551a-5dd9-a33a-1af3dc9cadcc", // user id which is unique for the user and can be used at bot messages api "accountId": "5c66514d09ab3565deb2e30a", // account id in which the user is present "orgId": "o-88aad7f1-0d32-5765-93d7-f40c80402114", // organization id of the user "identity": "cs-5b08ed1e-5fa7-5aaa-9c21-28bf8c90b739/admin1212@qakore.xyz", //identity of user from the channel perspective "enrollType": "free", //Enrollment type (Free/ Paid etc) "managedBy": "5c66514d09ab3565deb2e30a", //(The account id) "fName": "", //first name of the user // (fetched if the user is registered on the platform) "lName": "" //last name of the user // (fetched if the user is registered on the platform) } }
3단계
클라이언트 앱은 다음 엔드포인트를 사용하여 웹 소켓 URL을 획득합니다. 이 섹션에서는 다음 JSON 구문을 기반으로 /api/1.1/rtm/start
엔드포인트를 사용하여 웹 소켓 URL을 가져오는 요청 형식을 지정하는 방법을 설명합니다.
참고: 이 URL은 오래가지 않고 30초 후에 만료됩니다. 만료되기 전에 연결에 사용되는지 확인해야 합니다.
POST
https://{{APIHost}}/api/1.1/rtm/start
{ "botInfo": { "chatBot": "Twitter", "taskBotId": "st-f74a3430-3b19-55a3-be41-1ab1a35c4685" } }
accessToken
은 권한 부여 헤더의 bearer
매개변수에서 전달됩니다.
샘플 cURL
curl 'https://{{APIHost}}/api/1.1/rtm/start' \ -H 'content-type: application/json' \ -H 'Authorization: bearer {{accessToken}}' \ --data-binary '{"botInfo":{"chatBot":"{{Bot Name}}","taskBotId":"st-f74a3430-3b19-55a3-be41-1ab1a35c4685"}'
응답
다음 샘플 JSON 응답은 웹 소켓 URL을 보여줍니다.
{"url":"wss://xxx.yyy.com:443/rtm/bot?sid=GhKrtrEC61g7hAnmvKAVnJIHG0DS1Lzv"}
RTM 이벤트 참조
다음 실시간 이벤트는 클라이언트 앱 및 Kore.ai 봇 플랫폼 간에 교환할 수 있습니다.
RTM 클라이언트 이벤트
이 섹션에서는 웹 소켓을 통해 클라이언트 앱에서 Kore.ai 봇 플랫폼으로 전송된 RTM 클라이언트 이벤트 JSON 응답을 설명합니다. 이벤트 유형: /bot.message
설명: 사용자가 메시지를 게시할 때 실행됩니다. 다음 페이로드는 사용자가 입력한 메시지를 봇 플랫폼으로 보내는 데 사용됩니다.
{ "clientMessageId": 1466692440896, "message": { "body": "Here is the message.", "attachments": [ ] }, "resourceid": "/bot.message", "botInfo": { "chatBot": "CNN", "taskBotId": "st-8aaf0939-c34a-5976-8e2e-5c91e685b2ce" }, "id": 1466692440896 }
RTM 서버 이벤트
이 섹션에서는 웹 소켓을 통해 클라이언트 앱으로 전송된 RTM 서버 이벤트 JSON 응답을 설명합니다. 이벤트 유형: ack
설명: 클라이언트 앱에서 이벤트가 수신될 때마다 전송되는 확인 응답입니다. 다음 페이로드는 클라이언트 앱으로부터 이벤트를 확인 응답하는 데 사용됩니다.
{ "ok": true, "replyto": 1466692440896, "message": "delivered", "type": "ack" }
이벤트 유형: bot_response
설명: 클라이언트 앱에서 메시지가 처리될 때마다 전송되는 확인 응답입니다. 클라이언트 앱에서 메시지가 처리될 때마다 다음 페이로드가 전송됩니다.
{ "type": "bot_response", "from": "bot", "message": [ { "type": "text", "cInfo": { "body": " Hi. " } } ], "botInfo": { "chatBot": "CNN", "taskBotId": "st-8aaf0939-c34a-5976-8e2e-5c91e685b2ce" }, "createdOn": "2016-06-23T14:34:00.025Z", "icon": "https://devbots.kore.com/api/getMediaStream/market/f-683e82be-fc25-5921-bf41-4104780f71c2.png" }
이벤트 유형: user_message
설명: 사용자가 다른 세션에서 동시에 메시지를 입력하고 서버에 메시지를 보낼 때 클라이언트 앱으로 전송됩니다. 다음 샘플 페이로드는 클라이언트 앱으로 전송됩니다.
{ "botInfo": { "chatBot": "CNN", "taskBotId": "st-8aaf0939-c34a-5976-8e2e-5c91e685b2ce" }, "from": "self", "message": { "body": "how are you doing ", "attachments": [] }, "id": 1466692871803, "type": "user_message" }
대화 기록 가져오기
클라이언트 앱은 위의 2단계에서 생성된 액세스 토큰을 사용하여 봇 플랫폼 엔드포인트 /api/botmessages/rtm?botId={{botId}}
를 요청하여 사용자 및 봇 간에 교환된 이전 메시지를 가져옵니다. 언급된 엔드포인트의 응답을 대화창에 대화 기록을 표시하는 데 사용할 수 있습니다. 이 섹션에서는 다음 JSON 구문을 기반으로 /api/botmessages/rtm
엔드포인트를 사용하여 웹 소켓 URL을 가져오는 요청 형식을 지정하는 방법을 설명합니다.
GET https://{{APIHost}}/api/botmessages/rtm?botId={{botId}}
질의 매개변수:
- botId(필수): 봇 ID이며, 봇의 일반 설정 페이지에서 액세스할 수 있습니다.
- skip/offset(옵션): 건너뛸 메시지 수입니다.
- limit(옵션): 가져올 메시지 수입니다.
accessToken
: 헤더에 권한 부여 매개변수로 bearer와 함께 전달됩니다
샘플 cURL
curl 'https://{{APIHost}}/api/botmessages/rtm?botId={{botId}}&limit=10' \ -H 'accept: application/json' \ -H 'Authorization: bearer -{{accessToken}}' \ -H 'content-type: application/json'
샘플 응답
{ "total": 2, "moreAvailable": false, "messages": [ { "_id": "ms-8a83d099-dd93-5b6b-836b-ac77bdfe9d4a", "channels": [ { "type": "rtm" } ], "type": "incoming", "status": "sent to cs", "createdBy": "u-211f287f-17c8-51ac-b768-15c68e19afb2", "lmodifiedBy": "u-211f287f-17c8-51ac-b768-15c68e19afb2", "lmodifiedOn": "2019-12-03T05:07:44.008Z", "botId": "st-2f579dbf-9dc1-548c-972f-f19d33160a07", "orgId": "o-44741779-1971-5ab9-a0f7-aaf4e21dbe4e", "accountId": "5a675150ff600b3d7665d2a6", "isBB": 0, "ms": 1, "chnl": "rtm", "components": [ { "_id": "cp-1edc5033-a9cb-5011-8b2b-5986b7fa45cc", "cT": "text", "data": { "text": "Hi" }, "thumbnails": [ ] } ], "createdOn": "2019-12-03T05:07:44.097Z", "timestampValue": 1575349664097, "__v": 0, "lang": "en", "sessionId": "5de5eda04cdcff145752dbf6", "nodeType": 0, "tr0_I": "dg-61e5609f-76e7-5c42-b66f-7bb8b3af2433:intent0", "tr0_O": "dg-61e5609f-76e7-5c42-b66f-7bb8b3af2433:entity1:4a04988ee640428d1847fc433081be0b", "tr0_T": "0", "tr_isSS": 1, "resourceid": "messagestore", "tags": { "messageTags": [ ], "userTags": [ ], "sessionTags": [ ] } }, { "_id": "ms-80e8dbf3-ca69-5ee2-a2c1-1c6a70100c08", "channels": [ { "type": "rtm" } ], "type": "outgoing", "status": "pending", "lmodifiedOn": "2019-12-03T05:07:45.165Z", "createdBy": "u-211f287f-17c8-51ac-b768-15c68e19afb2", "components": [ { "_id": "cp-209a0641-130b-57ce-b0d3-d651691084bb", "cT": "text", "data": { "text": "Please enter the text to comment on the issue" }, "thumbnails": [ ] } ], "botId": "st-2f579dbf-9dc1-548c-972f-f19d33160a07", "orgId": "o-44741779-1971-5ab9-a0f7-aaf4e21dbe4e", "accountId": "5a675150ff600b3d7665d2a6", "tN": "Add Comment to Issue", "isBB": 0, "ms": 1, "chnl": "rtm", "lang": "en", "createdOn": "2019-12-03T05:07:45.171Z", "timestampValue": 1575349665171, "__v": 0, "sessionId": "5de5eda04cdcff145752dbf6", "resourceid": "messagestore", "tags": { "messageTags": [ ], "userTags": [ ], "sessionTags": [ ] } } ] }
다음 단계
봇 플랫폼 API 엔드포인트 및 RTM 이벤트는 클라이언트 앱 또는 Kore.ai 봇 SDK와 함께 사용할 수 있습니다. 자세한 내용은, Kore.ai 봇 SDK를 참조하세요.