CLOVA Chatbot과 API Gateway 기본 연동
  • PDF

CLOVA Chatbot과 API Gateway 기본 연동

  • PDF

챗봇을 외부 채널과 연동하기 위해서는, 먼저 네이버 클라우드 플랫폼의 API Gateway와 연동해야 합니다. 챗봇 도메인과 API Gateway를 연동하여 연동 정보를 획득한 후, 해당 연동 정보를 사용하여 외부 채널과 Webhook으로 연결하는 방식입니다. 도메인별 사용량에 따라 API Gateway 요금이 과금됩니다. (API Gateway는 1,000,000건의 API 호출이 무료로 제공됩니다). API Gateway에 대해 잘 알지 못하더라도 몇 번의 클릭만으로 쉽게 연동할 수 있으므로 이 가이드를 참고하여 연동 URL과 Secret Key를 잘 보관해 주십시오.

챗봇과 API Gateway의 연동 순서

  1. 챗봇 도메인의 InvokeURL를 API Gateway의 Endpoint로 연결
  2. 메신저 연동/고유 채널 연동
참고
  • 각 도메인마다 1개의 고유한 InvokeURL을 가지고 있습니다. InvokeURL은 안전한 서비스를 위해 외부 서비스에 바로 공개되지 않으며, 네이버 클라우드 플랫폼의 API Gateway에 연동하여 사용하도록 설계되어 있습니다.
  • 챗봇과 API Gateway가 연결되어 있지 않으면 챗봇과 외부 채널이 정상적으로 연동되지 않습니다.
  • API Gateway 연동 방법에는 자동 연동 방법과 수동 연동 방법이 있습니다. 사용 방법이 간단한 자동 연동을 이용하는 것을 추천합니다.

API Gateway 이용 신청

도메인의 InvokeURL을 API Gateway와 연동하려면 먼저 API Gateway 서비스의 이용 신청을 완료해야 합니다. API Gateway 이용에 대한 자세한 설명은 API Gateway 사용 가이드를 참고해 주십시오.
API Gateway 이용 신청하는 방법은 다음과 같습니다.

  1. 네이버 클라우드 플랫폼의 콘솔에서 Services > API Gateway 메뉴를 차례대로 클릭해 주십시오.
  2. [상품 이용 신청] 버튼을 클릭해 주십시오.

자동 연동 설정

API Gateway 이용 신청이 완료되면 자동으로 API Gateway Invoke URL이 생성됩니다.
자동 연동 설정을 확인하고 Invoke URL을 복사하는 방법은 다음과 같습니다.

  1. API Gateway 이용 신청을 참고하여 API Gateway 이용 신청을 완료해 주십시오.
  2. 네이버 클라우드 플랫폼의 콘솔에서 Services > CLOVA Chatbot > Domain 메뉴를 차례대로 클릭해 주십시오.
  3. 원하는 도메인의 [빌더 실행하기] 버튼을 클릭하여 챗봇 빌더를 실행해 주십시오.
  4. 챗봇 빌더의 챗봇 설정 > [메신저 연동] 탭에서 연동할 메신저의 [연동] 버튼을 클릭해 주십시오.
  5. 연동 창에서 APIGW 연동 설정 항목의 APIGW Invoke URL을 확인해 주십시오.
    chatbot-chatbot-5-1_auto_ko.png
    • APIGW InvokeURL을 변경하려면 [수정] 버튼 클릭
    • 웹페이지 및 모바일 앱에서, 자동 생성된 API Gateway의 InvokeURL로 호출하게 되며, 각 도메인마다 고유의 호출 URL이 생성됨
      <예시> https://mmrm1gp7p7.apigw.ntruss.com/send/beta
    • API Gateway의 InvokeURL로 호출 시 Secret Key를 생성함
  6. APIGW Invoke URL과 Secret Key를 복사하여 별도로 보관해 주십시오.

수동 연동 설정

수동 연동을 설정하는 경우, API Gateway의 이용 신청을 완료한 후 다음 단계에 따라서 API를 생성합니다.

  1. API 생성
  2. Stages API 생성
  3. API 배포
  4. 챗봇 Invoke URL 복사

