Giter Club home page Giter Club logo

chatbot-api's Introduction

Chat Bot API V1

차례



개요

네이버 톡톡 챗봇 플랫폼은 네이버 톡톡에서 봇을 만드는 데 필요한 도구를 제공하는 Chat Bot API를 제공합니다. Chat Bot API를 이용해 사용자에게 다양한 메시지를 보내고, 봇에 네이버 쇼핑, 페이 등 네이버의 서비스를 연결할 수 있습니다.

다음 그림은 Chat Bot API의 작동 구조를 나타낸 것입니다. composite_message

  • 사용자의 다양한 이벤트가 챗봇 플랫폼을 통해 챗봇에게 Webhook으로 전달됩니다.
  • 챗봇은 보내기 API를 이용해 사용자에게 메시지 전달 이벤트를 보낼 수 있습니다.
  • 챗봇 플랫폼은 기본적인 메시지 API뿐만 아니라 Profile API, Pay API를 제공합니다.


챗봇용 파트너 계정 생성

Chat Bot API를 이용하려면 먼저 챗봇용 파트너 계정을 생성해야 합니다. 챗봇용 파트너 계정 생성 방법은 다음과 같습니다.

  1. 네이버 톡톡 파트너센터에 접속합니다.
  2. 회사 단체아이디 또는 대표성 있는 개인아이디로 로그인합니다.
  3. 내계정관리 > 새로운 톡톡 계정 만들기를 클릭합니다.
  4. 서비스 선택하기에서 서비스를 선택하지 않고 서비스 연결 나중에 하기를 클릭합니다.
  5. 테스트 계정을 생성하려면 개인을 선택하고, 서비스 계정을 생성하려면 국내사업자, 해외사업자 또는 기관/단체를 선택한 후 다음을 클릭합니다.
  6. 대표이미지, 프로필명, 휴대폰 번호 등의 정보를 입력하고 사용신청을 클릭합니다. 생성된 계정은 검수중 상태로 표시되며, 검수가 완료되면 사용중 상태로 변경되고 SMS로 알림이 전송됩니다.
  7. 내계정관리등록된 계정 목록에서 계정관리를 클릭해 계정 홈에 진입합니다.
  8. 개발자도구 아래의 챗봇API 설정을 클릭해 신청 후 이용약관에 동의하고 챗봇을 설정합니다.

테스트 진행 시 검색 제외 처리

파트너센터 > 기본설정 > 프로필정보에서 프로필명 앞에 [테스트]를 삽입하면 톡톡 가맹점 찾기에서 제외됩니다. 그러면 테스트를 진행하는 동안 검색에서 유입되는 사용자 방문을 차단할 수 있습니다.
(예) 톡톡챗봇 -> [테스트] 톡톡챗봇


Webhook 작성 방법

사용자 이벤트를 챗봇에게 전달할 때 webhook을 이용합니다. webhook 작성 방법은 다음과 같습니다.

Webhook 요구 사항

  • WebhookTLS 기반의 통신을 지원해야 합니다.
    • 네이버 톡톡과 연동하는 외부 서비스 간의 메시지는 암호화 없이 평문으로 전달되므로 반드시 보호되어야 합니다.
    • 지원하는 TLS는 TLSv1, TLSv1.1, TLSv1.2입니다.
    • 정식 인증 기관으로부터 발급받은 유효한 인증서만 사용할 수 있습니다.
  • Webhook을 사용하기 위해 ACL을 등록해야 한다면 다음의 IP 주소 목록을 추가합니다.
    • 211.249.40.0/27 (211.249.40.1 ~ 211.249.40.30)
    • 211.249.68.0/27 (211.249.68.1 ~ 211.249.68.30)
    • 220.230.168.0/27 (220.230.168.1 ~ 220.230.168.30)
  • 네이버 톡톡에서 Webhook 호출 시 설정값은 다음과 같습니다.
    • Connection timed out: 3초
    • Read timed out: 5초

[STEP 1] 네이버 톡톡으로부터 이벤트 받기

1. 네이버 톡톡으로부터 이벤트를 받기 위해 간단한 코드를 작성합니다.

예제 코드

[node.js 샘플]

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());
app.post('/', (req, res) => {
  console.log(req.body);
  res.sendStatus(200);
});

app.listen(8080);

[Spring Boot 샘플]

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class BotApplication {

  @PostMapping
  public void event(@RequestBody String body) {
    System.out.println(body);
  }

  public static void main(String[] args) throws Exception {
    SpringApplication.run(BotApplication.class, args);
  }
}

[php 샘플]

<?php
  $json_str = file_get_contents('php://input');
  $json_obj = json_decode($json_str);
  print_r($json_obj);
?>

2. localhost에서 접근 테스트를 합니다.

curl -X POST -H "Content-Type: application/json;charset=UTF-8" -d '{ "event": "test" }' "http://localhost:8080/"
  • localhost에서 테스트 후 정식 인증서를 사용하여 https://your.domain/ 에 접근할 수 있어야 합니다.

3. URL을 등록합니다.

  • 파트너센터 > 개발자도구 > 챗봇API 설정에서 Webhook 영역의 이벤트 받을 URL에 위에서 만든 URL을 등록합니다.

4. 연동이 완료되어 톡톡으로부터 이벤트를 수신합니다.


  • [채팅창에 진입했을 때 이벤트 로그]

    { 
      "event": "open",
      "user": "al-2eGuGr5WQOnco1_V-FQ",
      "options": {
          "inflow": "list",
          "referer": "https://talk.naver.com/",
          "friend": false,
          "under14": false,
          "under19": false
      }
    }
  • [채팅창에 hello world 메시지를 보냈을 때 이벤트 로그]

    {
      "event": "send",
      "user": "al-2eGuGr5WQOnco1_V-FQ",
      "textContent": {
          "text": "hello world",
          "inputType": "typing"
      }
    }

참고

만약 Webhook을 통해 이벤트가 수신되지 않으면 API 설정 > Webhook > Event 선택에서 수신하고자 하는 이벤트를 선택합니다.


[STEP 2] echo 서버(챗봇 예제) 만들기

다음과 같은 기능을 하는 echo 서버를 만듭니다.

  • 네이버 톡톡에서 보내는 각종 이벤트를 판별하고 적절한 메시지로 회신합니다.
  • 사용자 메시지에 echo 메시지로 회신합니다.

1. 다음과 같이 echo 서버 코드를 작성합니다.

[node.js 샘플]

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());
app.post('/', (req, res) => {

  // request logging
  console.log(req.body);

  // default response
  let response = {
    event: 'send', /* send message */
    textContent: {
        text: ''
    }
  };

  switch(req.body.event) {

    // 메시지 전송 이벤트 처리
    case 'send' :
      if(req.body.textContent) {
        // 사용자가 보내는 메시지에 대해 echo로 전송
        response.textContent.text = 'echo: ' + req.body.textContent.text;
        res.json(response);

      } else {
        // 그 외의 경우는 무반응
        res.sendStatus(200);
      }
      break;

    // 채팅창 오픈 이벤트 처리
    case 'open' :
      switch(req.body.options.inflow) {
        // 채팅리스트에서 인입되었을 때
        case 'list' :
          response.textContent.text = '목록에서 눌러서 방문하셨네요.';
          res.json(response);
          break;

        // 링크로부터 인입되었을 때
        case 'button' :
          response.textContent.text = '버튼을 눌러서 방문하셨네요.';
          res.json(response);
          break;

        // 유입 경로가 없을 때
        case 'none' :
          response.textContent.text = '방문을 환영합니다.';
          res.json(response);
          break;

        default:
          res.sendStatus(200);
      }
      break;

    // 친구 이벤트 처리
    case 'friend' :
      if(req.body.options.set == 'on') {
        // 친구 추가 시
        response.textContent.text = '친구가 되어 주셔서 감사합니다.';
        res.json(response);

      } else if(req.body.options.set == 'off') {
        // 친구 철회 시
        response.textContent.text = '다음 번에 꼭 친구 추가 부탁드려요.';
        res.json(response);
      }
      break;

    // 그 외의 이벤트에 대해 무반응
    default:
      res.sendStatus(200);
  }

});

app.listen(8080);

2. https://talk.naver.com/{파트너아이디} 에 접근하여 각종 이벤트를 확인하고 학습합니다.

  • request log를 보면서 어떤 이벤트가 발생되고, 각 이벤트에 어떻게 대응할지 고민해 봅니다.


보내기 API 작성 방법

보통 단순한 챗봇은 Webhook만으로도 구현할 수 있습니다. 그러나 사용자의 질문에만 대답하는 단순한 형태가 아니라 상태 변화나 사건 발생에 따라 사용자에게 메시지를 푸시해야 한다면 보내기 API를 사용하여 챗봇에서 톡톡으로 이벤트를 전송해야 합니다.

다음과 같이 API 호출 테스트를 합니다.

[Request]

curl -X POST \
    -H "Content-Type: application/json;charset=UTF-8" \
    -H "Authorization: ct_wc8b1i_Pb1AXDQ0RZWuCccpzdNL" \
    -d '{ "event": "send", "user": "al-2eGuGr5WQOnco1_V-FQ", "textContent": { "text": "hello world" } }' \
    "https://gw.talk.naver.com/chatbot/v1/event"
  • 인증 키(Authorization)는 API 설정 > 보내기 API에서 생성을 클릭해 받을 수 있습니다.
  • 만약 인증 키(Authorization)가 공개되었다면 재설정을 클릭해 인증 키를 변경할 수 있습니다.

[Response]

HTTP/1.1 200 OK

{
    "success": true,
    "resultCode": "00"
}


이벤트 명세

이벤트 기본 구조

이벤트의 기본 구조는 다음과 같습니다.

[Request 메시지 구조]

POST / HTTP/1.1
Host: your.bot.co.kr
Accept: application/json
Content-Type: application/json;charset=UTF-8

{
    "event": "", /* 이벤트명 */
    "options": {
        /* 추가 속성 */
    },
    "user": "al-2eGuGr5WQOnco1_V-FQ" /* 사용자 식별값 */
}
  • event에는 다양한 이벤트를 식별할 수 있는 이벤트명이 들어옵니다.
  • 특정 이벤트만으로 설명할 수 없는 추가적인 속성은 options를 이용해 얻을 수 있습니다.
  • 톡톡에서 1:1 대화란 파트너(partner)사용자(user)의 대화입니다.
    • 챗봇은 partner에 해당되며, 챗봇을 사용하는 네이버 사용자는 user에 해당합니다.
    • "user": "al-2eGuGr5WQOnco1_V-FQ"는 사용자 식별값이며 특정 네이버 아이디에 해당하는, 변하지 않는 절댓값입니다.


