RPA dialogflow을 활용한 챗봇 서버

Description

RPA 기술을 활용하여 항공권 구매, 물품 구매와 같은 프로세스를 자동화하여 챗봇을 통해 사용자에게 편의 서비스를 제공하는 플랫폼이다.

Collaborators

Motivation

  • RPA 로그인, 상품 검색, 주문, 등의 과정은 어떠한 상품을 구매하는 과정에서 모든 사람들이 수행하는 공통된 로직이다. 이를 RPA(Robotic Process Automation)기술을 활용해서 자동화하게 되면 사용자는 자신이 원하는 상품 검색 만으로 해당 상품을 구매할 수 있습니다. 이렇게 하여 무의미하게 중복되는 반복되는 과정을 로봇으로 대체하므로써 사용자의 편의성을 추구할 수 있다.

  • Dialogflow 딥러닝, NLP와 같은 인공 지능 기반 기술이 계속해서 성장하므로써 챗봇을 활용한 플래폼을 활용하는 사례가 늘어나고 있다. 챗봇에서 가장 중요한 개념인 자연어 처리는 사람의 말을 이해해서, 그 안에 들어 있는 의도(intent)을 분석해서 의도에 맞는 프로세스를 처리하는 것이다. 이러한 챗봇을 구성하는 방법 중에 하나로 DialogFlow을 활용하였다. Dialogflow는 다양한 템플릿을 제공해서 서비스 목적에 맞는 템플릿을 활용하여 빠른 구축이 가능하고 , 효율적인 ML 동작을 통해 동작하며 slack, skype, line과 같은 다양한 플랫폼과 연동되어서 활용이 가능하다는 장점이 있다.

Contents

  • Web Server
    • Flask Server
  • RPA
    • 항공권 구매 프로세스
    • 물품 구매 프로세스
  • Dialogflow

Development Environment

  • python
    • flask
  • dialogflow api(v2)
  • rpa
    • UiPath Studio

Specifications

Flask Server

Dialogflow 와 UiPath Server 을 서로 연결하는 가벼운 웹훅 서버를 활용하기 위해 Django 대신 Flask Server을 활용한다. Dialogflow와 RPA API를 서로 연동하기 위한 중간 서버로 Flask Server을 구성하였다. Dialogflow에서 뽑아온 intent을 바탕으로 uipath rpa server에 해당 작업을 요청한다.

RPA Orchestration Server

class Orchestrator:
    token = None
    startJobs = ''
    Jobs = ''

    def __init__(self, tenant, user, password, url='https://platform.uipath.com/'):
        self.url = url
        self.token = self.__getToken(tenant, user, password)
        self.startJobs = 'odata/Jobs/UiPath.Server.Configuration.OData.StartJobs'
        self.Jobs = 'odata/Jobs'


    def __getToken(self, tenant, user, password):
        res = self.request('POST', 'api/account/authenticate',
                           {'tenancyName': tenant,
                            'usernameOrEmailAddress': user,
                            'password': password})
        print(res)
        return res["result"]

Uipath 서버와 우선 id, pw, tenant을 기반으로 인증을 진행한다.

작업 요청

def request(self, type, extension, body=None):
    uri = self.url + extension
    headers = self.__getHeaders(extension)

    response = requests.request(type.upper(), uri, data=body, headers=headers)

    return response.json()

인증을 기반으로 생성된 토큰을 활용해서 작업(RPA)을 요청한다.

Line Notify

if intent == 'KoreanAirSearch':
    input = json.loads(datas["InputArguments"])
    output = json.loads(datas["OutputArguments"])
    departure_data = output["Departure_Data"]
    arrival_data = output["Arrival_Data"]
    location = [input['start'], input['finish']]
    result_string = location[0] + '->' + location[1] + '\n\r'

    for i in range(len(departure_data)):
        result_string = result_string + str(i) + ':' + departure_data[i] + '\n\r'
    result_string = {'message': result_string}
    response = requests.request(method='POST',
                                url='https://notify-api.line.me/api/notify',
                                data=result_string,
                                headers=headers
                                )
    result_string = location[1] + '->' + location[0] + '\n\r'
    for i in range(len(arrival_data)):
        result_string = result_string + str(i) + ':' + arrival_data[i] + '\n\r'
    result_string = {'message': result_string}
    response = requests.request(method='POST',
                                url='https://notify-api.line.me/api/notify',
                                data=result_string,
                                headers=headers
                                )

라인 알림 API를 통해 RPA를 통해 조회된 항공권 목록을 JSON 형태로 구성해서 전달한다.

Flight Ticket Purchase

사용자가 예약하고자하는 여행경로를 물어본다. 출발지, 목적지, 출발일자, 도착일자, 등의 항공권 관련 정보를 파악해서 이를 기반으로 예약할 수 있는 항공권 리스트를 추출해서 사용자에게 보여준 다음 사용자가 선택한 항공권 예매를 진행한다. 이때, 사용자의 여행 편의를 위해 해당 도착지의 환율 정보, 날씨 정보, 관광정보와 같은 부가 서비스를 제공한다.

Dialogflow Flowchart

korean_air_purchase_dialogflow

RPA

korean_air_purchase_rpa

Result

korean_air_purchase_result

Item Purchase

11번가에서 필요한 상품을 구매서비스를 제공한다. Chatbot을 통해 추출된 물품의 종류를 바탕으로 11번가에서 검색하여 사용자에게 물품 리스트를 보여주고 사용자가 선택한 물품 구매를 진행한다.

Flowchart

item_purchase_flow_chart

Result

korean_air_purchase_result korean_air_purchase_result

Results

댓글남기기