API 생성

API Gateway에서 API를 생성하는 방법은 다음과 같습니다.

  1. 네이버 클라우드 플랫폼의 콘솔에서 Services > API Gateway > My Products 메뉴를 차례대로 클릭해 주십시오.
  2. [Product 생성] 버튼을 클릭해 주십시오.
  3. Product 생성 화면에서 정보를 입력하고 [Product 생성] 버튼을 클릭해 주십시오.
  4. 생성된 Project의 APIs를 클릭해 주십시오.
    chatbot-chatbot-5-1_api01_ko
  5. API 생성 페이지에서 [API 생성] 버튼을 클릭해 주십시오.
  6. API 생성 화면에서 Swagger에서 가져오기를 선택하고 API 이름을 입력해 주십시오.
  7. Swagger에서 가져오기의 [Swagger JSON] 탭에 ‘chatbot_messenger_swagger.json’ 파일을 업로드해 주십시오.
    chatbot-chatbot-5-1_api02_ko
    • 해당 파일은 챗봇 빌더의 메신저 연동 창에서 다운로드 가능. 메신저 연동창에서 APIGW 수동 연동을 연 후 APIGW Configuration의 [다운로드] 버튼 클릭
      chatbot-chatbot-5-1_api03_ko
  8. [API 생성] 버튼을 클릭해 주십시오.
  9. Stages API 생성을 참고하여 Stages API를 생성해 주십시오.

Stages API 생성

Stages API를 생성하는 방법은 다음과 같습니다.

  1. [Stages] 탭 > [Stage 생성] 버튼을 클릭해 주십시오.
    chatbot-chatbot-5-1_stagesapi01_ko
  2. Stage 이름을 입력하고 Endpoint 도메인을 커스텀으로 선택해 주십시오.
  3. 챗봇에서 Invoke URL을 복사하여 Endpoint 도메인 필드에 붙여 넣으십시오.
    chatbot-chatbot-5-1_stagesapi03_ko
    • Invoke URL을 복사하는 방법은 자동 연동 설정 참조
    • 메신저를 연동하려면 생성한 Stage의 Invoke URL을 복사하여 별도로 저장
  4. [생성] 버튼을 클릭해 주십시오.
  5. API 배포를 참고하여 API를 배포해 주십시오.

API 배포

API를 배포하는 방법은 다음과 같습니다.

  1. [Resources] 탭을 클릭하고 상단의 [API 배포] 버튼을 클릭해 주십시오.
    chatbot-chatbot-5-1_apirelease01_ko
  2. API 배포 창이 나타나면 배포할 스테이지를 지정하고 스테이지 이름과 설명을 입력해 주십시오.
  3. 생성된 API를 배포하기 위해 [추가] 버튼을 클릭해 주십시오.
    • [Stage] 탭에서 Invoke URL을 복사하여 다양한 채널과 연동 가능

챗봇 Invoke URL 복사

챗봇의 APIGW Invoke URL를 복사하는 방법은 다음과 같습니다.

  1. 네이버 클라우드 플랫폼의 콘솔에서 Services > CLOVA Chatbot > Domain 메뉴를 차례대로 클릭해 주십시오.
  2. 원하는 도메인의 [빌더 실행하기] 버튼을 클릭하여 챗봇 빌더를 실행해 주십시오.
  3. 챗봇 빌더에서 챗봇 빌더 > [메신저 연동] 탭을 클릭해 주십시오.
  4. 연동할 메신저의 [연동] 버튼을 클릭해 주십시오
  5. APIGW Invoke URL의 [주소 복사] 버튼을 클릭해 주십시오.

chatbot_messenger_swagger.json 파일

chatbot_messenger_swagger.json 파일의 내용은 다음과 같습니다.