[Response 메시지 구조]

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

/* 응답과 동시에 이벤트를 전송할 때 사용 */
{
  "event": "send",
  "textContent": {
      "text": "hello world"
  }
}
  • 챗봇에서 이벤트 전달에 대한 응답은 HTTP Status 200이어야 성공으로 간주합니다. HTTP Status200 이외의 값이면 톡톡에서 실패로 간주하고 오류를 로깅합니다.
  • 만약 이벤트에 대해 자동 반응 메시지를 보내고 싶다면 HeaderContent-Type: application/json;charset=UTF-8을 포함하고 body에 전달하고자 하는 이벤트를 추가합니다. 이때 user 속성은 무시되고 이벤트를 보냈던 사용자에게 이벤트가 전달됩니다.

참고

사용자의 메시지에 챗봇이 회신하는 형태에는 동기식/비동기식 메시지 전송이 있습니다.

  • 동기식은 사용자의 메시지 이벤트에 응답 메시지를 함께 주는 방법입니다. 동기식은 단건 응답이거나 5초 이내에 결과 메시지를 전송할 수 있는 경우 사용할 수 있습니다.
  • 비동기식은 사용자의 메시지 이벤트에 바로 응답한 후(200 OK), 보내기 API를 이용해 톡톡에 직접 이벤트를 전송하는 방법입니다. 비동기식은 여러 건의 메시지로 응답을 전달해야 하거나 일정 시간 경과 후 메시지를 전송할 때 사용할 수 있습니다.

open 이벤트

사용자가 채팅창에 진입할 때 유입 정보와 함께 open 이벤트를 전송합니다.

  • 유입 정보는 inflow를 이용해 어떤 방식으로 유입되었는지 구분하고, referer를 이용해 유입 페이지 URL을 알 수 있습니다.
  • 별도로 from 파라미터를 사용하였다면 from을 이용해 값을 전달받을 수 있습니다.

[Request 전체]

{
    "event": "open",
    "options": {
        "inflow": "button",
        "referer": "http://storefarm.naver.com/pqbdo/products/309672359",
        "from": "309672359",
        "friend": false, /* false: 친구 아님,  true: 친구 */
        "under14": false, /* false: 만14세 이상,  true: 만14세 미만 */
        "under19": false, /* false: 만19세 이상,  true: 만19세 미만 */
	"unreadMessage": true /* 파트너나 챗봇이 보낸 메시지 중 읽지 않은 메시지 존재 여부, false: 읽지 않은 메시지 없음, true: 읽지 않은 메시지 있음 */
    },
    "user": "al-2eGuGr5WQOnco1_V-FQ" /* 사용자 식별값 */
}

[버튼이나 링크로 유입된 경우 options]

    "options": {
        "inflow": "button",
        "referer": "http://storefarm.naver.com/pqbdo/products/309672359",
        "from": "309672359"
    }

[톡톡 채팅리스트로 유입된 경우 options]

    "options": {
        "inflow": "list",
        "referer": "https://talk.naver.com/"
    }

[브라우저 주소창에 URL을 직접 입력해 유입된 경우 options]

    "options": {
        "inflow": "none"
    }

참고

사용자와 대화를 나눌 때 유입 경로는 많은 정보를 제공해 줄 수 있습니다.

  • 쇼핑몰이라면 http://shopping.com/product/1234로부터 유입된 경우 1234 상품 구매를 원하시나요?라고 사용자의 의도를 파악해 대응할 수 있습니다.
  • 경우에 따라 하나의 웹페이지에 여러 개의 상품과 함께 버튼을 노출하였다면 referer만으로는 상품을 구분할 수 없습니다. 그럴 땐 https://talk.naver.com/wc1234?from=1234https://talk.naver.com/wc1234?from=5678처럼 from 파라미터를 이용하여 상품 번호를 받아낼 수 있습니다.
  • 톡톡은 웹 서비스이므로 어떤 웹 페이지든 버튼이나 링크를 통해 챗봇과 대화를 시작할 수 있습니다. 여러 서비스에 배너 광고를 하는 경우 사용자가 주로 어떤 배너로 유입되는지, 그래서 어떤 배너에 집중할지 통계 데이터로도 활용할 수 있습니다.
  • "inflow": "list"의 경우 톡톡 채팅리스트를 통한 유입으로 단지 과거 대화 이력을 보기 위해 open했는지 알 수 없으므로 마지막 메시지 발생 시간 또는 문맥에 따라 적절히 대응해야 합니다.
  • under14open 이벤트에 반드시 포함되는 options의 하위 속성입니다. 개인정보수집을 위한 약관 동의 시 만 14세 미만의 경우 법정대리인의 동의를 받아야 합니다.(개인정보보호법 제22조) 챗봇이 개인정보를 수집한다면 법정대리인 동의 프로세스를 구현하거나 만 14세 미만은 사용하지 못하도록 안내하여야 합니다.

leave 이벤트

사용자가 채팅창 또는 채팅리스트에서 나가기를 누르면 발생하는 이벤트입니다.

  • leave 이벤트의 Responserequest를 넣어도 메시지가 전송되지 않고 항상 무시됩니다.
  • leave 이벤트는 일반 메신저 경험처럼 채팅창을 나간 것으로 채팅리스트에는 존재하지 않지만, 챗봇이 사용자에게 다시 메시지를 보내면 채팅방이 다시 생성되고 채팅리스트에도 표시됩니다.
  • leave 이벤트를 이용해 챗봇이 사용자에게 적극적으로 이후 메시지를 보낼 것인지 아니면 이쯤에서 더 이상 대화를 하지 않을 것인지 선택할 수 있습니다.
  • 사용자가 채팅창을 나갔다고 해서 챗봇과 대화하기를 원하지 않는다고 볼 수는 없습니다.
{
    "event": "leave",
    "user": "al-2eGuGr5WQOnco1_V-FQ"
}


friend 이벤트

사용자가 친구추가 또는 친구철회를 누르면 발생하는 이벤트입니다. optionsseton/off로 설정해 친구추가친구철회를 구분할 수 있습니다.

{
    "event": "friend",
    "options": {
        "set": "on" /* on: 친구추가,  off: 친구철회 */
    },
    "user": "al-2eGuGr5WQOnco1_V-FQ"
}

참고

friend 이벤트는 가급적 이벤트 수신을 끄거나 수신하더라도 응답하지 않는 것이 좋습니다. 톡톡에서 친구란 파트너센터마케팅관리 > 단체메시지를 이용해 메시지를 보낼 수 있는 대상자를 의미합니다. 챗봇이 친구추가에 대해 감사 메시지를 직접 보내는 것보다 마케팅관리 > 친추감사메시지를 설정하여 다양한 메시지를 보내는 것을 추천합니다.


send 이벤트

send 이벤트는 메시지를 보낼 때 발생하는 이벤트입니다. 앞서 살펴봤던 open, leave, friend 이벤트는 사용자만 발생시킬 수 있지만, send사용자파트너 모두 발생시킬 수 있습니다.
send 이벤트는 다음과 같은 메시지 타입을 제공합니다.

  • textContent: 텍스트 메시지
  • imageContent: 단수 이미지로 구성된 메시지
  • compositeContent: 텍스트와 이미지, 버튼을 포함하는 복합 메시지

send 이벤트 구조

{
    "event": "send",
    "user": "al-2eGuGr5WQOnco1_V-FQ", /* 사용자 식별값 */
    
    "textContent": {}, /* 텍스트를 보낼 때 사용 */
    "imageContent": {}, /* 단수 이미지를 보낼 때 사용 */
    "compositeContent": {}, /* 복합 메시지를 보낼 때 사용 */
    
    "options": {
        "notification": true /* push를 보낼 때 사용 */
    }
}

send 이벤트는 다음과 같은 경우에 사용될 수 있습니다.

  • 톡톡에서 챗봇으로 이벤트를 전송할 때
  • 톡톡에서 챗봇으로 전송한 이벤트의 응답으로 이벤트를 전송할 때
  • 챗봇에서 특정 사건에 의해 이벤트를 톡톡으로 전송할 때

send 이벤트는 textContent, imageContent, compositeContent 중 하나만 선택하여 전송해야 합니다.
optionsnotification은 push를 보내야 하는지 여부를 나타냅니다.

  • notificationsend 이벤트를 전송하는 경우 중 세 번째 경우에만 사용할 수 있습니다.
  • notificationdefault값이 false입니다. push를 보내지 않는 경우는 options 영역을 채울 필요가 없습니다.
  • notificationtrue로 전송하더라도 사용자가 채팅창에 들어와 있으면 메시지를 실시간으로 받을 수 있기 때문에 push를 보낼 수 없습니다.
  • push를 보내면 메시지와 함께 네이버me알림에 알림이 전송되고, 모바일 기기에 설치된 네이버 앱에 push가 전달됩니다.

위의 내용만으로는 notification을 항상 true로 보내는 것이 좋을 것 같습니다. 그러나 다음과 같은 상황에서 notification은 부작용을 일으킬 수 있습니다.

  • 사용자가 톡톡 채팅창에서 챗봇과 채팅 중 챗봇이 제공하는 외부 링크로 페이지를 전환했다면 톡톡 페이지를 이미 벗어났기 때문에 push를 받게 됩니다. 그러나 사용자는 아직 챗봇과 대화 중에 있는 것으로 알고 있습니다. 예를 들어 별도 페이지에서 주소를 입력하고 있다가 push를 받을 수 있습니다.
  • 사용자가 채팅창에 있는지는 Web Socket으로 서버와 연결되어 있는지 여부에 따라 판단합니다. 그러나 빠른 페이지 렌더링을 위해 Web SocketLazy-Connection을 이용하므로 open 이벤트와 동시에 notificationtrue로 전송하면 사용자가 채팅창에서 push를 받을 수 있습니다.

위와 같은 이유로 default(false) 사용을 추천합니다. 사용자의 요청에 챗봇은 실시간으로 응답하므로 사용자가 채팅창을 떠난 상태에서 답변이 전송되는 경우는 드뭅니다. 그러나 위의 두 가지 경우에 해당하지 않으면서 배송출발 또는 예약완료처럼 특정 사건에 따라 챗봇이 이벤트를 보내야 한다면 notification을 사용하는 것을 권장합니다.

echo 이벤트

