Answer Bot API

Cognitive Search API를 사용하면 자연어 이해 AI 기반의 Q&A 검색은 물론, 기계독해(MRC)로 사전에 등록한 문서에서 AI 가 자동으로 답변을 추출할 수 있습니다.

Q&A 와 문서 업로드하기

먼저 Alli 에 로그인해야 합니다. 그 다음 Q&A 메뉴로 이동하면 질문/답변 쌍을 등록할 수 있습니다. 워드, PDF, 파워포인트, 엑셀 등 문서 파일을 등록하려면 문서 메뉴로 이동합니다.

문서 데이터베이스를 마이크로소프트 OneDrive 등의 데이터 소스와 연동하려면 소스 설정 메뉴로 이동하세요. API 를 통해 문서를 직접 업로드하려면 본 문서의 Documents 업로드 부분을 참고하세요.

API 키 얻기

각 요청의 헤더에 프로젝트에 할당된 API-KEY 를 제공해야 합니다. API 키는 대시보드의 설정 메뉴 아래 일반 탭에서 찾을 수 있습니다.

에이전트 혹은 유저 정보 입력하기

특정 엔드포인트에는 리퀘스트 헤더에 에이전트나 유저 정보를 입력해 누가 해당 API 콜을 실행하는지 지정할 수 있습니다.

에이전트 정보는 AGENT-EMAIL 헤더를 사용해 입력합니다. 에이전트의 메일 주소는 Alli 대시보드 프로젝트 설정 > 담당자 메뉴에서 확인할 수 있습니다. 아래는 입력 예시입니다.

-H 'AGENT-EMAIL: agent_1@email.com'

유저 정보는 OWN-USER-ID 에 유저 ID 를 입력하여 제공할 수 있습니다. 기존 유저 ID 를 사용하거나 새로운 ID 를 사용할 수 있으며, 새로운 ID 가 입력되면 Alli 가 해당 ID 로 신규 유저를 생성합니다. 이후 같은 OWN-USER-ID 헤더가 사용되면 해당 콜은 동일 유저가 실행한 것으로 인식됩니다.

또한 유저 ID 를 사용할 때 유저의 이메일 정보를 업데이트할 수 있습니다. USER-EMAIL 헤더에 업데이트를 원하는 이메일을 입력하면 됩니다. 아래는 입력 예시입니다.

-H 'OWN-USER-ID: 5f1234567a409876c082487z' \
-H 'USER-EMAIL: user_1@email.com'

OWN-USER-ID 에는 ASCII 캐릭터만 사용할 수 있습니다. 사용하고자 하는 유저 ID 에 ASCII 캐릭터가 아닌 캐릭터가 포함되는 경우, base64 인코딩 후 base64:CONVERTED_ID 형식을 사용할 수 있습니다.

유저 ID 정보는 Alli 대시보드의 고객 메뉴에서 확인할 수 있습니다.

URL 내 Path parameter 인코딩하기