{
  "swagger": "2.0",
  "info": {
    "description": ""
  },
  "host": "",
  "basePath": "/",
  "schemes": [ "https" ],
  "security": [ {
    "x-ncp-apigw-api-key": [ ]
  } ],
  "paths": {
    "/": {
      "get": {
        "tags": [ "messenger" ],
        "description": "",
        "consumes": [ "application/json" ],
        "produces": [ "application/json" ],
        "parameters": [ ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "x-ncp-apigw-use-body-when-formdata": false,
        "x-ncp-apigateway-filters": {
          "valid": {
            "type": "NONE"
          },
          "apiKey": {
            "required": false
          },
          "auth": {
            "platform": "NONE"
          }
        },
        "x-ncp-apigateway-endpoint": {
          "HTTP": {
            "method": "GET",
            "url": "/facebook/verify",
            "stream": false
          }
        }
      },
      "post": {
        "tags": [ "messenger" ],
        "description": "",
        "consumes": [ "application/json" ],
        "produces": [ "application/json" ],
        "parameters": [ {
          "in": "body",
          "name": "msg",
          "description": "",
          "required": true,
          "schema": {
            "$ref": "#/definitions/Empty"
          }
        } ],
        "responses": {
          "200": {
            "description": ""
          },
          "400": {
            "description": ""
          },
          "401": {
            "description": ""
          },
          "403": {
            "description": ""
          },
          "500": {
            "description": ""
          }
        },
        "x-ncp-apigw-use-body-when-formdata": false,
        "x-ncp-apigateway-filters": {
          "valid": {
            "type": "NONE"
          },
          "apiKey": {
            "required": false
          },
          "auth": {
            "platform": "NONE"
          }
        },
        "x-ncp-apigateway-endpoint": {
          "HTTP": {
            "method": "POST",
            "url": "/message",
            "stream": false
          }
        }
      }
    },
    "/keyboard": {
      "get": {
        "tags": [ "messenger" ],
        "description": "",
        "produces": [ "application/json" ],
        "parameters": [ ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "x-ncp-apigw-use-body-when-formdata": false,
        "x-ncp-apigateway-filters": {
          "valid": {
            "type": "NONE"
          },
          "apiKey": {
            "required": false
          },
          "auth": {
            "platform": "NONE"
          }
        },
        "x-ncp-apigateway-endpoint": {
          "HTTP": {
            "method": "GET",
            "url": "/keyboard",
            "stream": false
          }
        }
      },
      "post": {
        "tags": [ "messenger" ],
        "description": "",
        "produces": [ "application/json" ],
        "parameters": [ ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "x-ncp-apigw-use-body-when-formdata": false,
        "x-ncp-apigateway-filters": {
          "valid": {
            "type": "NONE"
          },
          "apiKey": {
            "required": false
          },
          "auth": {
            "platform": "NONE"
          }
        },
        "x-ncp-apigateway-endpoint": {
          "HTTP": {
            "method": "POST",
            "url": "/keyboard",
            "stream": false
          }
        }
      }
    },
    "/message": {
      "post": {
        "tags": [ "messenger" ],
        "description": "",
        "consumes": [ "application/json" ],
        "produces": [ "application/json" ],
        "parameters": [ {
          "in": "body",
          "name": "msg",
          "description": "",
          "required": true,
          "schema": {
            "$ref": "#/definitions/Empty"
          }
        } ],
        "responses": {
          "200": {
            "description": ""
          },
          "400": {
            "description": ""
          },
          "401": {
            "description": ""
          },
          "403": {
            "description": ""
          },
          "500": {
            "description": ""
          }
        },
        "x-ncp-apigw-use-body-when-formdata": false,
        "x-ncp-apigateway-filters": {
          "valid": {
            "type": "NONE"
          },
          "apiKey": {
            "required": false
          },
          "auth": {
            "platform": "NONE"
          }
        },
        "x-ncp-apigateway-endpoint": {
          "HTTP": {
            "method": "POST",
            "url": "/message",
            "stream": false
          }
        }
      }
    }
  },
  "securityDefinitions": {
    "x-ncp-apigw-api-key": {
      "type": "apiKey",
      "name": "x-ncp-apigw-api-key",
      "in": "header"
    }
  },
  "definitions": {
    "Empty": {
      "type": "object",
      "x-ncp-model-descption": "Default empty model"
    }
  }
}

이 글이 도움이 되었나요?

What's Next