echo 이벤트는 파트너센터에서 상담사가 사용자에게 보낸 메시지와 챗봇이 사용자에게 보낸 메시지를 수신하는 이벤트입니다. 이벤트명은 echo이며 사용자에게 보내고자 했던 원본 이벤트는 echoedEvent 속성에 담기게 됩니다.
echo 이벤트를 수신하려면 개발자도구> API 설정 > Event선택을 클릭하고 echo를 활성화합니다.

echo 이벤트 구조

{
  "event": "echo",
  "echoedEvent": "send",
  "user": "5KcCQTARWKNKv1IOvXwYQw",
  "partner": "wc8b1i",
  "textContent": {
    "text": "명함을 보냈습니다.",
    "inputType": "nameCard"
  },
  "options": {
    "mobile": false
  }
}

주의

echo 이벤트는 챗봇이 보낸 메시지까지 다시 수신하므로 해당 이벤트가 발생했을 때 메시지를 챗봇 플랫폼으로 재전송하면 끊임 없이 메시지가 송수신됩니다. 따라서 해당 이벤트를 정확히 테스트한 후 실제 서비스에 반영해야 합니다.


action 이벤트

action 이벤트는 대화창에서 추가적인 행위가 필요할 때 사용할 수 있는 이벤트입니다. action 이벤트는 Webhook의 응답 메시지 또는 보내기 API를 이용해 전송할 수 있습니다.
action 이벤트의 action 정보는 다음과 같습니다.

  • typingOn: 작성중 이미지( image )가 파트너 메시지로 보입니다. 추가 액션이 없다면 10초 동안 유지됩니다. 연속해서 보내면 새로 보낸 시점부터 유지 시간이 갱신됩니다.
  • typingOff: 작성중 이미지가 대화창에서 사라집니다. 다른 메시지를 send 이벤트로 보내도 동일한 효과가 있습니다.
{
    "event": "action",
    "user": "al-2eGuGr5WQOnco1_V-FQ",
    "options": {
        "action": "typingOn" | "typingOff"
    }
}

참고

typingOn,typingOff 액션은 대화창에서 메시지 수신이 늦어지는 경우 메시지가 처리 중이라는 것을 사용자에게 알릴 때 사용할 수 있습니다. 혹은 너무 빠른 메시지 응답보다 천천히 대화하는 경험을 주고 싶을 때에도 사용할 수 있습니다. 일반적으로 typingOff 액션을 사용하기 보다는 typingOn 전송 후 메시지 send 이벤트를 전송합니다.


persistentMenu 이벤트

persistentMenu(이하 고정 메뉴)는 사용자가 대화 중에 상시로 접근할 수 있는 메뉴입니다. 사용자에게 챗봇을 소개하거나 공지, 이벤트를 안내하는 데 사용할 수 있습니다.

persistent_menu

이 메뉴에는 사용자가 언제든지 실행할 수 있는 기능만 포함해야 합니다. 예를 들어, URL을 연결하거나 클라이언트에서 코드를 전송받아 처리할 수 있습니다. 설정 이벤트이므로 사용자 식별값은 필요하지 않습니다.

persistentMenu 이벤트 구조

{
	"event":"persistentMenu",
	"menuContent" : [{
		"menus":
		[{
			"type":"TEXT", 
			"data":{
				"title":"챗봇 안내",
				"code":"CHATBOT_GUIDE"
			}
		},{
			"type":"LINK",
			"data":{
				"title":"이벤트 페이지",
				"url":"http://your-pc-url.com/event",
				"mobileUrl":"http://your-mobile-url.com/event"
			}
		},{
			"type":"LINK",
			"data":{
				"title":"전화하기",
				"url":"tel:021234567"  
			}
		},{
			"type":"NESTED",
			"data":{
				"title":"공지사항",
				"menus":
				[{
					"type":"LINK",    
					"data":{
						"title":"교환/환불 안내",
						"url":"http://your-pc-url.com/guide",
						"mobileUrl":"http://your-mobile-url.com/guide"
					}
				}]
			}
		}]
	}]
}

menuContent List

menuContent는 리스트 형태로 받습니다. menuContent를 초기화하려면 빈 리스트([])를 보냅니다.

주의

  • 개발 확장성을 위해 List로 두었습니다. 현재는 첫 번째 menuContent만 허용합니다.
  • 비어 있는 List를 전송하면 고정 메뉴가 삭제됩니다.
{
  "event":"persistentMenu",
  "menuContent" : []
}

menuContent Object

menuContentpersistentMenu 이벤트에 넣을 수 있는 여러 가지 오브젝트를 담는 리스트입니다. 넣을 수 있는 오브젝트 항목은 다음과 같습니다.

타입 필수 설명
menus Menu[] Y 메뉴 목록.
- 최대 4개까지 추가할 수 있습니다.
- menusnull일 수 없습니다.

Menu Object

Menu 오브젝트의 가장 기본적인 형태입니다. type에 구체적인 종류를 선언하고, data에는 각 종류에 맞는 데이터를 넣습니다.

{
    "type": "메뉴 타입",
    "data": {
        /* MenuData */
    }
}
타입 필수 설명
type string Y 메뉴 요소의 타입. TEXT, LINK, NESTED
data MenuData Y 메뉴 요소의 데이터

MenuData Object(TEXT 타입)

텍스트 타입 버튼과 유사합니다. code 항목에 식별하고자 하는 값을 담아서 챗봇 클라이언트에서 받을 수 있습니다.

{
    "type": "TEXT",
    "data": {
        "title": "타이틀",
        "code": "CODE"
    }
}
타입 필수 설명
title string Y 메뉴에 노출되는 텍스트. 사용자가 메뉴를 클릭하면 채팅창에 나타나는 텍스트.
최대 길이는 20자입니다.
code string Y 사용자가 메뉴를 클릭하면 클라이언트에게 전송되는 코드.
최대 길이는 1,000자입니다.

MenuData Object(LINK 타입)

링크 타입 버튼과 유사합니다. 사용자의 환경(PC, 모바일)에 따라서 URL 주소를 새 창으로 표시합니다.

{
    "type": "LINK",
    "data": {
        "title": "타이틀",
        "url": "http://your-pc-url.com",
        "mobileUrl": "http://your-mobile-url.com"
    }
}
타입 필수 설명
title string Y 메뉴에 노출되는 텍스트. 최대 길이는 20자입니다.
url string Y PC 채팅창에서 메뉴를 클릭하면 이동할 페이지 URL.
urltel:{전화번호}값을 넣으면 모바일에서는 전화 연결이 가능합니다.
mobileUrl string N 모바일 채팅창에서 메뉴를 클릭하면 이동할 페이지 URL.
모바일 URL이 따로 있을 경우, mobileUrl을 설정하면 모바일에서는 해당 URL로 연결됩니다.

참고

  • 모바일에서는 현재 창에서 링크를 열고 PC에서는 새 창으로 링크를 엽니다.
  • 모바일에서는 현재 창으로 이동한 페이지에서 다시 채팅창으로 돌아올 때 반드시 뒤로가기 또는 history.back()을 이용해야 합니다.
  • LINK 타입 버튼 사용 시 주의 사항을 참고해 주세요.

MenuData Object(NESTED 타입)

NESTED 타입은 중첩된 내부 메뉴를 만듭니다. 내부 메뉴는 최상위 메뉴를 포함하여 최대 3단계까지 만들 수 있습니다.

{
    "type": "NESTED",
    "data": {
        "title": "타이틀",
        "menus": [ /* Menu[] */ ]
    }
}
타입 필수 설명
title string Y 메뉴에 노출되는 텍스트. 최대 길이는 20자입니다.
menus Menu[] Y 하위 메뉴 목록.

메시지 타입 명세


textContent

챗봇이 사용자에게 텍스트 메시지만 보내고자 할 때는 text 항목에만 데이터를 넣어서 전달하면 됩니다. 챗봇에 메시지를 전달할 때도 같은 형식을 사용하는데, 이때는 code 항목에 챗봇이 넣었던 값이 전달됩니다. inputType 항목은 챗봇과 대화 중에 사용자가 톡톡의 부가 기능을 클릭했을 때, 해당 텍스트 속성이 어느 매개체(혹은 부가 기능)로 생성된 것인지에 관한 정보를 담습니다.

{
    "event": "send",
    "user": "al-2eGuGr5WQOnco1_V-FQ", /* 사용자 식별값 */
    
    "textContent": {
        "text": "안녕하세요? 도미노 피자 주문 챗봇입니다. 6가지 인기 메뉴를 빠르게 주문해 보세요!", /* 채팅창에 노출할 텍스트 */
        "code": "", /* compositeContent에서 버튼 클릭 시 전달받는 코드값, code는 채팅에 노출되지 않습니다. */
        "inputType": "typing|button|sticker|vphone" /* 수신 시에만 받는 속성으로, 사용자가 어떤 매개체로 봇에게 입력하는지를 나타내는 값입니다. */
    }
}
  • text에 전송하고자 하는 텍스트를 기입합니다.

  • 줄 바꿈이 필요할 때 \n을 삽입합니다.

  • 텍스트에 010-1234-1234 또는 01012341234처럼 전화번호가 들어가면 채팅창에 노출될 때 자동으로 telto:가 삽입되어 모바일 기기에서는 바로 전화걸기를 할 수 있습니다.

  • 텍스트에 https://talk.naver.com/처럼 URL이 삽입된 경우 자동으로 Anchor Tag(<a>)로 변환하여 노출합니다.

  • 텍스트의 최대 길이는 영문/한글 구분 없이 1만자 이내로 전송해야 합니다.

  • codecompositeContent에 내장된 버튼 클릭 시 어떤 버튼을 눌렀는지 확인하는 용도로 활용할 수 있습니다.

  • compositeContent 전송 시 두 개의 버튼에 각각 AB 코드를 넣었다면, 사용자가 버튼 클릭 시 code값을 확인하여 어떤 버튼을 눌렀는지 확인할 수 있습니다.

  • inputType 속성값의 정보는 다음과 같습니다.

    • typing: 사용자가 직접 입력창에 적고 보내기 버튼을 눌러 보낸 경우입니다.
    • button: 봇에서 보낸 여러 형태의 버튼을 직접 눌러서 응답한 경우입니다. code값이 같이 포함됩니다.
    • sticker: 스티커를 눌러서 전송한 경우입니다. 사용자가 스티커를 눌렀을 때 응답할 수 있습니다.
    • vphone: 스티커 버튼의 오른쪽에 위치한 안심전화번호로 상담요청하기 버튼을 누른 경우입니다. 안심전화번호와 해당 전화번호의 유효기간(yyyy-MM-dd 형태)이 제공됩니다.
      • 예: {"text":"050719003814,2017-11-03", "inputType":"vphone"}
    • product: 스마트스토어/쇼핑윈도의 상품 페이지에서 톡톡문의로 채팅을 시작하거나, 톡톡 모바일 페이지 위젯 중 다른상품문의를 실행한 경우입니다. options 속성에 product 정보를 포함하고 있습니다. 톡톡문의로 유입시에는 typing 등, 사용자의 추가 액션이 있어야 이 textContent가 함께 전송됩니다.

    [inputType: product인 경우의 이벤트 예시]

     {
       "event": "send",
       "user": "al-2eGuGr5WQOnco1_V-FQ",
       "textContent": {
         "text": "이 상품을 문의합니다.",
         "inputType": "product"
       },
       "options": {
         "product": {
           "name": "[중고]200개의 단계별 예제로 배우는 안드로이드 4.0",
           "url": "http://smartstore.naver.com/inflow/outlink/product?p=309672359&tr=tsf&site_preference=device",
           "mobileUrl": "http://m.smartstore.naver.com/inflow/outlink/product?p=309672359&tr=tsf&site_preference=device",
           "thumbUrl": "https://shop-phinf.pstatic.net/20150716_65/pqbdo_1437051783074LGw89_JPEG/43672814967807467_-164086553.jpg?type=f344",
           "currencyPrice": "19,900원",
           "currencyMobilePrice": "19,900원"
         },
         "mobile": false
       }
     }