URL Path parameter 입력 시, 비예약문자(a-z,A-Z,0-9, - _ . ~)를 제외한 모든 문자를 UTF-8 및 퍼센트 인코딩 후 입력하시는 것을 권장합니다. 예약문자는( ! * ' ( ) ; : @ & = + $ , / ? # [ ] )는 반드시 UTF-8 및 퍼센트 인코딩되어야합니다.

에러 메시지

예상했던 response 를 받지 못한 경우 에러 메시지를 확인해 주세요. 예를 들어 잘못된 HTTP 메소드를 사용한 경우 아래와 같은 형식의 에러 메시지가 리턴됩니다.

{“error”: “Method Not Allowed POST: /webapi/faq_feedbacks”}

Q&A에서 검색하기

POST https://backend.alli.ai/webapi/faq

Q&A API 를 사용하면 Q&A 데이터베이스에 질문과 가장 관련이 깊은 Q&A 쌍을 찾아 제시합니다.

Headers

Request Body

{"result": 
  [
    {
      "confidence": 0.8371959004827834, 
      "effectiveConfidence": 0.9698303406362148, 
      "question": "제품 가격은 어떻게 되나요?", 
      "answer": "웹사이트에서 무료 플랜을 포함한 프라이싱 플랜을 확인하실 수 있습니다.",
      "id": "ClMVIjCoNDAiZDLyNWZhM1O3YTUIIKZjPPRcER==",
      "hashtags": [],
      "lastUpdatedDate": "2020-11-19",
      "agentFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
      "userFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
       "folder": "folder 1", 
       "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
       "agentViewer": ["email_4@allganize.ai"]
    },
    {
      "confidence": 0.6119840535714456, 
      "effectiveConfidence": 0.7738889000171243, 
      "question": "플랜별 가격표가 있나요?", 
      "answer": "물론 있습니다. 웹사이트의 PRICING 메뉴에서 확인하실 수 있습니다.",
      "id": "RkFROjVmNDAwZDMyNWZhM2Y4YTA1ZDZjNWUwMQ==",
      "hashtags": [],
      "lastUpdatedDate": "2020-11-20",
      "agentFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
      "userFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
       "folder": "folder 1", 
       "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
       "agentViewer": ["email_4@allganize.ai"],
       "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
       "allowOtherAgentsView": true, 
       "allowOtherUsersView": true
       }
  ],
  "count": 2,
  "hashId": "d4cr44d4e56766ce0c2b21f4aa5463a4"
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -d '{ 
  "query": "보험 해지", 
  "hashtags": ["wiki", "knowledge"],
  "hashtagsOperator": "OR", 
  "maxResults": 3,
  "format": "text"}' \
-H "Content-Type: application/json" \
-H "API-KEY: YOUR API KEY" \
https://backend.alli.ai/webapi/faq

Response Example

{"result": 
  [
    {
      "confidence": 0.8371959004827834, 
      "effectiveConfidence": 0.9698303406362148, 
      "question": "제품 가격은 어떻게 되나요?", 
      "answer": "웹사이트에서 무료 플랜을 포함한 프라이싱 플랜을 확인하실 수 있습니다.",
      "id": "ClMVIjCoNDAiZDLyNWZhM1O3YTUIIKZjPPRcER==",
      "hashtags": [],
      "lastUpdatedDate": "2020-11-19",
      "agentFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
      "userFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
       "folder": "folder 1", 
       "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
       "agentViewer": ["email_4@allganize.ai"]
    },
    {
      "confidence": 0.6119840535714456, 
      "effectiveConfidence": 0.7738889000171243, 
      "question": "플랜별 가격표가 있나요?", 
      "answer": "물론 있습니다. 웹사이트의 PRICING 메뉴에서 확인하실 수 있습니다.",
      "id": "RkFROjVmNDAwZDMyNWZhM2Y4YTA1ZDZjNWUwMQ==",
      "hashtags": [],
      "lastUpdatedDate": "2020-11-20",
      "agentFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
      "userFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
       "folder": "folder 1", 
       "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
       "agentViewer": ["email_4@allganize.ai"],
       "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
       "allowOtherAgentsView": true, 
       "allowOtherUsersView": true
       }
  ],
  "count": 2,
  "hashId": "d4cr44d4e56766ce0c2b21f4aa5463a4"
}

Documents에서 검색하기

POST https://backend.alli.ai/webapi/mrc

Documents API 를 사용하면 복잡한 표 등이 포함된 비정형 문서에서 질문에 답변을 추출할 수 있습니다.

Headers

Request Body

answer: 대시보드에 업로드된 문서에서 추출된 답변입니다

answerHash: 피드백을 입력하거나 취소할 Documents 검색 결과를 특정하기 위해 사용됩니다.

confidence: AI 모델이 산출한 confidence 값을 보여줍니다. 0과 1 사이의 숫자입니다.

effectiveConfidence: 쿼리 결과에 피드백이 제공되면 AI 모델의 트레이닝에 반영되며, 유저와 에이전트의 피드백 결과를 반영하여 조정된 confidence 값이 effective confidence 입니다. 0과 1 사이의 숫자입니다.

documentId: 답변이 추출된 문서의 ID 입니다.

documentName: 답변이 추출된 문서의 이름입니다.

hashtags: 문서에 등록되어 있는 해시태그 목록입니다.

pageNo: 문서 내 답변이 추출된 페이지 정보입니다.

createdDate: 해당 문서가 생성(업로드) 된 날짜입니다.

agentFeedback: 해당 검색 결과에 대해 에이전트가 부여한 긍정(positiveCount) / 부정(negativeCount) 피드백입니다.

userFeedback: 해당 검색 결과에 대해 유저가 부여한 긍정 / 부정 피드백입니다.

body: 요청에서 returnPreview 가 true 인 경우 문서 검색 프리뷰의 html body 가 출력됩니다.

css: 요청에서 returnPreview 가 true 인 경우 문서 검색 프리뷰의 css 가 출력됩니다.

pdfPreview: 요청에서 pdfPreview 가 true 인 경우 문서 검색 결과 pdf 프리뷰의 url 이 리턴됩니다. 해당 url로의 엑세스는 다운로드 IP 화이트리스트를 이용해 제한이 가능합니다.

{
    "result": [
        {
            "answer": "ANSWER_1",
            "answerHash": "ANSWER_HASH_1",
            "confidence": CONFIDENCE_1,
            "effectiveConfidence": EFFECTIVE_CONFIDENCE_1,
            "documentId": "DOCUMENT_ID_1",
            "documentName": "DOCUMENT_NAME_1",
            "hashtags": [],
            "pageNo": PAGE_NUMBER,
            "createdDate": "DATE",
            "agentFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "userFeedback": {
                "positiveCount": 2,
                "negativeCount": 0
            },
            "body": "PREVIEW_HTML_BODY",
            "css": "PREVIEW_CSS"
            "pdfPreview": "PDF_PREVIEW_URL"
        }
    ]
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -d '{ 
  "query": "보험 해지", 
  "hashtags": ["wiki", "knowledge"],
  "hashtagsOperator": "OR",
  "maxResults": 3, 
  "format": "text",
  "pdfPreview": true}' \
-H "Content-Type: application/json" \
-H "API-KEY: YOUR API KEY" \
https://backend.alli.ai/webapi/mrc