imageContent

imageContent는 이미지로만 구성된 말풍선입니다. 이미지의 크기는 고정되어 있으므로, 테스트를 거쳐 최적화된 이미지를 보내는 것이 사용자 경험에 좋습니다.

{
    "event": "send",
    "user": "al-2eGuGr5WQOnco1_V-FQ", /* 사용자 식별값 */
    
    "imageContent": {
        "imageUrl": "http://blogfiles5.naver.net/20130918_119/city0080_137946683395507ioT_JPEG/6.jpg" /* 전송하고자 하는 이미지 URL */
    }
}
  • imageUrl은 외부에서도 접근 가능한 URL이어야 합니다. 만약 내부에서만 접근 가능한 URL이면 전송에 실패하게 됩니다.
  • 주어진 URL로 톡톡 서버가 접근해서 이미지를 다운로드할 때 HTTP 응답 헤더의 Content-Type 값은 반드시 해당 이미지 타입과 일치해야 합니다.
  • imageContent를 톡톡에 전송하면 (1) 톡톡 서버는 해당 URL로 1회 접근하여 이미지를 다운로드합니다. (2) 다운로드한 이미지는 톡톡에 보관되고 톡톡용 이미지 URL로 사용자에게 노출됩니다.
  • imageContent를 톡톡에 전송하고 성공 응답을 받았다면 더 이상 이미지 URL은 유지되지 않아도 됩니다.
  • imageContent에 사용하는 이미지의 제약 사항은 아래와 같습니다.
    • 이미지는 최대 20MB 용량까지 사용할 수 있습니다.
    • 사용 가능한 이미지 포맷은 JPG, JPEG, PNG, GIF입니다.
    • 바탕투명 또는 움직이는이미지 모두 채팅창에서 표현할 수 있습니다.
  • imageContent를 톡톡으로 전송할 때 문제가 발생했다면 이미지 처리에 관한 "imageContent 오류 코드표"를 참고하십시오.
  • imageContent 전송 중 오류가 발생했다면 "imageContent 오류 코드표"를 참고하십시오.

성능 향상의 위한 팁

imageUrl에 명시된 이미지 URL은 메시지가 전송될 때마다 톡톡에서 이미지를 다운로드해 사용합니다. Image Upload API를 사용해 자주 사용되는 이미지를 미리 업로드하면 메시지 전송 속도를 높일 수 있습니다.


compositeContent

compositeContent는 여러 형태의 구성 요소를 복합적으로 사용할 수 있는 메시지입니다.

composite_message

하나의 composite은 아래의 구성 요소를 포함할 수 있습니다.

  • image: 한 개의 이미지를 노출하는 이미지 요소
  • elementList: 타이틀+설명1+설명2+버튼+섬네일로 구성할 수 있는 리스트 요소
  • title: 조금 굵게 표현되는 타이틀 요소
  • description: title보다 흐리게 표현되는 설명 요소
  • buttonList: 다양한 기능을 가진 버튼 요소 리스트

compositeContentcomposite을 두 개 이상 넣어서 캐로셀(Carousel)을 구성할 수 있습니다.
구성 요소의 노출 순서는 변경할 수 없습니다.

[모든 구성 요소를 포함한 사용 예]

{
    "event": "send",
    "user": "al-2eGuGr5WQOnco1_V-FQ", /* 사용자 식별값 */
    
    "compositeContent": {
        "compositeList":[
            {
                "title": "타이틀",
                "description": "설명",
                "image": {
                    "imageUrl": "http://shop1.phinf.naver.net/20170216_20/talktalk_14872437839327BN4b_PNG/menu_01.png"
                },
                "elementList": { 
                    "type": "LIST",
                    "data": [
                        {
                            "title" : "리스트 요소 타이틀",
                            "description" : "리스트 요소 설명1",
                            "subDescription" : "리스트 요소 설명2",
                            "image" : {
                                "imageUrl": "http://shop1.phinf.naver.net/20170216_20/talktalk_14872437839327BN4b_PNG/menu_01.png"
                            },
                            "button" : {
                                "type": "TEXT", /* 리스트 요소의 버튼은 TEXT와 LINK 타입만 허용된다 */
                                "data" : {
                                    "title": "요소버튼", /* 리스트 요소의 버튼명(최대 4자) */
                                    "code" : "code"
                                }
                            }
                        }
                    ]
                },
                "buttonList": [
                    {
                        "type": "TEXT", /* 텍스트형 버튼 - 사용자가 클릭하면 해당 버튼의 텍스트가 전송된다*/
                        "data" : {
                            "title": "텍스트형 버튼", /* 버튼에 노출하는 버튼명(최대 18자)*/
                            "code" : "code" /* code를 정의하는 경우 사용자가 보내는 send 이벤트 textContent에 code가 삽입되어 전송된다(최대 1,000자)*/
                        }
                    },
                    {
                        "type": "LINK", /* 링크형 버튼 - 사용자가 클릭하면 해당 페이지를 연다 */
                        "data": {
                            "title": "링크형 버튼", /* 버튼에 노출하는 버튼명(최대 18자)*/
                            "url": "https://dominos-bot.talk.naver.com/view/menu/1", /* 톡톡 PC 버전 채팅창에서 링크 URL */
                            "mobileUrl": "https://dominos-bot.talk.naver.com/view/menu/1#nafullscreen" /* 톡톡 모바일 버전 채팅창에서 링크 URL */
                        }
                    },
                    {
                        "type": "OPTION", /* 옵션형 버튼 - 2depth로 이루어진 버튼. 사용자가 클릭하면 채팅창 아래에 버튼 목록이 노출된다. */
                        "data": {
                            "title" : "옵션형 버튼",
                            "buttonList" :[
                                {
                                    "type": "TEXT", /* 옵션형 버튼은 TEXT, LINK, PAY 타입만 허용된다 */
                                    "data" : {
                                        "title": "옵션-텍스트버튼", /* 옵션형 버튼에 노출하는 버튼명(최대 10자) */
                                        "code" : "code"
                                    }
                                },
                                {
                                    "type": "LINK",
                                    "data" : {
                                        "title": "옵션-링크버튼",
                                        "url": "https://dominos-bot.talk.naver.com/view/menu/1",
                                        "mobileUrl": "https://dominos-bot.talk.naver.com/view/menu/1#nafullscreen"
                                    }
                                }
                            ]
                        }
                    },
                    {
                        "type": "PAY", /* 네이버페이 결제 버튼 */
                        "data": {
                            "payKey": "wc8bls20170718002252151YjE1NzQwMD" /* 페이 결제 키 */
                        }
                    }
                ]
            }
        ]
    }
}

CompositeContent Object

CompositeContent는 말풍선을 구성하는 여러 요소를 묶어서 표현합니다. 현재는 Composite 하나만 지원하며, 리스트 형태로 받게 되어 있습니다.

타입 필수 설명
compositeList Composite[] Y 리스트 요소의 Composite.
- 최대 10개의 Composite를 추가할 수 있습니다.
- Compositenull일 수 없습니다.

Composite Object

Composite는 여러 항목을 조합해서 만들 수 있는 말풍선입니다. 다음 사항에 유의해 주세요.

  • 하나의 compositetitle, description, elementList 중 적어도 한 개의 속성은 존재해야 합니다.
  • 하나의 compositetitle, description, elementList, image, buttonList 중 적어도 두 개의 속성이 존재해야 합니다.
타입 필수 설명
title string N 타이틀 요소값.
- 최대 길이는 200자입니다.
- 줄 바꿈이 필요하면 \n을 삽입합니다.
description string N 설명 요소값.
- 최대 길이는 1000자입니다.
- 줄 바꿈이 필요하면 \n을 삽입합니다.
image Image N 이미지 요소
elementList ElementList N 요소 리스트
buttonList Button[] N 버튼 요소 리스트.
- 버튼을 최대 10개까지 넣을 수 있습니다.
- 버튼null일 수 없습니다.

Image Object

imageContent의 사용 방법과 성능 향상을 위한 팁을 참고하십시오.

타입 필수 설명
imageUrl String Y 이미지 URL

참고

  • 권장 이미지 크기는 가로 530px, 세로 290px입니다.(비율 1.82:1)
  • 지원되는 이미지 형식은 JPG, JPEG, PNG, GIF입니다.

ElementList Object

Composite의 여러 요소 중 하나이며, Composite마다 작은 영역을 차지하고 있습니다. 리스트 형태로 여러 개의 요소를 받을 수 있습니다.

타입 필수 설명
type string Y 리스트 요소의 타입. 현재는 LIST 타입만 존재합니다.
data ElementData[] Y 리스트 요소의 데이터.
- ElementData를 최대 3개까지 넣을 수 있습니다.
- ElementDatanull일 수 없습니다.

ElementData Object(LIST 타입)

ElementData는 Composite에서 이미지와 타이틀 사이에 위치하는 작은 영역입니다. 이 영역은 복잡한 내용보다는 Composite를 뒷받침하는 간략한 내용으로 구성하는 것을 권장합니다.

타입 필수 설명
title string Y 타이틀.
- 최대 100자까지 입력할 수 있습니다.
- 모바일(해상도 375, iPhone 6s) 기준으로 최대 10자까지 노출되고 그 이상은 줄임표(...)로 표시됩니다.
- title은 1줄로 노출됩니다.
description string N 설명1.
- 최대 100자까지 입력할 수 있습니다.
- 모바일(해상도 375, iPhone 6s) 기준으로 최대 25자까지 노출되고 그 이상은 줄임표(...)로 표시됩니다.
- 줄 바꿈이 필요하면 \n을 삽입합니다.
- description은 최대 2줄로 노출됩니다.
subDescription string N 설명2.
- 최대 100자까지 입력할 수 있습니다.
- 모바일(해상도 375, iPhone 6s) 기준으로 최대 13자까지 노출되고 그 이상은 줄임표(...)로 표시됩니다.
- subDescription은 1줄로 노출됩니다.
image Image N 이미지. 입력하지 않으면 기본 이미지가 노출됩니다.
button Button N 버튼. TEXTLINK 타입만 허용되며 title 길이는 10자로 제한됩니다.

Button Object

사용자에게 버튼을 표현하기 위한 기본 구조는 아래와 같습니다. 버튼 타입별로 넣을 수 있는 데이터가 다르므로 유의하여 구성해야 합니다.

{
    "type": "버튼 타입",
    "data": {
        /* 데이터 */
    }
}
타입 필수 설명
type string Y 버튼 요소의 타입. TEXT, LINK, OPTION, PAY
data ButtonData Y 버튼 요소의 데이터

ButtonData Object(TEXT 타입)

버튼 구성 시 챗봇에서 만든 텍스트와 코드입니다. 텍스트는 사용자가 볼 수 있는 값이고, 코드는 HTML 속성으로만 표현되는 값입니다. 텍스트와 코드가 함께 전달되므로 코드값을 해석해 원하는 시나리오를 진행하는 것을 추천합니다.

{
    "type": "TEXT",
    "data": {
        "title": "타이틀",
        "code": "코드"
    }
}
타입 필수 설명
title string Y 버튼에 노출되는 텍스트.
- 사용자가 버튼을 클릭하면 전송되는 텍스트입니다.
- 최대 길이는 18자입니다.
code string N 사용자가 버튼을 클릭하면 전송되는 코드. 최대 길이는 1,000자입니다.

ButtonData Object(LINK 타입)

링크 타입의 버튼을 누르면 사용자의 환경에 따라 모바일 URL 혹은 URL의 페이지가 새로 표시됩니다. 제공할 페이지에서 모바일 버전과 PC 버전 모두 사용자의 환경에 맞게 제공하는 것을 추천합니다.

{
    "type": "LINK",
    "data": {
        "title": "버튼에 노출되는 텍스트",
        "url": "http://your-pc-url.com",
        "mobileUrl": "http://your-mobile-url.com"
    }
}
타입 필수 설명
title string Y 버튼에 노출되는 텍스트. 최대 길이는 18자입니다.
url string Y PC 버전 채팅창에서 버튼을 클릭하면 이동할 페이지 URL
mobileUrl string Y 모바일 버전 채팅창에서 버튼을 클릭하면 이동할 페이지 URL

참고

  • 모바일에서는 현재 창에서 링크를 열고 PC에서는 새 창으로 링크를 엽니다.
  • 모바일에서는 현재 창으로 이동한 페이지에서 다시 채팅창으로 돌아올 때 반드시 뒤로가기 또는 history.back()을 이용해야 합니다.

ButtonData Object(OPTION 타입)

OPTION 타입의 버튼을 클릭하면 정의한 퀵 버튼이 제일 아래에 표시됩니다. 사용자가 버튼 영역 외의 영역을 클릭하면 사라집니다.

{
    "type": "OPTION",
    "data": {
        "title": "버튼에 노출되는 텍스트",
        "buttonList": [
            {
                "type": "타이틀",
                "data": {
                    /* 버튼 데이터*/
                }
            }
        ]
    }
}
타입 필수 설명
title string Y 버튼에 노출되는 텍스트. 최대 길이는 18자입니다.
buttonList Button[] Y 버튼 클릭 시 채팅창 아래에 노출되는 버튼의 목록.
- 버튼을 최대 10개까지 넣을 수 있습니다.
- 버튼null일 수 없습니다.
- 버튼에는 TEXT, LINK, PAY 타입만 허용됩니다.
- title은 10자로 제한됩니다.

Composite 메시지 사용 시 참고 사항

  • buttonList에 추가되는 button의 타입에는 TEXT, LINK, OPTION, PAY가 있습니다.
  • TEXT 타입을 사용할 때 사용자가 채팅창에 적는 메시지와 버튼에 노출된 text 속성의 값은 동일한 형식으로 전달됩니다.
    • 보통 text를 분석하면 사용자가 어떤 버튼을 눌렀는지 파악하고 다음 프로세스를 진행할 수 있습니다. 그러나 text를 분석하기 어렵거나 챗봇이 Stateless라서 상태를 관리할 수 없다면 code를 활용할 수 있습니다. 예를 들어, 사용자에게 성별나이대를 차례로 물어본다고 했을 때, 사용자가 남자(code=1)를 선택한 경우 여기에 나이대(10대, 20대, 30대...)를 붙여 1-10, 1-20, 1-30...으로 코드를 만들 수 있습니다. 그런 다음 사용자가 30대를 선택하면 챗봇에는 1-30이라는 코드값이 전달되어 사용자가 남자이면서 30대라는 사실을 알 수 있습니다.
    • 봇이 Stateful이라면 text를 직접 분석하는 것을 추천합니다. 왜냐면 사용자가 compositeContent에서 버튼을 누르거나 직접 입력한 텍스트까지 모두 파악할 수 있기 때문입니다.
  • LINK 타입을 사용하면 톡톡 외부 웹페이지를 활용할 수 있습니다.
    • 톡톡 채팅창은 PC 버전모바일 버전을 모두 제공하고 있습니다. 심지어 사용자모바일 버전에서 챗봇과 대화를 하다가 PC버전에서 대화를 이어갈 수도 있습니다. 그래서 LINK 타입은 PC/모바일 URL을 별도로 설정해야 합니다.


LINK 타입 버튼 사용 시 주의 사항

모바일 채팅창에서 LINK 타입 버튼을 클릭하면 현재 창에서 링크를 엽니다. 톡톡 채팅창에서 외부 웹페이지로 이동하게 되는 것입니다. 이렇게 외부 웹페이지로 이동했다가 톡톡 채팅창으로 돌아올 때는 페이지 이동을 사용하지 말고 반드시 history.back()을 사용해야 합니다.
외부 웹페이지에서 톡톡 채팅창으로 페이지 이동을 할 때 톡톡 채팅창에서 history.back()을 누르면 채팅 리스트로 가는 것이 아니라 외부 웹페이지로 다시 돌아가게 됩니다. 보통 톡톡 채팅창의 버튼을 눌러 이전 페이지로 간다면 문제가 없지만, 안드로이드의 물리적 버튼을 눌러 history.back()하는 경우 채팅 리스트로 안내할 수 없습니다.
외부 웹페이지에서 history.back()으로 톡톡 채팅창에 돌아오려면 외부 웹페이지는 여러 페이지로 이동할 수 없게 만들거나 SPA(Single-Page Application) 방식으로 만들어져야 합니다. 그렇지 않으면 여러 페이지로 만들되 외부 웹페이지도 철저히 history.back()으로만 이전 페이지로 돌아올 수 있도록 유도해야 합니다.

토큰을 이용한 외부 웹페이지 제작

사용자로부터 대화식으로 받기 어려운 복잡한 폼 데이터는 별도의 외부 웹페이지를 통해 받아낼 수 있습니다. 이 경우 외부 웹페이지에서 파트너사용자를 어떻게 식별할지 고민이 생깁니다. 파트너사용자 식별값을 모두 Get 파라미터로 넘길 수 있지만 사용자 식별값은 임의로 맞출 수 있을 정도로 단순하므로 반드시 비공개를 유지해야 합니다. 그래서 토큰(token)을 사용해 사용자 식별값이 외부에 노출되지 않게 해야 합니다. compositeContent를 톡톡으로 전송할 때 삽입하는 외부 웹페이지 URL에 토큰을 파라미터로 넣어서 전달합니다.

  • compositeContent를 톡톡에 전송할 때 이미 알고 있는 사용자 식별값에 대응되는 랜덤 문자를 key로, 사용자 식별값은 value로 저장하고, key를 토큰값으로 사용해 URL에 파라미터로 추가합니다.
  • 외부 웹페이지가 호출될 때 Server-Side에서 토큰을 key로 이용해 사용자 식별값을 얻을 수 있습니다.

위와 같이 토큰 방식이 구현되면 비록 동일한 사용자라도 compositeContent에 넣는 토큰은 매번 변경될 것이고, 임의로 예측할 수 없을 만큼 긴 토큰을 사용한다면 더욱 안전하게 사용자 식별값을 보호할 수 있습니다.

퀵 버튼

퀵 버튼은 채팅 화면의 맨아래에 위치하는 버튼입니다. 따라서 퀵 버튼 아래에 다른 콘텐츠를 보내면 사라지게 됩니다. 또한 클릭 이후에는 사라지므로 한 번만 클릭할 수 있습니다.

btn_quick

  • compositeContentOPTION 타입 버튼과 유사한 기능이 textContentimageContent에도 제공되고 있습니다.
  • 메시지를 전송하면 채팅창 아래에 버튼이 나열됩니다.
  • TEXT, LINK, PAY 타입 버튼을 사용할 수 있습니다.
  • 버튼 title의 글자 수는 10자로 제한됩니다.

textContent에 퀵 버튼 적용

{
    "event": "send",
    "user": "al-2eGuGr5WQOnco1_V-FQ", /* 사용자 식별값 */
    
    "textContent": {
        "text": "텍스트",
        "code": "코드",
        "quickReply": { /* 퀵 버튼 - 빠른 응답 */
            "buttonList": [ /* 버튼 리스트 */
                {
                    "type": "TEXT", /* TEXT, LINK, PAY 타입의 버튼이 허용된다. */
                    "data": {
                        /* 버튼 데이터 */
                    }
                }
            ]
        }
    }
}