Response Example

{
    "result": [
        {
            "answer": "30일 안에는 불이익 없이 해지가 가능합니다.",
            "answerHash": "8430cf3b9af628abc1bb063802db39be",
            "confidence": 0.9998937845230103,
            "effectiveConfidence": 1,
            "documentId": "S25vd2xlZGdlQmFzZTo1ZjMzODFkZmNhYWJjYWUyMjkzYjFhY2U=",
            "documentName": "보험표준약관.docx",
            "hashtags": [],
            "pageNo": 5,
            "createdDate": "2020-11-18",
            "agentFeedback": {
                "positiveCount": 2,
                "negativeCount": 0
            },
            "userFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
            "pdfPreview": "PDF_PREVIEW_URL",
            "folder": "folder 1", 
            "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
            "agentViewer": ["email_4@allganize.ai"],
            "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
            "allowOtherAgentsView": true, 
            "allowOtherUsersView": true,
            "properties": {}

        },
        {
            "answer": "30일 이후 해지 시 환불이 불가능합니다.",
            "answerHash": "d849a49662a4f21df51de24d06196547",
            "confidence": 0.9998629689216614,
            "effectiveConfidence": 1,
            "documentId": "S25vd2xlZGdlQmFzZTo1ZjMzODFkZmNhYWJjYWUyMjkzYjFhY2U=",
            "documentName": "실보험 약관 2020.pdf",
            "hashtags": ["policy", "2020"],
            "pageNo": 234,
            "createdDate": "2020-11-18",
            "agentFeedback": {
                "positiveCount": 4,
                "negativeCount": 1
            },
            "userFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
            "pdfPreview": "PDF_PREVIEW_URL",
            "folder": "folder 1",
            "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
            "agentViewer": ["email_4@allganize.ai"],
            "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
            "allowOtherAgentsView": true, 
            "allowOtherUsersView": true,
            "properties": {}
        }
    ]
}

Q&A 상세 정보 확인

GET https://backend.alli.ai/webapi/single_faq

이 API 를 사용하면 Q&A 항목 하나의 상세 정보를 확인할 수 있습니다.

Headers

Request Body