imageContent에 퀵 버튼 적용

{
    "event": "send",
    "user": "al-2eGuGr5WQOnco1_V-FQ", /* 사용자 식별값 */
    
    "imageContent": {
        "imageUrl": "http://blogfiles5.naver.net/20130918_119/city0080_137946683395507ioT_JPEG/6.jpg", /* 전송하고자 하는 이미지 URL */
        "quickReply": { /* 퀵 버튼 - 빠른 응답 */
            "buttonList": [ /* 버튼 리스트 */
                {
                    "type": "TEXT",
                    "data": {
                        /* 버튼 데이터 */
                    }
                }
            ]
        }
    }
}

compositeContent에 퀵 버튼 적용

{
    "event": "send",
    "user": "al-2eGuGr5WQOnco1_V-FQ", /* 사용자 식별값 */
    
    "compositeContent": {
        "compositeList": [
            /* composite 데이터 */
        ],
        "quickReply": {
            "buttonList": [
                {
                    "type": "TEXT",
                    "data": {
                        /* 버튼 데이터 */
                    }
                }
            ]
        }
    }
}

오류 명세

오류 예제

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "success": false,
  "resultCode": "02",
  "resultMessage": "request json 문자열 파싱 오류"
}

오류 구조

이름 타입 필수 설명
success 성공 여부 boolean Y API 호출 성공 여부. 실패 시 resultCode에 따라 대응합니다.
resultCode 결과 코드 string Y "00" 코드는 성공이며, 그 외 실패 시 원인이 되는 코드값을 반환합니다.
resultMessage 코드 설명 string N resultCode를 구체적으로 설명합니다.

공통 오류 코드표

success resultCode resultMessage 설명
true 00 success 성공
false 01 Authorization 정보 오류 Authorization 정보가 잘못되었거나 이미 만료된 정보를 사용한 경우
false 02 request json 문자열 파싱 오류 JSON 구조에 문제가 있거나 필숫값이 없을 경우
false 99 {실패에 대한 구체적 내역} 01, 02 외에 처리 중 발생할 수 있는 다양한 오류에 관한 상세 설명

imageContent 오류 코드표

success resultCode resultMessage 설명
false IMG-01 이미지 업로드 - 포맷 불일치 또는 처리 실패 업로드하는 이미지 포맷이 JPG, JPEG, PNG, GIF가 아니거나 그 외의 경우
false IMG-02 이미지 업로드 - 전송/처리 시간 초과 업로드하는 이미지의 다운로드 시간이 10초를 초과하는 경우
false IMG-03 이미지 업로드 - 크기 초과 업로드하는 이미지가 20MB를 넘는 경우


chatbot-api's People

Contributors

navertalk avatar windy6883 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chatbot-api's Issues

개선사항 건의

  1. compositeContent의 이미지 사이즈 설정
    imageContent의 경우 별도의 이미지 사이즈 설정 없이 원본의 가로세로 비율에 맞춰서 노출되는 데에 비해 compositeContent의 경우에는 이미지 노출 부분의 가장자리 크기가 고정되어 있어 원본 이미지의 가로세로 비율을 반영하지 못하는 문제점이 있습니다. 카카오 옐로아이디처럼 가로세로 크기를 직접 설정할 수 있는 기능이 있었으면 좋겠습니다.

  2. 말이 다 끝나기 전까지 '...' 표시(아직 멘트가 다 끝나지 않았다는 의미로)
    현재 보내기 API를 이용해 0.5~1초 간의 time interval을 설정하여 순차적으로 메시지를 보내고 모든 메시지 전송이 완료가 되면 톡톡서버에게 status 200 응답을 돌려주는 방식으로 개발을 하였습니다.

제가 제안하는 방법은
a) 개발 서버로부터 응답이 오기 전까지 챗봇 측의 대화 말풍선에 '...'표시(페이스북처럼)
b) 메시지 나눠서 보내기 기능 자체를 네이버톡톡 측에서 개발, 말이 다 끝나기 전까지 입력 차단

감사합니다.

프로필 api 관련 질문

회원 정보 요청 후 고객이 1분안에 취소를 누른경우

[event] => profile
[user] =>   특정유저키
[options] => Array
    (
        [result] => DISAGREE
    )

이렇게 들어오는데,
partner 값은 안 들어오던데, partner 값도 들어오게 가능한가요??

저희는 여러 업체를 한번에 관리하려고 해서 파트너값이 따로 필요합니다.

웹훅 수신시

여기에 여쭤봐도 될지 모르겠습니다.
node.js 를 이용해 웹훅 수신을 하고 있습니다. 슬랙 등 다른 앱들은 정상적으로 작동하고 있구요.
예제를 따라 작성을 했는데 메세지를 보내거나 채팅방에 들어올때, 나갈때 등 이벤트가 발생하면
웹훅이 오긴 하는데 body 가 비어있습니다. 왜 그런걸까요??

혹시나 해서 네이버톡톡 파트너센터에 등록한 URL로 POST를 보내보면 body 내용이 정상적으로 들어옵니다.

action 이벤트 관련 문의

action 이벤트를 테스트하고있습니다.

보내기 API를 통해 action 이벤트를 보낼때는 정상작동하지만
Webhook 응답으로 action이벤트를 보내면 동작하지 않습니다.
확인 부탁드립니다!

핸드오버 API 문의드립니다.

현재 Handover API를 사용중입니다.
그런데 간혹가다 파트너센터의 API설정을 건드리지 않았음에도 불구하고 Handover API 가 자동으로 OFF로 바뀌는 현상이 발생하는 것 같습니다. 어떤 이유에서 그런 동작을 하는지 답변해주시면 감사하겠습니다.

List 상에서 네이버톡톡 로딩 시, 다수의 script 와 css 생기는 현상

지금 현재, 쇼핑몰에서 list 형태의 페이지를 보여줄 경우
각 상품옆에 네이버 톡톡을 추가한 상태인데, 로고추가 후, 제공해주는
소스로 붙여넣기해서 사용하고 있습니다.

<script type="text/javascript" src="https://partner.talk.naver.com/banners/script"></script>

문제는 상품이 50개가 보이면
50개의 script 와 css 파일들이 추가되는 것을 확인했습니다.

해당 버튼 갯수만큼 별도로 선언을 해야하는걸까요?
소스를 봐도 동일해서 굳이 동일한 script 와 css 가 여러개 선언될 필요는 없는거 같아 보입니다.

네이버 페이 결제 취소

네이버 페이 진행하다가 사용자가 취소 버튼을 눌러서 다시 채팅창에 유입시 pay와 관련된 event가 넘어오지 않습니다. 사용자가 취소를 누를경우 event가 발생하게 할 수는 없나요?

챗봇 주소 검색 부분 문의입니다.

안녕하세요.
주소 검색 창 연동 부분 문의 드립니다.

챗봇 내에서 주소 검색 창을 열고, 검색 내용을 Return 하는 부분 구현을 하려 합니다.
메뉴얼에 해당 내용이 없어 문의드리니 확인 부탁드립니다.

이상입니다. 고맙습니다.

Profile API - 신규주소 입력 확인

안녕하세요.

Profile API 신규주소 입력 부분 오류가 있습니다.
주소 신규 입력 -> 주소 검색 -> 상세 주소 입력 후 '저장' 버튼을 누르면 동작하지 않습니다.

확인 부탁드립니다.

휴대폰 번호 입력시 오류

안녕하세요.

profile - cellphone 요청 후
'휴대폰 번호를 채팅창에 입력해 주세요.' 출력.
휴대폰 번호를 입력하면 잘못된 형식이라고 나오고 있습니다.
정상적인 핸드폰 번호이며, 다른 분의 핸드폰 번호를 넣어도 동일하게 오류 메세지 출력합니다.

확인을 해보니, (정확한 내용을 몰라 추측한 상황입니다.)
NPAY 혹은 쇼핑 쪽에서 결제를 하면서 핸드폰번호를 인증하였던 회원의 경우는 정상적인것 같습니다.

어떻게 확인을 해야 할까요?

개인정보에서 주소요청시 거리 측정

만약에 주문을 하는 업체에 대해 챗봇을 만들 경우 업체와 고객의 주소거리 차이가 많이 나게 되면
배달지원이 불가능 한 상황이 발생하는데요. 이럴 경우를 대비해서 유저위치와 업체의
거리를 측정할 수 있는 기능이 챗봇에 있을까요?

톡톡 접근 구분 (PC or Mobile)

안녕하세요.

사용자가 톡톡에 PC 혹은 모바일로 접근을 하였는지 구분할 수 있는 방법이 있을까요?
네이버페이 연동 전 저희 서비스 결제를 실행해야 하는 이슈가 있어 확인을 하고 있는 중,
현재 저희 서비스는 모바일(Android, iOS)에서만 결제가 이루어 지도록 되어 있습니다.
이에 위 구분이 필요한 상황인데 해당 구분을 전달해주시면, PC 접속이 모바일 접속을 유도하는 안내 메세지를 사용자에게 전달하려 합니다.

확인 부탁드립니다.

챗붓 api 사용시 네이버 톡톡 일대일대화 메뉴 노출 문의

안녕하세요.

챗붓 api 이전부터 네이버 톡톡의 api를 이용하여
채팅상담시스템과 연동하여 운영하고있는 해피톡이라고 합니다.

최근 이슈가 있는 부분이 있어 문의 드립니다.

예정 네이버 톡톡 api 사용시 해당 해피톡과 연동 작업을 진행하면
네이버 톡톡 파트너 센터의 해당 프로필에서는 일대일 메뉴를 하드하여 운영되었습니다.

근데 챗붓api로 넘어온 후 해당부분이 하이드가 되지 않아
저희가 api를 이용해 보낸 메시지와 고객이 보낸 메시지는 저희 시스템에서 보여지나
네이버 톡톡 센터에서 상담원(관리자)가 말은 저희 해피톡과 연동이 되지 않는 문제가 있습니다.

하여 챗봇 api를 적용하면 일대일대화메뉴가 노출되는 부분이 정책적으로 결정된 사항인지와
아니라고 하면 일대일 메뉴를 하이드 할 수 있는 방법이 있는지 문의 드립니다.

챗봇 API를 통해서 네이버 예약 연동 관련 문의

안녕하세요 챗봇 API 관련해서 문의 드립니다.

톡톡 챗봇과 네이버 예약을 통해서 [테스트] 네이버리조트 챗봇처럼 구현하려고 하는데요.
네이버리조트 챗봇을 보면 입실날짜와 퇴실날짜을 통해 잔여객실 조회해서 예약을 받아볼수 있는 기능이
지원되는 거 같습니다.
잔여객실을 조회하려면 네이버예약 쪽에 쿼리를 던져서 실제 비어있는 객실을 조회를 해야 가능 할 거 같습니다. 여기에 추가로 투숙인원으로 최대인원 값을 같이 파라미터로 던져서 네이버 예약의 상품에서 쿼리 조회가 가능한가요? 현재 관련해서 API가 제공이 되는지요?

예약상품이 5개가 있을 때 예를 들어 2개는 최대인원이 2명이고 3개가 최대인원이 4명까지 가능할 경우
입실날짜와 퇴실날짜, 투숙인원 3명으로 조회를 할 경우 재고가 동일하다고 가정했을 때 최대인원이 4명이 들어가는 객실 3개가 그 날짜에 자동으로 추천이 되어 고객이 원하는 타입으로 선택가능하게끔 만들고 싶습니다.

현재는 단순히 composite 타입으로 호텔 소개와 객실타입 소개 글 및 예약하기 버튼 클릭시 실제 네이버예약 객실 주소로 링크 걸어서 거기서 예약 및 결제가 가능하도록 구현할 수가 있는데 위에서 언급한 기능이 가능하다면 그 쪽으로 바꿔서 구현하고 싶습니다.

스토어팜 서비스 연동 문의드립니다.

현재 톡톡 파트너센터에서 스토어팜 서비스를 연동하여 테스트 중입니다.

스토어팜 서비스를 연동했을때 유저가 모바일에서 '다른상품문의'버튼을 통해 상품문의를 할 수 있게 되어있는걸로 보여집니다. 하지만 챗봇으로 날아오는 리퀘스트에는 거기에 대한 정보가 아무것도 포함되지 않은채 "inflow" : "list", "referer" : "https://talk.naver.com/" 속성을 가진 open 이벤트만 발생합니다. 따라서 챗봇은 유저가 '다른상품문의'버튼을 눌렀는지 전혀 알 수 없는 것 같습니다.

여기에 대한 부분을 개발 중이신지, 개발 중이시라면 어떠한 방향으로 진행중인지 답변해주시면 감사하겠습니다.

CompositeList에 관하여

안녕하세요. 수고가 많으십니다.

업데이트된 API와 네이버톡톡파트너센서 API설명을 보고 있는데요.

질문을 드립니다.

전에 CompositeList는 현재 둘둘치킨의 상품 정보와 같이 수평으로 스크롤할 수 있는 구조였는데요.

수직으로 보여주는 ElementList가 추가 되어

즉, 가로 스크롤로 10개의 콤포지트. 각 콤포지트에서 수직으로 Element를 3개까지 담아서 보여주는 것이 맞는지 궁금합니다.

감사합니다.

Composite - image 의 imageId 설정시 이미지가 나오지 않습니다. (제목수정)

안녕하세요.

Image Upload API를 이용하여, 이미지 등록 후 전달되는 imageId로 imageContent에 사용을 하려 합니다.
현재 테스트로 하나의 이미지를 등록하여 imageId 로 전달하고 있으나, 이미지가 나오지 않고 있습니다.

imageId = "EN4SsVd65r-AZHkge06U0LgQdVBBkkj6ALFVo22KN5m1ECLu1tOgBfHW4nmycmrU7s0VaQmyT5AcAOdqoFPEMvKQV_QcOjWwtqks1UuogUWdT00Ir717IK-tz5_XnPkP"

이며, 확인 부탁드립니다.

이상입니다. 고맙습니다.

quick reply 사라짐

PC에서 톡톡을 할 때
메세지 창을 클릭하면 퀵 리플라이가 사라집니다.
(이미지 참고)

image

image

모바일 환경에서는 사라지지 않았습니다.

action 이벤트 버그 리포트

이번에 업데이트된 action 이벤트를 저희 서비스에 적용 시키고 있습니다.
현재 사용자 메시지 입력 --> action event 보내기 --> 챗봇 답변 응답(send 메시지 전송) 과정으로 처리되고 있습니다.

모바일 환경에서는 크게 문제 되지 않는데
PC 환경에서는
작성중 이미지 출력 후 챗봇 답변이 출력될 때 화면의 포커스가 젤 밑으로 내려가지 않는 버그가 발생하는거 같습니다.
확인 부탁드립니다

톡톡 이미지 post 문제

이미지 처리에 문제가 있습니다.
서버에서 이미지를 최초로 보냈을 때 사이즈가 width : 0 height : 0 으로 계산되어 표시되지 않다가

2017-07-26 11 15 08

새로고침을 누르면 NaNpx로 설정되면서 화면에 표시됩니다.

2017-07-26 11 15 37

이미지 전송은 post로 톡톡 보내기 API를 이용하였습니다.

스토어팜 톡톡 챗봇 검수 문의.

20일 전 스토어팜 내 톡톡에서 챗봇 신청을 하였는데 아직 검수중이라서 문의드립니다.
언제쯤 검수가 완료되는건지 승인되는 기준이 있는건지 대행사를 이용해야만
챗봇서비스를 사용할 수 있는지 알고 싶어요.

보내기 API 컴포지트 전송 문의

보내기 API를 이용해서 다수의 컴포지트들을 캐로셀 형태로 전송하고 있습니다.
경우에 따라서 순차적으로 하나씩 컴포지트들을 연속적으로 출력하고 싶은데
잘 안되네요.
혹시 컴포지트 연속 출력은 네이버톡에서 지원하지 않는 기능인가요?

imageContent 와 quick reply

{
            "imageContent": {
                "imageUrl": # 파트너 센터에 등록된 이미지 URL,
                "quickReply": {
                    "buttonList": [
                        {
                            "data": {
                                "title": "\ud68c\ud654"
                                "code": "DIALOGUE",              
                            }, 
                            "type": "TEXT"
                        }, 
                        {
                            "data": {
                                "title": "\uae30\ucd08\uc804\uccb4"
                                "code": "BASIC",                                 
                            }, 
                            "type": "TEXT"
                        }
                    ]
                }, 
            }
}

위와 같이 image에 quickreply를 포함하여 보내면 이미지와 퀵리플라이 모두 표현되지 않습니다.
네이버톡톡 보내기 API를 사용하여 POST 했습니다.

handover api 테스트중 문의드립니다.

현재 handover 기능을 테스트중인데
파트너가 '상담 완료하기' 버튼을 클릭 했을 때 기술문서에 나와있는 메시지가 챗봇으로 전송이 안되는것 같습니다.
handover 이벤트를 검출 할 수가 없네요.

{
"event": "handover",
"user": "al-2eGuGr5WQOnco1_V-FQ",
"partner": "wc1234",
"options": {
"control": "passThread",
"metadata": "{"managerNickname":"파트너닉네임","autoEnd":false}"
}
}

다른걸 설정해야 되는 부분이 있는가요?

buttonlist 질문입니다.

"buttonList":[
{"type":"TEXT","data":{"title":"월간 베스트5","code":"{"gubun":"cate","value":"0000000104"}"}},
{"type":"TEXT","data":{"title":"경산 추천메뉴","code":"{"gubun":"cate","value":"00E0021010"}"}},
{"type":"TEXT","data":{"title":"한식전문점","code":"{"gubun":"cate","value":"00E0021079"}"}},
{"type":"TEXT","data":{"title":"라면전문점","code":"{"gubun":"cate","value":"00E0021088"}"}}]
}]
위와 같이 입력할때 아래처럼 출력되는데요.

  1. 월간 베스트
  2. 경산 추천메뉴
  3. 한식전문점
  4. 라면전문점

아래와 같이 두줄식 나오게 할수 있는 옵션이 있나요?

  1. 월간 베스트 | 2. 경산 추천메뉴
  2. 한식전문점 | 4. 라면전문점

open 이벤트 발생시 메시지가 두번씩 출력됩니다.

현재 생기한의원에 챗봇을 서비스중에 있습니다.
PC를 통해서 생기한의원 챗봇 url에 접근하면 크게 문제가 없는데
모바일 네이버 검색창에서 '생기한의원' 검색 후 브랜드검색에 달려있는 실시간 톡톡 배너를 클릭해 접근했을 경우
같은 메시지가 2번씩 출력되고 있습니다.
빠른 해결 부탁드립니다.
실제 서비스 중인데 저희쪽 문젠지 네이버 쪽 문젠지 파악이 되고있지 않네요.
그 밖에도 최근들어 오후시간대에 응답이 엄청 느리거나 메시지 출력이 안되는 현상도 발생되고 있는데 원인파악 부탁드립니다.

파트너 : wc5zn2
https://talk.naver.com/ct/wc5zn2

동기식 회신에 대해 문의 드립니다.

안녕하세요,
보내기 API를 이용하지 않고(gw.talk.naver.com 으로 request를 발신하지 않고)
webhook 에 대한 response 만으로 보내기API 형식을 모두 이용할 수 있을른지 문의드립니다.

예)

  1. open 이벤트에 대해, compositeContent 를 포험한 send 이벤트 리턴
  2. 특정 send 이벤트에 대해, profile 이밴트를 리턴하여 프로필 요청

만약 이렇게 할 경우, resultCode 를 못 보는 것은 감안해야 할 것 같은데...
api 문서 외에 운영 상 기출 에러가 있으시다면 알려 주시면 감사하겠습니다.

특정 이벤트시 알림

챗봇을 네이버 톡톡에 붙였을시에 유저가 메시지를 보낼때 마다 톡톡알람이 오게 되어서
알람을 끄게 되면 알람이 아예 안오게 되는데요. 예를 들면 호스트를 호출하던지 주문같은 특별한
이벤트가 발생하였을때 알람을 꺼둔 상태에서도 알람을 울리게 해서 호스트에게 알려줄수 있는 방법이
있을까요??

연락처 및 닉네임 변경 방법 문의

안녕하세요.

profile API를 통해 전달받은 연락처 및 닉네임을 사용자가 원할 시 (사정에 따라 집에 다른 사람의 연락처로 하고 싶을때) 변경하는 프로세스를 고려하고 있는데요.
다시 profile API를 호출하면 그냥 데이터 전달이 되는데, 이 부분은 어떻게 구현을 해야할지요?
예를들어 핸드폰을 변경하고자 할때, 저희가 따로 핸드폰 인증을 받고 처리를 해야하는지 입니다.

확인 부탁드립니다.

상담요청 버튼의 event타입