{
    "result": {
        "question": "올거나이즈 사무실은 어디에 있나요?",
        "answer": "본사는 미국 캘리포니아의 실리콘밸리에 위치하고 있습니다.",
        "id": "RkFROjYwMmD2ZTQ0YWZmQWQ5YmQ0NmM5Y4VkNw==",
        "userFeedback": {
            "positiveCount": 0,
            "negativeCount": 0
        },
        "agentFeedback": {
            "positiveCount": 0,
            "negativeCount": 1
        },
        "lastUpdatedDate": "2021-02-19",
        "createdDate": "2021-02-19",
        "hashtags": [],
        "statusOnAt": null, 
        "statusOffAt": null,
        "folder": "folder 1", 
        "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
        "agentViewer": ["email_4@allganize.ai"],
        "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
        "allowOtherAgentsView": true, 
        "allowOtherUsersView": true
    }
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -X GET \
-d '{"id": "RkFROjY0YWZmQWQ5YmQ0NmM5Y4VkNw==", "format": "text"}' \
-H "API-KEY: YOUR API KEY" \
https://backend.alli.ai/webapi/single_faq

Response Example

{
    "result": {
        "question": "올거나이즈 사무실은 어디에 있나요?",
        "answer": "본사는 미국 캘리포니아의 실리콘밸리에 위치하고 있습니다.",
        "id": "RkFROjYwMmD2ZTQ0YWZmQWQ5YmQ0NmM5Y4VkNw==",
        "userFeedback": {
            "positiveCount": 0,
            "negativeCount": 0
        },
        "agentFeedback": {
            "positiveCount": 0,
            "negativeCount": 1
        },
        "lastUpdatedDate": "2021-02-19",
        "createdDate": "2021-02-19",
        "hashtags": [],
        "statusOnAt": null, 
        "statusOffAt": null,
        "folder": "folder 1", 
        "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
        "agentViewer": ["email_4@allganize.ai"],
        "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
        "allowOtherAgentsView": true, 
        "allowOtherUsersView": true
    }
}

Documents 상세 정보 확인

GET https://backend.alli.ai/webapi/single_document

이 API 를 사용하면 Q&A 항목 하나의 상세 정보를 확인할 수 있습니다.

Headers

Request Body

{"result": {
      "id": "DOCUMENT_ID_1",
      "documentName": "DOCUMENT_NAME_1.docx",
      "createdDate": "2020-11-12",
      "agentFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
      "hashtags" : ["HASHTAG_1", "HASHTAG_2"]
    }
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -X GET \
-d '{"id": "S25v42xlZGdlQmFzZTo1ZjEzODFkZmNhYWQjYWUyMjkZYjFhY2U="}' \
-H "API-KEY: YOUR API KEY" \
https://backend.alli.ai/webapi/single_document

Response Example

{"result": {
      "id": "S25vd2xlZGdlQmFzZTo1ZjMzODFkZmNhYWJjYWUyMjkzYjFhY2U=",
      "documentName": "정책문 1.docx",
      "createdDate": "2020-11-12",
      "agentFeedback": {
                "positiveCount": 1,
                "negativeCount": 0
            },
      "hashtags" : ["정책", "가이드"]
    }
}

Q&A Feedbacks

GET https://backend.alli.ai/webapi/faq_feedbacks

이 API 를 사용하면 검색 쿼리별로 Q&A 쌍에 주어지는 피드백 리스트를 받아올 수 있습니다.

Headers

Request Body

{
  "result": [
    {
      "query": "QUERY_1",
      "feedbacks": [
        {
          "faqId": "FAQ_ID_1_1", 
          "positive": true or false
        }, ...
      ]
    }, ...
  ],
  "count": COUNT_1
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -X GET \
-d '{"offset": 0, "limit": 10}' \
-H "API-KEY: YOUR API KEY" \
https://backend.alli.ai/webapi/faq_feedbacks

Response Example

{
  "result": [
    {
      "query": "오피스가 어디죠?",
      "feedbacks": [
        {
          "faqId": "RkFROjVmNDA1MWVkMTFmOWJjMTJjOGUwMTg5YQ==",
          "positive": true
        },
        {
          "faqId": "RkFROjVmNDA1MWVkMTFmOWJjMTJjOGUwMThhNA==",
          "positive": false
        },
        {
          "faqId": "RkFROjVmNDA1MWVjMTFmOWJjMTJjOGUwMTgyYw==",
          "positive": true
        }
      ]
    },
    {
      "query": "투자를 받았나요?",
      "feedbacks": [
        {
          "faqId": "RkFROjVmNDA1MWVjMTFmOWJjMTJjOGUwMTgyNw==",
          "positive": true
        }
      ]
    }
  ],
  "count": 4
}

Q&A Feedback

POST https://backend.alli.ai/webapi/faq_feedback

이 API 를 사용하면 검색 쿼리별로 Q&A 에 피드백을 주거나 주어진 피드백을 삭제할 수 있습니다.

Headers

Request Body

{
  "errors": null,
  "result": {
    "faq": {
      "id": "ID_1"
    },
    "agentFeedback": {
      "positiveCount": NUMBER,
      "negativeCount": NUMBER
    }
  }
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

Q&A_ID 를 해당하는 Q&A ID 로 바꾸어야 합니다. Q&A ID 를 얻으려면 Q&A 에서 검색하기의 Response Example 혹은 Q&A Feedbacks 의 Response Example 항목을 참고하세요.

curl https://backend.alli.ai/webapi/faq_feedback \
-d '{"query": "어디에 있나요?", 
     "id": "Q&A_ID", 
     "isPositive": true}' \
-H "Content-Type: application/json" \
-H "API-KEY: YOUR API KEY"

Response Example

{
  "errors": null,
  "result": {
    "faq": {
      "id": "RkFROjVmNDA1MWVjMTFmOWJjMTJjOGUwMTgyNw=="
    },
    "agentFeedback": {
      "positiveCount": 3,
      "negativeCount": 1
    }
  }
}

Q&A User Feedback

POST https://backend.alli.ai/webapi/faq/user_feedback

이 API 를 사용하면 검색 쿼리별로 Q&A 에 유저 피드백을 부여할 수 있습니다.

Headers

Request Body

{
    "result": {
        "userFeedback": {
            "positiveCount": 1,
            "negativeCount": 0
        }
    }
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

Q&A_ID 를 해당하는 Q&A ID 로 바꾸어야 합니다. Q&A ID 를 얻으려면 Q&A 에서 검색하기의 Response Example 혹은 Q&A Feedbacks 의 Response Example 항목을 참고하세요.

curl --request POST 'https://backend.alli.ai/webapi/mrc/user_feedback' \
--header 'API-KEY: YOUR_API_KEY' \
-d '{
    "query": "office loacation?",
    "prev": false,
    "id": "RkFROjYwwEk4YTU0YTc0MjNmMDgxOIdkZTZiNA==",
    "positive": true
}'

Response Example

{
    "result": {
        "userFeedback": {
            "positiveCount": 1,
            "negativeCount": 0
        }
    }
}

Q&A 업로드

POST https://backend.alli.ai/webapi/upload_faq_file

이 API 를 이용하면 tsv, csv, xlsx, zip 형식으로 다수의 Q&A 를 한꺼번에 업로드할 수 있습니다.

Headers

Request Body

{
    "result": "success",
    "notUploaded": [
        {
            "question": "QUESTION_1",
            "state": "dup"
        },
        {
            "question": "QUESTION_2",
            "state": "up"
        }
    ]
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -F 'file=@/location/to/your_file' \
-H 'API-KEY: YOUR_API_KEY'
https://backend.alli.ai/webapi/upload_faq_file

Response Example

{
    "result": "success",
    "notUploaded": [
        {
            "question": "AI 를 어떻게 트레이닝하나요?",
            "state": "dup"
        },
        {
            "question": "미팅 혹은 데모를 진행하고 싶습니다.",
            "state": "up"
        }
    ]
}

Q&A 추가

POST https://backend.alli.ai/webapi/register_faq

이 API 를 이용하면 새 Q&A 를 추가하거나 기존 Q&A 를 업데이트할 수 있습니다.

Headers

Request Body

{
    "result": {
        "status": "created",
        "id": "Q&A_ID"
    },
    "errors": null
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl 'https://backend.alli.ai/webapi/register_faq' \
-H 'API-KEY: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
    "status": "ON",
    "question": "사무실 위치가 어디인가요?",
    "similarQuestions": ["오피스 주소?", "주소가 어떻게 되죠?"],
    "answer": "미국 오클랜드, 한국 서울 및 일본 도쿄에 사무실이 있습니다.",
    "hashtags": ["office", "location"],
    "memo": "API 에서 추가",
    "folder": "folder 1", 
    "agentEditor": ["your@email.com"], 
    "agentViewer": ["your@email_2.com"],
    "userViewer": {
    "variables": {
      "CUSTOMER_ID": ["id_1", "id_2"],
      "CUSTOMER_GROUP": ["{categoryElementId}", "{categoryElementId}"]
        }
    },
    "followFolderPermission": false,
    "allowOtherAgentsView": true,
    "allowOtherUsersView": true
}'

Response Example

{
    "result": {
        "status": "created",
        "id": "RkFROkYwYRQxYzIzMDcxYWM5M3JlOWR5Y2EeOQ=="
    },
    "errors": null
}

Q&A 삭제

POST https://backend.alli.ai/webapi/delete_faq

이 API 를 사용해 Q&A 를 삭제할 수 있습니다.

Headers

Request Body

{
    "result": {
        "status": "deleted"
    },
    "errors": null
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl 'https://backend.alli.ai/webapi/delete_faq' \
-H 'API-KEY: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d {
    "id": "RkFROkYwYRQxYzIzMDcxYWM5M3JlOWR5Y2EeOQ=="
    }

Response Example

{
    "result": {
        "status": "deleted"
    },
    "errors": null
}

Q&A 목록 조회

GET https://backend.alli.ai/webapi/faqs

이 API 를 이용해 지식 베이스에 등록된 Q&A 의 목록을 조회할 수 있습니다.

Headers

Request Body

{
    "offset": 0,
    "count": 2,
    "totalCount": 2,
    "results": [
        {
            "id": "RkRODjYwUIr2YTUzYTc0MjNmMDgxOTFkZTRlNA==",
            "question": "올거나이즈 직원 수는 몇명인가요?",
            "answer": "현재 25명이 글로벌 오피스에서 근무하고 있습니다.",
            "hashtags": [
                "회사",
                "현황"
            ],
            "userFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "agentFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "lastUpdatedDate": "2021-05-04",
            "createdDate": "2021-02-23",
            "statusOnAt": null, 
            "statusOffAt": null,
            "folder": "folder 1", 
            "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
            "agentViewer": ["email_4@allganize.ai"],
            "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
            "allowOtherAgentsView": true, 
            "allowOtherUsersView": true

        },
        {
            "id": "RkFROjYwIdU4YTUzYTc0MjNmUR2wOTFkZTU1OA==",
            "question": "올거나이즈에사 발간한 백서가 있나요?",
            "answer": "물론 있습니다. 홈페이지의 Resources 메뉴를 확인하세요.",
            "hashtags": [
                "회사"
            ],
            "userFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "agentFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "lastUpdatedDate": "2021-05-04",
            "createdDate": "2021-02-23",
            "statusOnAt": null, 
            "statusOffAt": null,
            "folder": "folder 1", 
            "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
            "agentViewer": ["email_4@allganize.ai"],
            "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
            "allowOtherAgentsView": true, 
            "allowOtherUsersView": true
        }
    ]
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -X GET 'https://backend.alli.ai/webapi/faqs' \
-H 'API-KEY: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
    "searchTerm": "올거나이즈",
    "isUsed": true,
    "hashtags": ["정책", "회사"],
    "hashtagsOperator": "OR",
    "createdByAgent": true,
    "answeredByMrc": true,
    "autoGenerated": false,
    "editedByAgent": false,
    "format": "text",
    "offset": 0,
    "limit": 10
}'

Response Example

{
    "offset": 0,
    "count": 2,
    "totalCount": 2,
    "results": [
        {
            "id": "RkRODjYwUIr2YTUzYTc0MjNmMDgxOTFkZTRlNA==",
            "question": "올거나이즈 직원 수는 몇명인가요?",
            "answer": "현재 25명이 글로벌 오피스에서 근무하고 있습니다.",
            "hashtags": [
                "회사",
                "현황"
            ],
            "userFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "agentFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "lastUpdatedDate": "2021-05-04",
            "createdDate": "2021-02-23",
            "statusOnAt": null, 
            "statusOffAt": null,
            "folder": "folder 1", 
            "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
            "agentViewer": ["email_4@allganize.ai"],
            "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
            "allowOtherAgentsView": true, 
            "allowOtherUsersView": true

        },
        {
            "id": "RkFROjYwIdU4YTUzYTc0MjNmUR2wOTFkZTU1OA==",
            "question": "올거나이즈에사 발간한 백서가 있나요?",
            "answer": "물론 있습니다. 홈페이지의 Resources 메뉴를 확인하세요.",
            "hashtags": [
                "회사"
            ],
            "userFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "agentFeedback": {
                "positiveCount": 0,
                "negativeCount": 0
            },
            "lastUpdatedDate": "2021-05-04",
            "createdDate": "2021-02-23",
            "statusOnAt": null, 
            "statusOffAt": null,
            "folder": "folder 1", 
            "agentEditor": ["email_1@allganize.ai", "email_2@allganize.ai", "email_3@allganize.ai"], 
            "agentViewer": ["email_4@allganize.ai"],
            "userViewer": {"variables": {"CUSTOMER_ID": [{"id": "customer_id_1", "value": "customer_id_1"}]}}, 
            "allowOtherAgentsView": true, 
            "allowOtherUsersView": true
        }
    ]
}

Q&A Candidates

GET https://backend.alli.ai/webapi/faq_candidates

이 API 를 이용하면 고객의 질문 중 답변되지 않은 질문, 즉 '미답변 질문' 들의 목록을 받아올 수 있습니다.

Headers

Request Body

{
  "count": NUMBER,
  "result": [
    {
      "id": "ID_ANSWER_1",
      "frequency": 1,
      "textAnswer": "ANSWER_1",
      "state": "ACTIVE",
      "createdAt": NUMBER,
      "questions": [
        {
          "id": "ID_QUESTION_1",
          "question": "QUESTION_1",
          "frequency": 1,
          "history": {
            "id": "ID_HISTORY_1"
          }
        }
      ]
    }, ...
  ],
  "errors": null
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -X GET \
-d '{
    "hashtags": ["wiki"], 
    "searchTerm": "고객", 
    "order": "FREQUENCY_DESC", 
    "state": "ALL", 
    "offset": 0, 
    "limit": 10}' \
-H "API-KEY: YOUR API KEY" \
https://backend.alli.ai/webapi/faq_candidates

Response Example

{
  "count": 2,
  "result": [
    {
      "id": "RkFRQ2FuZGlkYXRlOjVlYjA3OGU5MGFmZmMyM2QxZjc4ZTMzMQ==",
      "frequency": 1,
      "textAnswer": "사용법은 이와 같습니다.\n— From 고객 가이드.pdf",
      "state": "ACTIVE",
      "createdAt": 1588623593321,
      "questions": [
        {
          "id": "RkFRQ2FuZGlkYXRlUXVlc3Rpb246NWViMDc4ZTkwYWZmYzIzZDFmNzhlMzMw",
          "question": "고객 매뉴얼이 있나요?",
          "frequency": 1,
          "history": {
            "id": "Q29udmVyc2F0aW9uOjVlYjA3OGI2NWUyMTJlMTMzZDM4NDAzOA=="
          }
        }
      ]
    },
    {
      "id": "RkFRQ2FuZGlkYXRlOjVlOWEzZWI2MmZlOTFkMzIwYjE2YWQyOQ==",
      "frequency": 1,
      "textAnswer": "15일 안에는 언제든 취소가 가능합니다.\n— From 고객정책.pdf",
      "state": "ACTIVE",
      "createdAt": 1587166902114,
      "questions": [
        {
          "id": "RkFRQ2FuZGlkYXRlUXVlc3Rpb246NWU5YTNlYjYyZmU5MWQzMjBiMTZhZDI4",
          "question": "환불받고 싶어요.",
          "frequency": 1,
          "history": {
            "id": "Q29udmVyc2F0aW9uOjVlOWEzZDliNjU5YmM2NTEyMTk5MDQ3Ng=="
          }
        }
      ]
    }
  ],
  "errors": null
}

Q&A Candidates

POST https://backend.alli.ai/webapi/add_faq_candidates

새로운 미답변 질문을 등록합니다. 미답변 질문은 지식 베이스 > 미답변 탭에 등록되며 답변 등록 후 Q&A 로 이동시킬 수 있습니다.

Headers

Request Body

{
    "result": {
        "candidates": [
            {
                "id": "CANDIDATE_ID_1"
            },
            {
                "id": "CANDIDATE_ID_2"
            }
        ]
    },
    "errors": null
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl https://backend.alli.ai/webapi/add_faq_candidates \
-d '{"queries": ["what is that processor", "how much does the processor cost"]}' \
-H "Content-Type: application/json" \
-H "API-KEY: YOUR_API_KEY"

Response Example

{
    "result": {
        "candidates": [
            {
                "id": "RkFRQ2FuZGlDYXRlOjYwMzBiMjRwNDM3NGI2ZmNjNDQ5ZTg0Nw=="
            },
            {
                "id": "RkFRQ2FuZGlkYXRlOjYwMzBiMjcwNDM3NGW2ZmNjNDQ5ZThhYQ=="
            }
        ]
    },
    "errors": null
}

Documents Feedbacks

GET https://backend.alli.ai/webapi/mrc_feedbacks

이 API 를 사용하면 검색 쿼리별로 문서에서 추출된 답변에 주어지는 피드백 리스트를 불러올 수 있습니다.

Headers

Request Body

{
  "result": [
    {
      "query": "QUERY_1",
      "feedbacks": [
        {
          "documentId": "DOCUMENT_ID_1",
          "answer": "ANSWER_1",
          "answerHash": "ANSWER_HASH_1",
          "positive": true or false
        }, ...
      ]
    }
  ],
  "count": NUMBER
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -X GET \
-d '{"offset": 0, "limit": 10}' \
-H "API-KEY: YOUR API KEY" \
https://backend.alli.ai/webapi/mrc_feedbacks

Response Example

{
  "result": [
    {
      "query": "보험 해지하려구요",
      "feedbacks": [
        {
          "documentId": "S25vd2xlZGdlQmFzZTo1ZWM1YmJiZTczNmUxNmM0NDRjZDI2ZGM=",
          "answer": "30일 안에는 불이익 없이 해지가 가능합니다.",
          "answerHash": "44094c4a281484daadf28e67a4745747",
          "positive": true
        },
        {
          "documentId": "S25vd2xlZGdlQmFzZTo1ZWM1YmJiZTczNmUxNmM0NDRjZDI2ZGM=",
          "answer": "보험 가입 방법은 아래와 같습니다.",
          "answerHash": "296ffa9691166c583b00365fb6839a06",
          "positive": false
        },
        {
          "documentId": "S25vd2xlZGdlQmFzZTo1ZWM1YmJiZTczNmUxNmM0NDRjZDI2ZGM=",
          "answer": "30일 이후 해지 시 보험료 환불이 어려울 수 있습니다.",
          "answerHash": "48e5273910c913dbf0fc08482f7cd22c",
          "positive": true
        }
      ]
    }
  ],
  "count": 3
}

Documents Search Feedback

POST https://backend.alli.ai/webapi/mrc_feedback

이 API 를 사용하면 검색 쿼리에 따라 추출된 검색 결과에 대해 피드백을 주거나 제거할 수 있습니다.

Headers

Request Body

{
  "errors": null,
  "result": {
    "agentFeedback": {
      "positiveCount": NUMBER,
      "negativeCount": NUMBER
    }
  }
}

Request Example

YOUR API KEY 를 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

DOCUMENT_ID 와 ANSWER_HASH 부분을 해당하는 ID 로 바꾸어야 합니다. 각각의 정보를 얻으려면 Documents 에서 검색하기의 Response Example 항목이나 Documents Feedbacks의 Response Example 항목을 참고하세요.

curl https://backend.alli.ai/webapi/mrc_feedback \
-d '{"query": "보험 해지는 어떻게 하나요?", 
     "id": "DOCUMENT_ID", 
     "answerHash": "ANSWER_HASH", 
     "isPositive": true}' \
-H "Content-Type: application/json" \
-H "API-KEY: YOUR API KEY"

Response Example

{
  "errors": null,
  "result": {
    "agentFeedback": {
      "positiveCount": 2,
      "negativeCount": 1
    }
  }
}

Documents Search User Feedback

POST https://backend.alli.ai/webapi/mrc/user_feedback

이 API 를 이용해 특정 Documents 검색 결과에 긍정 혹은 부정 유저 피드백을 부여할 수 있습니다.

Headers

Request Body

{
    "result": {
        "userFeedback": {
            "positiveCount": 1,
            "negativeCount": 0
        }
    }
}

Request Example

curl -request POST 'https://backend.alli.ai/webapi/mrc/user_feedback' \
--header 'API-KEY: YOUR_API_KEY' \
-d '{
    "query": "왜 머신 러닝을 사용하나?",
    "answer": "However, this is rarely robust to natural language variation.\nSince the so-called \"statistical revolution\"[11][12] in the late 1980s and mid 1990s, much natural language processing research has relied heavily on machine learning.\nThe machine-learning paradigm calls instead for using statistical inference to automatically learn such rules through the analysis of large corpora of typical real-world examples (a corpus (plural, \"corpora\") is a set of documents, possibly with human or computer annotations).\nMany different classes of machine-learning algorithms have been applied to natural-language-processing tasks.\nThese algorithms take as input a large set of \"features\" that are generated from the input data.\n— From Natural language processing wiki (13).docx",
    "answerHash": "9108b12d0e2202fc39846bdeb9d2313b",
    "id": "S25vd2xlZGdlQmEuiTo2MDIxOTg3ZmekmDZmZTE0YTk4NjA2ZDU=",
    "positive": true
}'

Response Example

{
    "result": {
        "userFeedback": {
            "positiveCount": 1,
            "negativeCount": 0
        }
    }
}

Documents 업로드

POST https://backend.alli.ai/webapi/upload_file

이 API를 사용하면 로컬 저장공간에서 Cognitive Search 에 사용할 문서를 업로드할 수 있습니다. PDF, TXT, MS 워드, 파워포인트 엑셀, HTM 및 HTML 파일을 업로드할 수 있습니다. 연결된 리소스와 함께 HTML 파일을 업로드하려면 관련된 링크가 포함된 ZIP 파일을 업로드하면 됩니다.

Headers

Request Body

{
    "result": {
        "id": "DOCUMENT_ID",
        "fileName": "YOUR_FILE_NAME",
        "hashtags": [
            "HASHTAG_1",
            "HASHTAG_2"
        ],
        "footer": "FOOTER_IN_HTML"
    }
}

Request Example

/location/to/your_file는 로컬에 저장된 파일 경로로, YOUR HASH TAG 는 원하는 해시태그로 바꾸어야 합니다.

YOUR API KEY 프로젝트의 API 키로 바꾸어야 합니다. API 키 얻기 항목을 참고하세요.

curl -F 'file=@"/location/to/your_file"' \
-F 'hashtags="[\"api1\", \"api2\"]"' \
-F 'footerUrl="www.allganize.ai"' \
-F 'footerTitle="Allganize 웹사이트"' \
-F 'folder="folder 1"' \
-F 'followFolderPermission=false' \
-F 'agentViewer="[\"agent@allganize.io\"]"' \
-F 'userViewer="{
      \"variables\": {
      \"CUSTOMER_ID\": [\"customer_1\"],
      \"CUSTOMER_GROUP\": [\"Q2F0ZWdvcnlFbGVtZW5OAjYzNzkyZDY1NWM5ZDIxMTU5NDMwZDY1OA==\"]
        }
    }"' \
-H 'API-KEY: YOUR_API_KEY' https://backend.alli.ai/webapi/upload_file
    

Response Example

{
    "result": {
        "id": "S25vd2xlZGdlQmA23To2MGJjIsjA1YjM1Nz9iRc1YWIzYjA1ODk=",
        "fileName": "판매정보.docx",
        "hashtags": [
            "api1",
            "api2"
        ],
        "footer": "{\"blocks\": [{\"key\": \"oio7\", \"text\": \"— From ocr_en.png\", \"type\": \"unstyled\", \"depth\": 0, \"inlineStyleRanges\": [{\"offset\": 0, \"length\": 17, \"style\": \"ITALIC\"}], \"entityRanges\": [{\"offset\": 7, \"length\": 10, \"key\": 0}], \"data\": {}}], \"entityMap\": {\"0\": {\"type\": \"LINK\", \"mutability\": \"MUTABLE\", \"data\": {\"url\": \"https://download.alli.ai/download_document/UHJvamUiddDo1ZGMxYmI1qwe0ZTk0YWNmMmY5MjRlMzU=/S12vd2xlZGdlQmFzZTo2MGJijef1YjM1Nzc4NTc1YWIzYjA1ODk=\"}}}}",
        "folder": "folder 1", 
        "agentEditor": ["admin_1@allganize.ai", "admin_2@allganize.ai"], 
        "agentViewer": ["viewer_email@allganize.ai"],
        "allowOtherAgentsView": true,
        "allowOtherUsersView": true, 
        "properties": {}
    }
}

Upload Documents from S3

POST https://backend.alli.ai/webapi/upload_from_s3

이 API 를 이용하면 S3 에 저장된 문서를 가져와 Cognitive Search 에서 사용할 수 있습니다. 불러온 문서는 대시보드의 지식 베이스 아래 문서 탭에 등록됩니다. PDF, TXT, MS 워드, 파워포인트 엑셀, HTM 및 HTML 파일을 불러올 수 있습니다.

Headers

Request Body

{
    "result": {
        "id": "S25vd2xlZGdlQmA23To2MGJjIsjA1YjM1Nz9iRc1YWIzYjA1ODk=",
        "fileName": "판매정보.docx",
        "hashtags": [
            "api1",
            "api2"
        ],
        "footer": "{\"blocks\": [{\"key\": \"oio7\", \"text\": \"— From ocr_en.png\", \"type\": \"unstyled\", \"depth\": 0, \"inlineStyleRanges\": [{\"offset\": 0, \"length\": 17, \"style\": \"ITALIC\"}], \"entityRanges\": [{\"offset\": 7, \"length\": 10, \"key\": 0}], \"data\": {}}], \"entityMap\": {\"0\": {\"type\": \"LINK\", \"mutability\": \"MUTABLE\", \"data\": {\"url\": \"https://download.alli.ai/download_document/UHJvamUiddDo1ZGMxYmI1qwe0ZTk0YWNmMmY5MjRlMzU=/S12vd2xlZGdlQmFzZTo2MGJijef1YjM1Nzc4NTc1YWIzYjA1ODk=\"}}}}",
        "folder": null,
        "agentEditor": [
            "agent1@allganize.io"
        ],
        "agentViewer": [],
        "userViewer": {
            "variables": {
                "CUSTOMER_ID": [
                    {
                        "id": "new_user_1",
                        "value": "new_user_1"
                    }
                ],
                "CUSTOMER_GROUP": [
                    {
                        "id": "Q2F0ZWdvcnlFbGVtZW50OjYzNdf2MjU0OWU4OTM4N2IzMTkxN2Y0ZA==",
                        "value": "group_1"
                    },
                    {
                        "id": "Q2F0ZWdvcnlFbGVtZW50OjYzNziymRU1Nzg4YWFmODVjZTU1YjVkMg==",
                        "value": "group_2"
                    }
                ]
            }
        },
        "allowOtherAgentsView": true,
        "allowOtherUsersView": false,
        "properties": {}
    }