현재는 아무 messageContent도 포함하지 않는 send이벤트로 전송이 되고 있습니다
상담 요청 버튼을 눌렀을때 전송되는 메시지의 경우 따로 이벤트를 빼내어 주어도 괜찮을 것 같습니다.

API 호출 에러 관련 문의

DEBUG: Curl https://gw.talk.naver.com/chatbot/v1/event JsonData={"event":"send","user":"PGLTJmKZlZUqf9RmSQqKHw","textContent":{"text":"hello world"}}
DEBUG: Curl exec=https://gw.talk.naver.com/chatbot/v1/event
string(75) "{"success":false,"resultCode":"02","resultMessage":"partner 정보 에러"}"

php에서 curl을 이용해서 API 호출 테스트를 하고 있는데
어제 이슈와 동일한 현상이 발생합니다.
어제 답변으로 user 값을 예제 값으로 해서 안된다고 하셨는데 실제 user 키 값으로 해도 파트너 정보 에러라고 나옵니다.

정확하게 "partner 정보 에러" 오류 메시지가 어떨때 나오는지 궁금하네요.

에러 명세서에 보면 resultCode가 02인 경우
request json 문자열 파싱 에러라고 나오는데
혹시 json 구조에 문제가 있거나 필수값이 없는건지 파악이 안되네요.

$authorization = '*************';
$post_data["event"] = "send";
$post_data["user"] = 'PGLTJmKZlZUqf9RmSQqKHw';
$post_data["textContent"] = array("text" => "보내기 API 테스트");
$json = json_encode($post_data);

echo서버(챗봇예제) 만들기 api부분 문의

안녕하세요.

현재 local에서 테스트를 완료후
'파트너센터 > 챗봇 API > API 설정 메뉴에서 Webhook 영역 이벤트 받을 URL'에 등록하였습니다.


[ 챗봇 API 설명부분]

  1. localhost에서 접근 테스트를 합니다.
    curl -X POST -H "Content-Type: application/json;charset=UTF-8" -d '{ "event": "test" }' "http://localhost:8080/"
    localhost에서 테스트 후 정식 인증서를 사용하여 https://your.domain/ 으로 접근이 가능 해야합니다.

  2. URL를 등록합니다.
    파트너센터 > 챗봇 API > API 설정 메뉴에서 Webhook 영역 이벤트 받을 URL에 위에서 만든 URL를 등록합니다.


등록 후 '네이버 톡톡( https://talk.naver.com/ct/유저식별값 )'을 통하여 서버통신을 하는지 테스트를 해보았지만
네이버 챗봇서버로 부터 저희쪽서버로 요청이 들어오고 있지않습니다.

정리하자면,

  1. 고객이 톡톡문의를함
  2. 네이버 챗봇서버가 'Webhook에 이벤트 받을 URL'로 정상적으로 요청이 해야하나 현재 안되고있음
    (코X도 라는 곳에서 정식 인증을 받았습니다.)
  3. '이벤트 받는 서버'에서 '네이버 챗봇서버'로부터 요청이 온게 없음

확인을 위하여 제가 알려드려야 할 정보가 있다면 답변 부탁드립니다.

감사합니다.

보내기 API 질문드립니다.

봇이 답변을 사용자에게 전달할 때, 사람이 입력하는 듯한 효과를 주고 싶습니다.
그래서 답변을 사용자에게 전달할 때 1초 미만의 딜레이를 주고 보내가 API를 연속적으로 사용하고 있는데
textContent, imageContent의 경우 딜레이를 얼마를 주던 잘 동작합니다.
하지만 compositeContent의 경우에는 일정시간 이상을 주게 됐을 때
보내가 API가 동작을 안하네요.

  • 구현 방식

imageContent 보내기 (동작함)
1초지연
textContent 보내기 (동작함)
1초지연
compositeContent 보내기 (동작안함)

imageContent 보내기 (동작함)
textContent 보내기 (동작함)
compositeContent 보내기 (동작함)

추가로
이전에 말씀하신대로 send 이벤트 컴포지트 리스트에 컴포지트를 하나씩 넣어서 여러번 호출 했는데도 보내가 API가 동작하지 않습니다.
textContent, imageContent의 경우에는 동작이 잘됨

Image Upload API 문의

안녕하세요.
Image Upload API에 대해 문의드리려고 합니다.
API를 통해 업로드된 이미지는 기한이 있는지 그리고 기한이 있다면 얼마 후에 톡톡 서버에서 삭제되는지
알려주시면 감사하겠습니다.

textContent와 compositeContent

도미노 피자 챗봇을 들어가면 처음에 텍스트가 뜨고 compositeList가 뜨게 되는데요.
이와 같이 구현을 하려면 어떻게 해야 되는 건가요?? compositeContent 안에 textContent를 넣으면 되는건가요? compositeContent안에 textContent를 넣었을때 text만 나오게 되서 질문합니다.

그리고 유저 input을 받기전에 챗봇이 두번 말하게 하려면 response를 두번 보내면 되는건가요??
두번보내도록 코드를 짜봤는데 보내지지가 않아서요...

새로고침 open 이벤트

새로고침을 통해서 채팅방에 접속할 경우 제공된 문서와는 다르게 option의 inflow 값이 button으로 넘어옵니다.

API 호출 테스트 과정에 파트너 정보 에러라고 뜹니다.

실제 API 설정에서 보내기 API 설정을 통해 Authorization 값을 받았는데
그 값을 이용해 API 호출 테스트를 했습니다.
하지만 응답이 실패로 뜨네요. 파트너 정보 에러라고 하는데 어떤 파트너 값이 잘못된건가요?
어떤 부분이 문제일까요?

curl -X POST \

-H "Content-Type: application/json;charset=UTF-8" \
-H "Authorization: **********" \
-d '{ "event": "send", "user": "al-2eGuGr5WQOnco1_V-FQ", "textContent": { "text": "hello world" } }' \
"https://gw.talk.naver.com/chatbot/v1/event"

결과
{"success":false,"resultCode":"02","resultMessage":"partner 정보 에러"}

webhook 관련

톡톡 api 테스트 할려고 보니 webhook 에 tls 정식인증을 사용하여 정식도메인이 있어야 하는거 같은데요.. 신규로 구축하는 프로젝트라.. 인증과 도메인없이 webhook 에 로컬서버 url로 테스트 가능한 방법이 있는지 알려주세요..

user값에 대한 질문 입니다.

{
"event": "", /* 이벤트명 /
"options": {
/
추가 속성 /
},
"user": "al-2eGuGr5WQOnco1_V-FQ" /
유저 식별값 */
}
리퀘스트시 기본으로 들어오는 user값의 경우 네이버아이디당 유니크한 값인지 궁금합니다.

handover api 질문

지난번 답변주셨을 때 해당 파트너에 연동된 챗봇에는 handover 이벤트가 등록되지 않았다고 답변 주셨는데
제가 테스트하고 있는 파트너 아이디는 WC5GUO, wc5px4 입니다.
Handover API 당연히 ON해줬구요.

다른건 다 잘되는데 파트너 센터 관리자 페이지에서 '상담완료하기' 버튼을 클릭 했을 때
상담원과의 대화가 종료되었습니다 라는 메시지를 사용자에게 출력하고 싶습니다.
그렇게 하기 위해서는 'handover' 이벤트를 수신받아야 하는데
수신이 안되고 있습니다.

챗봇이 파트너에게 주도권을 뺏아 올 경우에는 handover 이벤트 수신이 잘됩니다.
하지만 파트너가 챗봇에게 주도권을 넘겨줄 때 handover 이벤트 수신이 안되네요.
답변 부탁드립니다.

엘리먼트에 옵션 버튼 문의

엘리먼트 리스트에 텍스트 버튼, 링크 버튼은 잘 달리는데
옵션 버튼을 달려고 하니 응답이 없네요.
아래는 talktalk 서버로 전송하는 json문자열입니다.

{
"event": "send",
"compositeContent": {
"compositeList": [{
"title": "\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc81c\ubaa9",
"description": "\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85\r\n\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85\r\n\uac1c\ubc1c \ud14c\uc2a4\ud2b8 \uc124\uba85",
"image": "http://chatbot.drsotong.com/data/service/2017/10/hospital_image_1508736275.png",
"elementList": {
"type": "LIST",
"data": [{
"title": "\uc9c4\ub8cc\uc548\ub0b4 \ud14c\uc2a4\ud2b8",
"description": "\uc9c4\ub8cc \uc548\ub0b4 \ud14c\uc2a4\ud2b8 \uc124\uba851",
"subDescription": "\uc9c4\ub8cc \uc548\ub0b4 \ud14c\uc2a4\ud2b8 \uc124\uba852",
"image": {
"imageUrl": "http://chatbot.drsotong.com/data/service/2017/10/hospital_image_1508736285.png"
},
"button": {
"type": "OPTION",
"data": {
"title": "\uc2dc\uc220\uc758 \uc8fc\uc758\uc0ac\ud56d",
"buttonList": [{
"type": "TEXT",
"data": {
"title": "\uc635\uc158-\ud14d\uc2a4\ud2b8\ubc84\ud2bc",
"code": "opt1"
}
}, {
"type": "LINK",
"data": {
"title": "\uc635\uc158-\ub9c1\ud06c\ubc84\ud2bc",
"url": "http://www.naver.com",
"mobileUrl": "http://m.naver.com"
}
}]
}
}
}]
},
"buttonList": null
}, {
"title": "\uc2dc\uc220\uba851",
"description": "\uc2dc\uc220\uac1c\uc694(\ub450\uc904\uc774\ub0b4\ub85c\ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4)",
"image": "http://chatbot.drsotong.com/data/service/2017/07/hospital_image_1500629066.png",
"elementList": null,
"buttonList": null
}, {
"title": "\uc804\ud654\ubc88\ud638 \uc548\ub0b4",
"description": "\ubcd1\uc6d0 \ub300\ud45c\uc804\ud654 or \ub2f4\ub2f9\uc790 \uc804\ud654\ubc88\ud638 \ubc14\ub85c\uac00\uae30\uc785\ub2c8\ub2e4.(\uc218\uc815\ud574\uc11c)\r\n\uc804\ud654\ubc88\ud638 \uc5ec\ub7ec\uac1c \ub2ec\uc544\ub3c4\ub428",
"image": "http://chatbot.drsotong.com/data/service/2017/10/hospital_image_1508736246.png",
"elementList": null,
"buttonList": null
}]
},
"user": "*********************************"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.