コード例 #1
0
ファイル: HC_190101.py プロジェクト: hakseongkim/hakseong
 def OpenSkill(self, request, context):
     print "OpenSkill start"
     print 'Open request: ' + str(request)
     session_id = request.session.id
     print 'open_session_data: ' + str(session_id) + ', ' + str(context)
     result = talk_pb2.TalkResponse()
     print 'OpenSkill end'
     return result
コード例 #2
0
 def OpenSkill(self, request, context):
     print "OpenSkill start"
     #logger.debug('Open request %s', request)
     print 'Open request: '+str(request)
     session_id = request.session.id
     #logger.debug('open_session_data %s %s', session_id, context)
     print 'open_session_data: '+ str(session_id)+', '+str(context)
     result = talk_pb2.TalkResponse()
     print 'OpenSkill end'
     return result
コード例 #3
0
ファイル: HC_190101.py プロジェクト: hakseongkim/hakseong
    def OpenSession(self, request, context):
        print "openSession"

        #param = {}
        #bizRes = {}
        lectureInfo = {}
        resMessage = 'success'
        meta = ''
        lectureNum = ''
        session_id = request.session.id
        #self.showKeyValue(context.invocation_metadata())

        if 'meta' in request.utter.meta:
            #meta = eval(request.utter.meta['meta'].replace('null','\"\"'))
            meta = request.utter.meta['meta']

            if 'intent' in meta:
                slots = meta['intent']['slots']
                if 'lectureNumber' in slots:
                    lectureNum = slots['lectureNumber']['value']

        #requestParam = Common.setMetaToParamMap(lectureNum=lectureNum,userTalk=' ' ,request=request, isopenRequest=True,session_id=session_id)
        localSessionObj = session_id
        print 'OpenSession id: ' + str(request.session.id)

        result = talk_pb2.TalkResponse()
        res_meta = struct.Struct()
        #res_meta['response'] = bizRes
        result.response.meta.CopyFrom(res_meta)

        #session 정보 ,session data 10k
        result.response.session_update.id = session_id
        res_context = struct.Struct()
        res_context['session_data'] = str(lectureInfo)
        result.response.session_update.context.CopyFrom(res_context)

        print 'OpenSession_'
        return result
コード例 #4
0
    def Talk(self, talk, context):
        # Setting
        qna = dy.DA_Talk(question=talk.utter.utter)
        qna.session_id = talk.session.id    # SDS에 필요
        qna.model = 'Happy_Call_HH'           # SDS에 필요
        qna.skill_id = 7                    # BQA에 필요
        qna.com_id = 7                      # NGRAM에 필요

        # QA 진행 순서
        qna.call_bqa_exact()    # Exact Matching
        qna.call_ngram()        # NGRAM
        qna.call_bqa_1st()      # 1차검색
        qna.call_bqa_2nd()      # 2차검색
        qna.code_to_text()      # BQA CODE -> Text
        if qna.flag == False:
            qna.answer = self.get_unknown_msg()                 # Unknown 답변 넘겨주기
        qna.answer = self.ending_word(qna.answer, qna.engine)   # 답변 뒤에 '입니다.' 붙이기

        # 답변 설정
        original_answer = qna.answer                            # 챗봇 답변 받아와서 저장
        original_answer = self.filtering(qna.question, original_answer)           # 바보, 멍청이 등 입력 시 처리 
        output = original_answer.replace('\n', '$$NL$$').replace('\\n', '$$NL$$')   # 줄바꿈 변경
        talk_res = talk_pb2.TalkResponse()                      # talk_res 선언
        talk_res.response.speech.utter = output                 # 답변 저장
        qna.chat_log(chatbot=talk.chatbot, device=talk.system_context.device.id)    # CHAT_LOG (채팅 로그)
        talk_res.response.speech.utter += "$$HB_S$$위치,소개서,영상$$HB_F$$"        # 가로버튼 추가
        qna.print_result()                                      # 결과 콘솔 출력

        phoneto = '01084520997'
        phonefrom = '01084520997'
        phonetext = talk_res.response.speech.utter

        print ("문자메세지 발송 시작!")
        self.phonemsg = phonemsg.phonemsg()
        self.phonemsg.phonemsg(phoneto, phonefrom, phonetext)
        print("문자메세지 발송 완료!")

        return talk_res
コード例 #5
0
    def Talk(self, talk, context):

        a = {}

        ##m2u으로 시작
        talk.utter.utter = talk.utter.utter + ";$callSeq=93$call_Id=3004"
        print("talk : ", talk.utter.utter)
        #seq = talk.utter.utter[talk.utter.utter.index(";$callSeq")+10:talk.utter.utter.index(";$callSeq")+11]
        seq = talk.utter.utter[talk.utter.utter.index(";$callSeq")+10:talk.utter.utter.index("$call_")]
        call_id = talk.utter.utter[talk.utter.utter.index("$call_Id")+9:]
        print("", str(seq) + "," + str(call_id))
#        phoneNum = self.DBConnect("select cust_tel_no,session_reset from campaign_target_list_tb where contract_no = '" + seq + "';")
#        reset_count = phoneNum[0]['session_reset']
#        phoneNum = phoneNum[0]['cust_tel_no']
#        if reset_count == '1':
#            pass
#        else:
#            self.DBConnect("update campaign_target_list_tb set session_reset='1' where contract_no = '" + seq + "';")
#            self.DBConnect("update task_logic set PRIVACY1=0, task1=0,task2=0,task3=0,task4=0,task5=0,task6=0,task7=0,task8=0,task9=0,task9_1=0,PRIVACY1_1=0,PRIVACY2=0,privacy1_1affirm=0,time=0,timeaffirm=0 where contract_no = "+seq+";")
#            task_list = ['task1','task2','PRIVACY1','time','timeAffirm','task3','task4']
#            sql_args = list()
#            for i in task_list:
#                seq_id_db = self.DBConnect("select seq from hc_hh_campaign_info where camp_id=2 and task = '" + i + "';")
#                #print (camp_id_db)
#                seq_id = str(seq_id_db[0]['seq'])
#                sql_args.append((call_id, seq, seq_id, i))
#                #self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('"+call_id+"','"+seq+"','"+seq_id+"','"+i +"',null);")
#            self.db_dml("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ( %s, %s, %s, %s, null);", sql_args)
            
        uttertext = talk.utter.utter[talk.utter.utter.find(";$callSeq"):]
        talk.utter.utter = talk.utter.utter.replace(uttertext,"")

        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        print("talk : ", talk.utter.utter)
        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
       
        # SDS.dp.slots["product_code"] = "A"
        session_id = talk.session.id
        dbsession = self.DBConnect("select session_value,cust_tel_no,cust_nm,join_time,talk_time,insured_contractor,insured_person,insured_closeproduct,address_main,address_sub,product_code1, product_code2, product_code3, cust_ssn, prod_name,camp_id from campaign_target_list_tb where contract_no = '" + seq + "';")
        # cust_nm 통화자(가입자)
        # join_time 전체 시간 호출
        # join_month 가입 월
        # join_day 가입 일
        # insurance_contractor 가입 계약자
        # insurance_insured 가입 피보험자
        # insurance_closeproduct 무해지상품 가입여부
        # address_main 메인주소
        # address_sub 세부주소
        
        phone = dbsession[0]['cust_tel_no']
        user_name = dbsession[0]['cust_nm']

        join_time = dbsession[0]['join_time']
        print ("join_time : " + str(join_time))
        join_strp = datetime.datetime.strptime(str(join_time), '%Y-%m-%d %H:%M:%S')
        join_month = join_strp.month
        join_day = join_strp.day

        talk_time = dbsession[0]['talk_time']
        talk_strp = datetime.datetime.strptime(str(talk_time), '%Y-%m-%d %H:%M:%S')
        talk_month = talk_strp.month
        talk_day = talk_strp.day
        talk_hour = talk_strp.hour
        talk_minute = talk_strp.minute

        insured_contractor = dbsession[0]['insured_contractor']
        insured_person = dbsession[0]['insured_person']
        insured_closeproduct = dbsession[0]['insured_closeproduct']
        privacy_add1 = dbsession[0]['address_main']
        privacy_add2 = dbsession[0]['address_sub']
        product_code1 = dbsession[0]['product_code1']
        product_code2 = dbsession[0]['product_code2']
        product_code3 = dbsession[0]['product_code3']
        prod_name = dbsession[0]['prod_name']
        prod_name = '무배당 게속받는 암보험'
        cust_ssn = dbsession[0]['cust_ssn']
        camp_id = dbsession[0]['camp_id']
        cust_ssn = cust_ssn[0:6]

        ##세션 고정 시키기
#        if dbsession[0]['session_value'] is None:
#            dbsessioncode = talk.session.id
#            self.DBConnect("update campaign_target_list_tb set session_value = '" + str(dbsessioncode) + "' where contract_no = '" + seq + "';")
#            session_id = dbsessioncode
#        else:
#            session_id = int(dbsession[0]['session_value'])

        talk_res = talk_pb2.TalkResponse()


        #question = talk.utter.utter
        meta = dict()
        #meta['seq_id'] = util.time_check(0)
        meta['log_type'] = 'SVC'
        meta['svc_name'] = 'DA'

        #output = ""
        original_answer = ""
        engine_path = list()
        answer_engine = "None"
        status_code = ""
        status_message = ""
        flag = False
        weight = 0
        code = 'None'
        sds_intent = ""
        unknown_count = 0

#        # SDS
        dbtask = self.DBConnect("select task from campaign_target_list_tb where contract_no = '" + seq + "';")
        task = dbtask[0]['task']
        sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
#        if sds_res['current_task'] == 'task2':
#            dic = dict(talk.session.context)
#            count_dic = json.loads(dic.get('count'))
#
#            print(count_dic)
#            count_dic[0]['task1'] = "5555"
#            session_data = struct.Struct()
#            session_data['id'] = talk.session.id
#            session_data['count'] = count_dic
#            talk_res.response.session_update.context.CopyFrom(session_data)
#        elif sds_res['current_task'] == 'task3':
#            print("$" * 70)
#            print(dict(talk.session.context))
#            print("$" * 70)
##            count_dic = json.loads(dict(talk.session.context).get('count'))
#            dic = json.loads(MessageToJson(talk.session.context))
#            print(dic)
#            count_dic = dic.get('count')[0].get('task1')
##            print(count_dic[0].get('task1'))
#            print(count_dic)
        if sds_res['current_task'] == 'task2':
#            dic = dict(talk.session.context)
#            dic['task1'] = '5555'
#
#            print(dic)
#            session_data = struct.Struct()
#            session_data['id'] = talk.session.id
#            session_data = dic

            session_data = talk.session.context
            session_data['id'] = talk.session.id
            session_data['task1'] = '5555'
            print(session_data)
            talk_res.response.session_update.context.CopyFrom(session_data)
        elif sds_res['current_task'] == 'task3':
            print("$" * 70)
            print(dict(talk.session.context))
            print("$" * 70)
#            count_dic = json.loads(dict(talk.session.context).get('count'))
            dic = json.loads(MessageToJson(talk.session.context))
            print(dic)
            count_dic = dic.get('count')[0].get('task1')
#            print(count_dic[0].get('task1'))
            print(count_dic)
            
            






        task_list = ['task1','task2','task3','task4','task5','PRIVACY1','PRIVACY2']
        for i in task_list:
          if sds_res['current_task'] == i:
              sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
              session_data = talk.session.context
              session_count = int(session_data[i])
#              dic = json.loads(MessageToJson(talk.session.context))
#              print(dic.get('count')[0])
#              print(type(dic.get('count')[0]))
#              session_count  = dic.get('count')[0].get(i)
#              session_count = int(session_count)
        

#              DBcount = self.DBConnect("select "+i+" from task_logic where contract_no = '" + seq  + "';")
#              count = DBcount[0][i]
              if sds_intent == 'unknown' or sds_intent == 'again':
#                  DBcount = self.DBConnect("select "+i+" from task_logic where contract_no = '" + seq  + "';")
#                  count = DBcount[0][i]
                  session_count = session_count + 1
                  session_data[i] = session_count
                  print('**************************' + str(session_data[i]))
                  talk_res.response.session_update.context.CopyFrom(session_data)
                  #dic = json.loads(MessageToJson(talk.session.context))
                  #count_dic = dic.get('count')[0].get(i)
#                  session_data = struct.Struct()
#                  session_data['id'] = talk.session.id
#                  session_data['count'] = 
#                  talk_res.response.session_update.context.CopyFrom(session_data)

#                  self.DBConnect("update task_logic set "+i+"='"+str(count)+"' where contract_no = '" + seq + "';")
                  if int(session_count) >= 2:
                      seq_id_db = self.DBConnect("select seq from hc_hh_campaign_info where task = '" + sds_res['current_task'] + "';")
                      #print (camp_id_db)
                      seq_id = str(seq_id_db[0]['seq'])
                      talk.utter.utter = "$"+i+"$"
                      self.DBConnect("update hc_hh_campaign_score set task_value = '모름' where contract_no = '" +seq+ "' and info_task = '"+ task +"';")
                     # self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('"+call_id+"','"+seq+"','"+seq_id+"','"+sds_res['current_task'] +"','모름')");
                      self.DBConnect("update campaign_target_list_tb set task='"+sds_res['current_task']+"' where contract_no = '" + seq + "';")
                      #unknown_count = 1
                 
                      sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)


        #sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)

        #self.DBConnect("update test set task='" + sds_res['current_task'] + "' where contract_no = '" + seq + "';")
        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        print("sds_intent의 값 : " + str(sds_intent))

        # 결과값 DB에 저장하는 방식
        b = []
        b.append("time")
        b.append("timeAffirm")
        b.append("timeEnd")
        for i in range(1, 15):
            b.append("task" + str(i))
        for i in range(1, 4):
            b.append("PRIVACY" + str(i))


        if task in b:
            seq_id_db = self.DBConnect("select seq from hc_hh_campaign_info where camp_id = '"+str(camp_id)+"' and task = '" + task  + "';")
         #   print (camp_id_db)
            seq_id = str(seq_id_db[0]['seq'])
            if sds_intent == 'affirm':
                self.DBConnect("update hc_hh_campaign_score set task_value = 'Y' where contract_no = '" +seq+ "' and info_task = '"+ task +"';")
            elif sds_intent == 'negate':
                self.DBConnect("update hc_hh_campaign_score set task_value = 'N' where contract_no = '" +seq+ "' and info_task = '"+ task +"';")
            elif sds_intent == 'overlap' or sds_intent == 'noproportion':
                self.DBConnect("update hc_hh_campaign_score set task_value = '중복' where contract_no = '" +seq+ "' and info_task = '"+ task +"';")
            elif sds_intent == 'nooverlap' or sds_intent == 'proportion':
                self.DBConnect("update hc_hh_campaign_score set task_value = '비례' where contract_no = '" +seq+ "' and info_task = '"+ task +"';")
            elif sds_intent == 'unknown' or sds_intent == 'again':
                pass
            elif unknown_count == 1:
                pass
            else:
                if task == 'PRIVACY1' or task == 'time':
                    self.DBConnect("update hc_hh_campaign_score set task_value = '입력' where contract_no = '" +seq+ "' and info_task = '"+ task +"';")

        self.DBConnect("update campaign_target_list_tb set task='"+ sds_res['current_task'] + "' where contract_no = '" + seq + "';")

        print("SDS Start!")

        original_answer = sds_res['response']
        answer_engine = "SDS"
        engine_path.append("SDS")

        #original_answer = self.unknown_answer()
        #첫 SDS 답변 입력사항
        original_answer = sds_res['response']
        talk_res.response.speech.utter = original_answer

        #시간 테스트
        #talk_time = dbsession[0]['talk_time']
        #talk_strp = datetime.datetime.strptime(talk_time, '%Y-%m-%d %H:%M:%S')
        #talk_month = talk_strp.month
        #talk_day = talk_strp.day
        #talk_hour = talk_strp.hour
        #talk_minute = talk_strp.minute



       #시간 컨펌
        a['nextweek'] = ""
        a['morae'] = ""
        a['tomorrow'] = ""
        a['today'] = ""
        a['day'] = ""
        a['part'] = ""
        a['hour'] = ""
        a['minute'] = ""
        a['input_month'] = ""
        a['input_day'] = ""
        a['input_year'] = ""
        a['input_six'] = ""

        if sds_res['current_task'] == 'timeAffirm':
            items = sds_res['intent.filled_slots.items']
            print(items)
            for id in items:
                a[id[0]] = id[1]
                print(id)
            if a['input_year'] == "" : input_year = ""
            else: input_year = a['input_year']
            if a['nextweek'] == "" : slot_nextweek = ""
            elif a['nextweek'] == '돌아오는' : slot_nextweek = "다음" 
            else: slot_nextweek = a['nextweek']
            if a['morae'] == "" : slot_morae = ""
            else: slot_morae = a['morae']
            if a['input_month'] == "" : slot_input_month = ""
            else: slot_input_month = a['input_month']
            if a['input_day'] == "" : slot_input_day = ""
            else: slot_input_day = a['input_day']
            if a['tomorrow'] == "" : slot_tomorrow = ""
            else: slot_tomorrow = a['tomorrow']
            if a['today'] == "" : slot_today = ""
            else: slot_today = a['today']
            if a['day'] == "" : slot_day = ""
            else: slot_day = a['day']
            if a['part'] == "" : slot_part = ""
            elif a['part'] == '저녁' or  a['part'] == '밤': slot_part = "오후" 
            elif a['part'] == '아침' or  a['part'] == '새벽': slot_part = "오전" 
            else: slot_part = a['part']
            if a['hour'] == "" : slot_hour = ""
            else: slot_hour = a['hour']
            if a['minute'] == "" : slot_minute = ""
            elif a['minute'] == "반": slot_minute = "30"
            else: slot_minute = a['minute']
            ### 시를 수정하는 로직
            print ('첫번쨰 시 출력' + str(slot_hour))
            re_input = str(slot_hour)
            re_input = re_input.replace(' ','')
            re_input = re_input.replace('시','')
#           sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
            slot_hour = self.func.convert_time(re_input)


            print ('두번쨰 시 출력' + str(slot_hour))
#            slot_hour = int(slot_hour)
            ### 분를 수정하는 로직
            re_input = str(slot_minute)
            print ('들어온 분은 : '+ str(slot_minute))
            re_input = re_input.replace(' ','')
            re_input = re_input.replace('분','')
            slot_minute = self.func.convert_time(re_input)
            
            ############ 결과 값 받기
            (next_time, next_month, next_day, next_part, next_hour, next_minute) = \
            self.func.next_call_schedule(slot_nextweek, slot_morae, slot_input_month,\
            slot_input_day, slot_tomorrow, slot_today, slot_day, slot_part,slot_hour, slot_minute)



        if sds_res['current_task'] == 'timeAffirm':
            if talk.utter.utter == "$hourMiss$" or talk.utter.utter == "$dayMiss$":
                print("dcdddddddddddddddddddddddddddddddddddd")
                sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
            else:
                print("===============test=============")
                print("next_month : " + str(next_month))
                print("next_day : " + str(next_day))
                print("next_part : " + str(next_part))
                print("next_hour : " + str(next_hour))
                print("next_minute : " + str(next_minute))
#                print("===============test=============")
                if int(next_minute) == 0 or next_minute == '':
                        talk_res.response.speech.utter = "말씀하신 통화가능 시간이 " \
                        + self.func.readNumberMinute(next_month) +"월"+ \
                        self.func.readNumberMinute(next_day) + "일 "\
                        +str(next_part) +", " +  self.func.readNumberHour(next_hour) + "시가 맞습니까?"
                else:
                        talk_res.response.speech.utter = "말씀하신 통화가능 시간이 " \
                        + self.func.readNumberMinute(next_month) +"월"\
                        + self.func.readNumberMinute(next_day) + "일 "+str(next_part) +", " \
                        + self.func.readNumberHour(next_hour) + "시 "\
                        + self.func.readNumberMinute(next_minute) + "분이 맞습니까?"
                    
                self.DBConnect("update campaign_target_list_tb set next_time='"+str(next_time)+"' where contract_no = '" + seq + "';")

        print ("죄종답변 intent: "+ sds_intent)
        #task1
        if sds_res['current_task'] == 'task1':
            if (sds_intent != 'affirm' and sds_intent != 'negate') and len(talk.utter.utter) >= 15:
                talk_res.response.speech.utter = "통화종료. $unConnected$"
            elif sds_intent == "again":
                talk_res.response.speech.utter = "현대해상 로봇상담원입니다, \
                "+ user_name + "고객님 되시나요?"
            elif sds_intent == 'unknown':
                talk_res.response.speech.utter = "네, 또는 아니오로 답변해주세요,"
            elif sds_intent == 'negate':
                talk_res.response.speech.utter = "죄송합니다. 잘못 연락드렸습니다. \
                오늘도 행복한 하루 보내세요. $callback$"
            elif sds_intent == 'task1':
                talk_res.response.speech.utter = "상담사를 통해 다시 연락드리겠습니다, \
                현대해상 고객센터 였습니다. $callback$"
            else:
                talk_res.response.speech.utter = "안녕하십니까?, 현대해상 로봇상담원입니다. \
                " + user_name + "고객님 되십니까?"
            
        #task2
        if sds_res['current_task'] == 'task2':
            if sds_intent == 'again':
                talk_res.response.speech.utter = "가입하실때. 상품 내용이 제대로 설명되었는지. \
                확인드리고자 연락드렸습니다. 잠시 통화 가능하십니까?"
            elif sds_intent == 'unknown':
                talk_res.response.speech.utter = "네, 또는 아니오로 답변해주세요,"
            elif sds_intent == 'task2':
                talk_res.response.speech.utter = "상담사를 통해 다시 연락드리겠습니다, \
                현대해상 고객센터 였습니다. $callback$"
            else:
                talk_res.response.speech.utter = "네 고객님, 반갑습니다,"\
                + self.func.readNumberMinute(join_month) + "월" \
                + self.func.readNumberMinute(join_day) +"일, \
                저희 현대해상 "+prod_name+"을 가입해 주셔서, 진심으로 감사드립니다. \
                가입하실때, 상품의 중요한 사항이 제대로 설명되었는지,\
                확인드리고자 연락드렸습니다, 소요시간은 약 이분정도인데. 잠시 통화 가능하십니까?"

        #PRIVACY1
        if sds_res['current_task'] == 'PRIVACY1':
            if sds_intent == 'again':
                talk_res.response.speech.utter = "고객님의 성함이, "+ user_name + "고객님 맞으십니까?"
            elif sds_intent == 'unknown':
                talk_res.response.speech.utter = "네, 또는 아니오로 답변해주세요,"
            elif sds_intent == 'negate':
                talk_res.response.speech.utter = "죄송합니다만, 담당자와 통화 후, \
                다시한번 연락을 드리겠습니다, 번거롭게 해드려 죄송합니다. $callback$"
            elif sds_intent == 'privacy':
                talk_res.response.speech.utter = "죄송합니다만, 담당자와 통화 후, \
                다시한번 연락을 드리겠습니다, 번거롭게 해드려 죄송합니다. $callback$"
            else:
                talk_res.response.speech.utter = "지금부터 진행하는 내용은 고객님의\
                권리보호를 위해 녹음되며, 답변하신 내용은 향후 민원 발생시, \
                중요한 근거자료로 활용되오니, 정확한 답변 부탁드리겠습니다. "\
                + user_name + "고객님 맞으십니까"


        # task3
        if sds_res['current_task'] == 'task3':
            if sds_intent == 'again':
                talk_res.response.speech.utter = "계약자와 피보험자가 다른 계약의 경우. \
                피보험자이신 "+ insured_person +" 고객님의 계약체결에 대한 동의가 반드시 필요합니다. \
                자필서명이 정확하게 이루어지지 않은 경우. \
                무효계약으로 고객님께서 불이익을 보실 수 있습니다. \
                고객님께서 청약서에 직접 자필서명을 하셨는지요?"
            elif sds_intent == 'unknown':
                talk_res.response.speech.utter = "네, 또는 아니오로 답변해주세요,"
            else:
                talk_res.response.speech.utter = "확인 감사합니다, 질문은 총 두가지입니다.\
                계약자와 피보험자가 다른 계약의 경우. 피보험자이신 "+ insured_person +".\
                고객님의 계약체결에 대한 동의가 반드시 필요합니다.\
                자필서명이 정확하게 이루어지지 않은 경우. \
                무효계약으로 고객님께서 불이익을 보실 수 있습니다. \
                고객님께서 청약서에 직접 자필서명을 하셨는지요?"

        # task4
        if sds_res['current_task'] == 'task4':
            if sds_intent == 'again':
                talk_res.response.speech.utter = "직업, 건강상태 등 계약전 알릴의무 사항을\
                제대로 알리지 않으면 .향후 보험금 지급이 제한될 수 있는데요,\
                고객님께서 해당 내용을 정확히 확인하고 작성하셨습니까?"
            elif sds_intent == 'unknown':
                talk_res.response.speech.utter = "네, 또는 아니오로 답변해주세요,"
            else:
                talk_res.response.speech.utter = "그러셨군요, 마지막 질문입니다. \
                직업, 건강상태 등 계약전 알릴의무 사항을 제대로 알리지 않으면.\
                향후 보험금 지급이 제한될 수 있는데요, \
                고객님께서 해당 내용을 정확히 확인하고 작성하셨습니까?"

        #time
        if sds_res['current_task'] == 'time':
            if sds_intent == 'again':
                talk_res.response.speech.utter = "통화 가능하신 요일과 시를 말씀해주세요"
            elif sds_intent == 'unknown':
                talk_res.response.speech.utter = "통화 가능하신 요일과 시를 말씀해주세요"
            elif sds_intent == "hourmiss":
                talk_res.response.speech.utter = "통화 가능 시를 말씀해주시지 않았습니다.\
                통화가능 시를 말씀해주세요."
            elif sds_intent == "daymiss":
                talk_res.response.speech.utter = "통화 가능 요일을 말씀해주시지 않았습니다.\
                통화가능 요일을 말씀해주세요."
            else:
                talk_res.response.speech.utter = "그럼 가능하신 시간을 알려주시면 다시 연락드리겠습니다,\
                편하신 요일과 시를, 말씀해주세요"

        #time_end       
        if sds_res['current_task'] == 'timeEnd':
            talk_res.response.speech.utter = "네 고객님, 말씀하신 시간에 다시 연락을 드리겠습니다,\
            현대해상 에이아이상담원 였습니다, 감사합니다. $callback$"
        if sds_res['current_task'] == 'taskEnd':
            #talk_res.response.speech.utter = "네 고객님, 소중한시간 내주셔서 감사합니다. 현대해상 고객센터였습니다. $complete$"
            talk_res.response.speech.utter = "소중한 시간 내주셔서 감사드립니다, 향후 불편하시거나 궁금하신점 있으시면, 담당자나 고객콜센터로 언제든지 연락주시기 바랍니다, 오늘도 행복한 하루 보내세요. $complete$"


        print("[ANSWER]: " + original_answer)
        #print("[SESSION_KEY] :" + )
        print("[ENGINE]: " + answer_engine)

        #위치 전송
        #self.DBConnect("update hc_hh_campaign_score set task='"+ sds_res['current_task'] + "' where contract_no = '" + seq + "';")


        return talk_res
コード例 #6
0
    def OpenSession(self, request, context):
        print "openSession"

        #param = {}
        #bizRes = {}
        lectureInfo = {}
        resMessage = 'success'
        meta = ''
        lectureNum = ''
        session_id = request.session.id
        #self.showKeyValue(context.invocation_metadata())

        if 'meta' in request.utter.meta:
             #meta = eval(request.utter.meta['meta'].replace('null','\"\"'))
             meta = request.utter.meta['meta']

             if 'intent' in meta:
                slots = meta['intent']['slots']
                if 'lectureNumber' in slots:
                    lectureNum = slots['lectureNumber']['value']

        #requestParam = Common.setMetaToParamMap(lectureNum=lectureNum,userTalk=' ' ,request=request, isopenRequest=True,session_id=session_id)
        localSessionObj = session_id
        print 'OpenSession id: '+str(request.session.id)

        result = talk_pb2.TalkResponse()

        res_meta = struct.Struct()
        #res_meta['response'] = bizRes
        result.response.meta.CopyFrom(res_meta)

        #session 정보 ,session data 10k
        result.response.session_update.id = session_id
        res_context = struct.Struct()
        res_context['session_data'] = str(lectureInfo)
        result.response.session_update.context.CopyFrom(res_context)

        ######### 세션 카운트 지정
#        logic_count = (
#                {
#                    "task1" : "0",
#                    "task2" : "0",
#                    "task3" : "0",
#                    "task4" : "0",
#                    "task5" : "0",
#                    "task6" : "0",
#                    "task7" : "0",
#                    "task8" : "0",
#                    "task9" : "0",
#                    "task9_1" : "0",
#                    "time" : "0",
#                    "timeaffirm" : "0",
#                    "PRIVACY1" : "0",
#                    "PRIVACY1_1" : "0",
#                    "privacy1_1affirm" : "0",
#                    "PRIVACY2" : "0"
#                }
#            )
        
        session_data = struct.Struct()
        session_data['id'] = session_id
        session_data['task1'] = '0'
        session_data['task2'] = '0'
        session_data['task3'] = '0'
        session_data['task4'] = '0'
        session_data['task5'] = '0'
        session_data['task6'] = '0'
        session_data['task7'] = '0'
        session_data['task8'] = '0'
        session_data['task9'] = '0'
        session_data['task9_1'] = '0'
        session_data['time'] = '0'
        session_data['timeaffirm'] = '0'
        session_data['PRIVACY1'] = '0'
        session_data['PRIVACY1_1'] = '0'
        session_data['PRIVACY1_1affirm'] = '0'
        session_data['PRIVACY2'] = '0'
        result.response.session_update.context.CopyFrom(session_data)

        print 'OpenSession_'
        return result
コード例 #7
0
    def Talk(self, talk, context):
        #print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        #print(talk)
        #print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        a = {}
        """
        talk.utter.utter : 사용자 발화
        talk_res를 return

        talk_res.response.speech.utter : 챗봇 발화
        """
        #talk.utter.utter = talk.utter.utter + ";$callSeq=6$"
        print("talk : ", talk.utter.utter)
        seq = talk.utter.utter[talk.utter.utter.index(";$callSeq")+10:talk.utter.utter.index(";$callSeq")+11]
        call_id = talk.utter.utter[talk.utter.utter.index("$call_Id")+9:talk.utter.utter.index("$call_Id")+12]
        print("", str(seq) + "," + str(call_id))
        phoneNum = self.DBConnect("select cust_tel_no from campaign_target_list_tb where contract_no = '" + seq + "';")
        phoneNum = phoneNum[0]['cust_tel_no']
        #phoneNum = '01084520997'
        uttertext = talk.utter.utter[talk.utter.utter.find(";$callSeq"):]
        #uttertext = talk.utter.utter[talk.utter.utter.find("$callSeq"):]
        talk.utter.utter = talk.utter.utter.replace(uttertext,"")

        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        print("talk : ", talk.utter.utter)
        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
       
        # SDS.dp.slots["product_code"] = "A"
        #session_id = talk.session.id
        dbsession = self.DBConnect("select session_value,cust_tel_no,cust_nm,join_time,talk_time,insured_contractor,insured_person,insured_closeproduct,address_main,address_sub,product_code,prod_name from campaign_target_list_tb where contract_no = '" + seq + "';")
        # cust_nm 통화자(가입자)
        # join_time 전체 시간 호출
        # join_month 가입 월
        # join_day 가입 일
        # insurance_contractor 가입 계약자
        # insurance_insured 가입 피보험자
        # insurance_closeproduct 무해지상품 가입여부
        # address_main 메인주소
        # address_sub 세부주소
        
        phone = dbsession[0]['cust_tel_no']
        user_name = dbsession[0]['cust_nm']

        join_time = dbsession[0]['join_time']
        print ("join_time : " + str(join_time))
        join_strp = datetime.datetime.strptime(str(join_time), '%Y-%m-%d %H:%M:%S')
        join_month = join_strp.month
        join_day = join_strp.day

        talk_time = dbsession[0]['talk_time']
        talk_strp = datetime.datetime.strptime(str(talk_time), '%Y-%m-%d %H:%M:%S')
        talk_month = talk_strp.month
        talk_day = talk_strp.day
        talk_hour = talk_strp.hour
        talk_minute = talk_strp.minute

        insured_contractor = dbsession[0]['insured_contractor']
        insured_person = dbsession[0]['insured_person']
        insured_closeproduct = dbsession[0]['insured_closeproduct']
        privacy_add1 = dbsession[0]['address_main']
        privacy_add2 = dbsession[0]['address_sub']
        product_code = dbsession[0]['product_code']
        prod_name = dbsession[0]['prod_name']

        if dbsession[0]['session_value'] is None:
            dbsessioncode = talk.session.id
            self.DBConnect("update campaign_target_list_tb set session_value = '" + str(dbsessioncode) + "' where contract_no = '" + seq + "';")
            session_id = dbsessioncode
        else:
            session_id = int(dbsession[0]['session_value'])

        talk_res = talk_pb2.TalkResponse()

        ##초기 모델 설정
        dbsession = self.DBConnect("select model from campaign_target_list_tb where contract_no = '" + seq + "';")
        if dbsession[0]['model'] is None:
            model = "Happy_Call_HH"
        else:
            model = dbsession[0]['model']

        #question = talk.utter.utter
        meta = dict()
        #meta['seq_id'] = util.time_check(0)
        meta['log_type'] = 'SVC'
        meta['svc_name'] = 'DA'

        #output = ""
        original_answer = ""
        engine_path = list()
        answer_engine = "None"
        status_code = ""
        status_message = ""
        flag = False
        weight = 0
        code = 'None'
        sds_intent = ""



                

        # SDS
        dbtask = self.DBConnect("select task from campaign_target_list_tb where contract_no = '" + seq + "';")
        task = dbtask[0]['task']
        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        if task == 'task2' and sds_intent == "affirm":
            print("성공11111")
            sds_res = self.Sds.Talk(talk.utter.utter, session_id, model, product_code)
            self.DBConnect("update campaign_target_list_tb set model='privacy' where contract_no = '" + seq + "';")
            model = 'privacy'

        #입력받는 주소를 여기다가 처리를 해줘야함
        if task == 'PRIVACY2' and sds_intent == "affirm":
            print("성공22222")
            print("g")
            talk.utter.utter = '$next$'
            self.DBConnect("update campaign_target_list_tb set model='Happy_Call_HH' where contract_no = '" + seq + "';")
            model = 'Happy_Call_HH'
        if task == 'PRIVACY3' and sds_intent == "privacy3":
            print("성공333333")
            self.DBConnect("update campaign_target_list_tb set model='Happy_Call_HH' where contract_no = '" + seq + "';")
            model = 'Happy_Call_HH'


        sds_res = self.Sds.Talk(talk.utter.utter, session_id, model, product_code)

        #self.DBConnect("update test set task='" + sds_res['current_task'] + "' where contract_no = '" + seq + "';")
        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        print("sds_intent의 값 : " + str(sds_intent))

        # 결과값 DB에 저장하는 방식
        b = []
        b.append("time")
        b.append("timeAffirm")
        b.append("timeEnd")
        for i in range(1, 15):
            b.append("task" + str(i))
        for i in range(1, 4):
            b.append("PRIVACY" + str(i))


        if task in b:
            camp_id_db = self.DBConnect("select camp_id from hc_hh_campaign_info where task = '" + task  + "';")
            print (camp_id_db)
            camp_id = str(camp_id_db[0]['camp_id'])
            call_id_db = self.DBConnect("select camp_id from hc_hh_campaign_info where task = '" + task  + "';")
            print (camp_id_db)
            camp_id = str(camp_id_db[0]['camp_id'])
            if sds_intent == 'affirm':
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('"+call_id+"','"+seq+"','"+camp_id+"','"+task +"','Y')");
            elif sds_intent == 'negate':
                #self.DBConnect("update campaign_target_list_tb set " + task + "='아니오' where contract_no = '" + seq + "';")
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('"+call_id+"','"+seq+"','"+camp_id+"','"+task +"','N')");
            elif sds_intent == 'overlap' or sds_intent == 'noproportion':
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('"+call_id+"','"+seq+"','"+camp_id+"','"+task +"','중복')")    ;
            elif sds_intent == 'nooverlap' or sds_intent == 'proportion':
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('"+call_id+"','"+seq+"','"+camp_id+"','"+task +"','비례')")    ;
            else:
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('"+call_id+"','"+seq+"','"+camp_id+"','"+task +"','입력')")    ;
            #    self.DBConnect("update hc_hh_campaign_score set " + task + "='"+talk.utter.utter+"' where contract_no = '" + seq + "';")

       #디비 이관 전 작업하던더
       #if task is not None or sds_intent != 'next':
           #self.DBConnect("insert into hc_hh_1_result (phone, user_name, session_name, model, task, utter, intent, request_time) values('" + str(phone) + "','" + user_name + "','" + str(session_id) + "','" + model + "','" + str(task) + "','" + talk.utter.utter + "','" + sds_intent + "',NOW());")

        #if sds_res['current_task'] == "timeEnd" and sds_res['intent'] == "affirm":
        #현재 위치를 저장하는 로직
        self.DBConnect("update campaign_target_list_tb set task='"+ sds_res['current_task'] + "' where contract_no = '" + seq + "';")

        print("SDS Start!")
        #dbtask = self.DBConnect("select task from test where contract_no = '" + seq + "';")
        #task = dbtask[0]['task']

        #print("++++++++++++++++taskname : " + sds_res['current_task'] + "intent : " + dialog_act)


        #그렇다면 넘어가는 로직을 여기다가 잡아놔야 할 것 같음
        # 값을 append에 포함되지 않을 경우, 해당로직을 건너 뛰는 것으로...

        # SDS
        dbtask = self.DBConnect("select task from campaign_target_list_tb where contract_no = '" + seq + "';")
        task = dbtask[0]['task']
        if task == 'task4' and insured_contractor == insured_person:
            talk.utter.utter = "$task4$"
            self.DBConnect("update campaign_target_list_tb set task='task5' where contract_no = '" + seq + "';")
            sds_res = self.Sds.Talk(talk.utter.utter, session_id, model, product_code)

        sds_list = []
#        tasknumber = task.find('task':)
        if product_code == 'b': 
            sds_list.append(9)
            sds_list.append(11)
            #sds_list.append(13)
#        if product_code == 'a': sds_list.append(9,10,11,12,13,14)
#        if product_code == 'a': sds_list.append(9,10,11,12,13,14)
        print (sds_list)
        task9_info = ""
        task11_info = ""
        task13_info = ""
        
        if sds_list == []:
            pass
        elif max(sds_list) == 9:
            task9_info = "다음부터 진행되는 질문은 담보문항에 대한 질문입니다."
        elif max(sds_list) == 11:
            task11_info = "다음부터 진행되는 질문은 담보문항에 대한 질문입니다."
        elif max(sds_list) == 13:
            task13_info = "다음부터 진행되는 질문은 담보문항에 대한 질문입니다."
        for sds_temp in sds_list:
            dbtask = self.DBConnect("select task from campaign_target_list_tb where contract_no = '" + seq + "';")
            task = dbtask[0]['task']
            if task is None or task == "":
                tasknumber = ""
            else:
                tasknumber = task[4:]
                print("tasknumber, sds_temp : "+tasknumber + str(sds_temp))
                if tasknumber == str(sds_temp):
                    talk.utter.utter = "$task"+ str(sds_temp) +"$"
                    print("utter가 들어간 값은 : " + talk.utter.utter)
                    self.DBConnect("update campaign_target_list_tb set task='task"+str(sds_temp+1)+"' where contract_no = '" + seq + "';")
                    sds_res = self.Sds.Talk(talk.utter.utter, session_id, model, product_code)
                    if tasknumber == 13:
                        pass
                    else:
                        talk.utter.utter = "$task"+ str(sds_temp+1) +"$"
                        print("utter가 들어간 값은 : " + talk.utter.utter)
                        self.DBConnect("update campaign_target_list_tb set task='task"+str(sds_temp+2)+"' where contract_no = '" + seq + "';")
                        sds_res = self.Sds.Talk(talk.utter.utter, session_id, model, product_code)

        print(sds_res)
        #print("===============test=============")

        original_answer = sds_res['response']
        answer_engine = "SDS"
        engine_path.append("SDS")

        #original_answer = self.unknown_answer()
        #첫 SDS 답변 입력사항
        original_answer = sds_res['response']
        talk_res.response.speech.utter = original_answer

        #시간 테스트
        #talk_time = dbsession[0]['talk_time']
        #talk_strp = datetime.datetime.strptime(talk_time, '%Y-%m-%d %H:%M:%S')
        #talk_month = talk_strp.month
        #talk_day = talk_strp.day
        #talk_hour = talk_strp.hour
        #talk_minute = talk_strp.minute

        nextweekdic = {
            "월요일": {0: 7, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 1},
            "화요일": {0: 8, 1: 7, 2: 6, 3: 5, 4: 4, 5: 3, 6: 2},
            "수요일": {0: 9, 1: 8, 2: 7, 3: 6, 4: 5, 5: 4, 6: 3},
            "목요일": {0: 10, 1: 9, 2: 8, 3: 7, 4: 6, 5: 5, 6: 4},
            "금요일": {0: 11, 1: 10, 2: 9, 3: 8, 4: 7, 5: 6, 6: 5},
            "토요일": {0: 12, 1: 11, 2: 10, 3: 9, 4: 8, 5: 7, 6: 6},
            "일요일": {0: 13, 1: 12, 2: 11, 3: 10, 4: 9, 5: 8, 6: 7}
        }

        weekdic = {
            "월요일": {0: 0, 1: -1, 2: -2, 3: -3, 4: -4, 5: -5, 6: -6},
            "화요일": {0: 1, 1: 0, 2: -1, 3: -2, 4: -3, 5: -4, 6: -5},
            "수요일": {0: 2, 1: 1, 2: 0, 3: -1, 4: -2, 5: -3, 6: -4},
            "목요일": {0: 3, 1: 2, 2: 1, 3: 0, 4: -1, 5: -2, 6: -3},
            "금요일": {0: 4, 1: 3, 2: 2, 3: 1, 4: 0, 5: -1, 6: -2},
            "토요일": {0: 5, 1: 4, 2: 3, 3: 2, 4: 1, 5: 0, 6: -1},
            "일요일": {0: 6, 1: 5, 2: 4, 3: 3, 4: 2, 5: 1, 6: 0}
        }

        daylist = {0: "월", 1: "화", 2: "수", 3: "목", 4: "금", 5: "토", 6: "일"}

        temp_list = [0, 1, 2, 3, 4, 5, 6]
        temp_list_kor = ["월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"]
        # 현재시간 입력
        next_month = ""
        next_day = ""
        next_part = ""
        next_hour = ""
        next_minute = ""
        #next_time = talk_time
        next_time = datetime.datetime.now()


        #시간 컨펌
        a['nextweek'] = ""
        a['morae'] = ""
        a['tomorrow'] = ""
        a['today'] = ""
        a['day'] = ""
        a['part'] = ""
        a['hour'] = ""
        a['minute'] = ""
        a['input_month'] = ""
        a['input_day'] = ""
        

        if sds_res['current_task'] == 'timeAffirm':
            items = sds_res['intent.filled_slots.items']
            print(items)
            for id in items:
                a[id[0]] = id[1]
                print(id)
            if a['nextweek'] == "" : slot_nextweek = ""
            elif a['nextweek'] == '돌아오는' : slot_nextweek = "다음" 
            else: slot_nextweek = a['nextweek']
            if a['morae'] == "" : slot_morae = ""
            else: slot_morae = a['morae']
            if a['input_month'] == "" : slot_input_month = ""
            else: slot_input_month = a['input_month']
            if a['input_day'] == "" : slot_input_day = ""
            else: slot_input_day = a['input_day']
            if a['tomorrow'] == "" : slot_tomorrow = ""
            else: slot_tomorrow = a['tomorrow']
            if a['today'] == "" : slot_today = ""
            else: slot_today = a['today']
            if a['day'] == "" : slot_day = ""
            else: slot_day = a['day']
            if a['part'] == "" : slot_part = ""
            elif a['part'] == '저녁' or  a['part'] == '밤': slot_part = "오후" 
            elif a['part'] == '아침' or  a['part'] == '새벽': slot_part = "오전" 
            else: slot_part = a['part']
            if a['hour'] == "" : slot_hour = ""
            else: slot_hour = a['hour']
            if a['minute'] == "" : slot_minute = ""
            elif a['minute'] == "반": slot_minute = "30"
            else: slot_minute = a['minute']
            print ("slot_nextweek : " + str(slot_nextweek))
            print ("slot_morae : " + str(slot_morae))
            print ("slot_tomorrow : " + str(slot_tomorrow))
            print ("slot_today : " + str(slot_today))
            print ("slot_day : " + str(slot_day))
            print ("slot_part : " + str(slot_part))
            print ("slot_hour : " + str(slot_hour))
            print ("slot_minute : " + str(slot_minute))
            print("시이이이이이작")
            if slot_input_month is not None and slot_input_month != "":
                if slot_input_day is not None and slot_input_day != "":
                    print ("일월 입력")
                    next_time = next_time.replace(month=int(slot_input_month), day=int(slot_input_day))
                elif slot_input_day is None and slot_input_day == "":
                    print ("월은 있는데 일은 입력되지 않았습니다.")
                    talk.utter.utter = "$dayMiss$"
            elif slot_input_month is None or slot_input_month == "":
                if slot_input_day is not None and slot_input_day != "":
                    next_time = next_time.replace(day=int(slot_input_day))
                    
                    #print("일은 있는데 월을 입력하지 않았습니다.")
                    #talk_utter.utter = "$dayMiss$" 
                else:
                    if slot_nextweek == "이번":
                        if slot_day in temp_list_kor:
                            print("여기에 들어와씀")
                            b = int(weekdic[str(slot_day)][next_time.weekday()])
                            #next_time = next_time.replace(day=next_time.day + b)
                            plus_time = datetime.timedelta(days=b)
                            next_time = next_time + plus_time
                        elif slot_day is None or slot_day == "":
                            talk.utter.utter = "$dayMiss$"
                        else:
                            talk.utter.utter = "$dayMiss$"
                    elif slot_nextweek == "다음":
                        print("다음 적용")
                   # if test_time.weekday() in temp_list:
                        if slot_day in temp_list_kor:
                            print("111111111111111111111 : " + str(slot_day) + str(next_time.weekday()))
                            b = int(nextweekdic[str(slot_day)][next_time.weekday()])
                            print (b)
                            #next_time = next_time.replace(day=next_time.day + int(b))
                            plus_time = datetime.timedelta(days=b)
                            next_time = next_time + plus_time
                        elif slot_day is None or slot_day == "":
                            b = 7
                            #next_time = next_time.replace(day=next_time.day + int(b))
                            plus_time = datetime.timedelta(days=b)
                            next_time = next_time + plus_time
                        else:
                            talk.utter.utter = "$dayMiss$"
                            print("쓸대없는 요일을 말씀하셨습니다.")
                             #일자 더하기
                    elif slot_morae == "모레" or slot_morae == "내일 모레" or slot_morae == "내일모레":
                        b = 2
                        plus_time = datetime.timedelta(days=b)
                        next_time = next_time + plus_time
                        #next_time = next_time.replace(day=next_time.day + b)
                    elif slot_tomorrow == "내일":
                        print("들어와씀")
                        b = 1
                        plus_time = datetime.timedelta(days=b)
                        next_time = next_time + plus_time
                        #next_time = next_time.replace(day=next_time.day + b)
                    elif slot_today == "오늘":
                        b = 0
                        plus_time = datetime.timedelta(days=b)
                        next_time = next_time + plus_time
                        #next_time = next_time.replace(day=next_time.day + b)
                    elif slot_nextweek == "" or slot_nextweek is None:
                        pass
                    else:
                        talk.utter.utter = "$inputMiss$"
                        print ("일정을 입력을 하시지 않았습니다. 다시 입력해주세요.")
                
            #elif slot_day[daylist] in temp_list:

            if slot_hour is None or slot_hour == "":
                if slot_minute is None or slot_minute == "":
                    print(talk_time.hour + talk_time.minute)
                    next_time = next_time.replace(hour=int(talk_time.hour), minute=int(talk_time.minute))
                    pass
                else:
                    print("시를 말씀해주시지 않았습니다.")
                    talk.utter.utter = "$hourMiss$"
            else:
                if slot_minute is None or slot_minute == "":
                    print("3333333333333333333333")
                    next_time = next_time.replace(hour=int(slot_hour), minute = 00)
                else:
                    print("4444444444444444444444")
                    next_time = next_time.replace(hour=int(slot_hour), minute=int(slot_minute))

            next_month = next_time.month
            next_day = next_time.day

            if slot_part == "오전" or slot_part == "오후":
                next_part = slot_part
                if slot_hour is None or slot_hour == "":
                    print("나와ㄸ따다ㅣㅏㅓ아러나리어나리어나리어내ㅏ")
                    talk.utter.utter = "$hourMiss$"
                    next_hour = next_time.hour
                    #next_time.minute = ""
                else:
                    next_hour = next_time.hour
                    
            else:
                if next_time.hour > 12 and next_time.hour < 24:
                    next_part = "오후"
                    next_hour = next_time.hour - 12
                elif next_time.hour == 12:
                    next_part = "오후"
                    next_hour = 12
                elif next_time.hour > 0 and next_time.hour < 12:
                    next_part = "오전"
                    next_hour = next_time.hour
                elif next_time.hour == 0:
                    next_part = "오전"
                    next_hour = next_time.hour



            next_minute = next_time.minute
            #slot_hour = self.readNumberHour((a['hour']))
            #text_output = self.readNumber(31)
            #talk_res.response.speech.utter = text_output
            print(next_time)
            #next_month = ""
            #next_day = ""
            #next_part = ""
            #next_hour = ""
            #next_minute = ""
        if sds_res['current_task'] == 'timeAffirm':
            if talk.utter.utter == "$hourMiss$" or talk.utter.utter == "$dayMiss$":
                print("dcdddddddddddddddddddddddddddddddddddd")
                sds_res = self.Sds.Talk(talk.utter.utter, session_id, model, product_code)
            else:
                print("===============test=============")
                print("next_month : " + str(next_month))
                print("next_day : " + str(next_day))
                print("next_part : " + str(next_part))
                print("next_hour : " + str(next_hour))
                print("next_minute : " + str(next_minute))
                print("===============test=============")
                talk_res.response.speech.utter = "말씀하신 통화가능 시간이 " + self.readNumberMinute(next_month) +"월"+ self.readNumberMinute(next_day) + "일 "+str(next_part) +", " +  self.readNumberHour(next_hour) + "시 "+ self.readNumberMinute(next_minute) + "분이 맞습니까?"
                self.DBConnect("update campaign_target_list_tb set next_time='"+str(next_time)+"' where contract_no = '" + seq + "';")
            #talk_res.response.speech.utter = "말씀하신 통화가능 시간이 " + next_month +"월"+ next_day + "일 "+next_part +", " +  next_hour + "시 "+ next_minute + "분이 맞습니까?"
            #말씀하신 일정이 11월 19일 오전 3시 30분이 맞습니까?
        #if sds_res['current_task'] == 'timeEnd':
            #self.DBConnect("update hc_hh_campaign_score set next_time='"+str(next_time)+"' where contract_no = '" + seq + "';")





        #질문 수정사항
        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        #task1
        if sds_res['current_task'] == 'task1':
            talk_res.response.speech.utter = "안녕하십니까?, 현대해상 고객센터입니다, " + user_name + "고객님 되십니까?"
        #task2
        if sds_res['current_task'] == 'task2':
            talk_res.response.speech.utter = "" + self.readNumberMinute(join_month) + "월" + self.readNumberMinute(join_day) +"일, 저희 현대해상 "+prod_name+"을 가입해 주셔서, 진심으로 감사드립니다, 가입하실때, 상품의 중요한 사항이 제대로 설명되었는지, 확인드리고자 연락드렸습니다, 소요시간은 약 삼분정도인데, 잠시 통화 가능하십니까?"
        #PRIVACY1
        if sds_res['current_task'] == 'PRIVACY1':
            talk_res.response.speech.utter = "지금부터 진행하는 내용은 고객님의 권리보호를 위해 녹음되며, 답변하신 내용은 향후 민원 발생시, 중요한 근거자료로 활용되오니, 정확한 답변 부탁드리겠습니다, 먼저 본인확인을 위해 주민번호 여섯자리를 말씀해주세요."
        #PRIVACY2
        if sds_res['current_task'] == 'PRIVACY2':
            talk_res.response.speech.utter = "말씀해주셔서 감사합니다, 고객님의 주소는 " + str(privacy_add1) + ", " + str(privacy_add2) + "로 확인 되는데 맞으십니까?"
        #PRIVACY3
        if sds_res['current_task'] == 'PRIVACY3':
            talk_res.response.speech.utter = "말씀해주셔서 감사합니다, 고객님의 주소는 " + str(privacy_add1) + " 으로 확인되는데요, 나머지 주소는 어떻게 되십니까?"
        # ask3
        if sds_res['current_task'] == 'task3':
            talk_res.response.speech.utter = "확인 감사드립니다, 계약하실 때 계약자 " + insured_contractor + "님께서 청약서, 상품설명서, 개인정보처리 동의서에 직접 서명하셨습니까?"
        # task4
        if sds_res['current_task'] == 'task4':
            talk_res.response.speech.utter = "타인의 사망을 보장 해주는 계약의 경우 보험대상자도 반드시 서면동의를 해주셔야 하는데요, 피보험자 "+ insured_person +" 님도 직접 서명하셨습니까?"
        # task8
        if sds_res['current_task'] == 'task8':
            if insured_closeproduct == 'Y':
                talk_res.response.speech.utter = "중도해지 또는 만기시, 환급금이 납입한 보험료보다 적을 수 있다는 설명을 들으셨습니까?"
            else:
                talk_res.response.speech.utter = "보험료 납입기간 중 중도 해지시, 해지환급금이 지급되지 않는다는 설명을 들으셨나요?"
        # task9
        if sds_res['current_task'] == 'task9':
            talk_res.response.speech.utter = task9_info + "화재벌금 또는 과실 치사상 벌금 담보 등은 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "화재벌금 담보는 중복 가입시 비례보상됩니다, 화재벌금 또는 과실 치사상 벌금 담보 등은 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
            elif sds_intent == "affirm" or sds_intent == "negate":
                talk_res.response.speech.utter = "화재벌금 또는 과실 치사상 벌금 담보 등은 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
        #time        
        if sds_res['current_task'] == 'time':
            talk_res.response.speech.utter = "그럼 가능하신 시간을 알려주시면 다시 연락드리겠습니다,주말도 가능하니, 편하신 요일과 시간을,말씀해주세요"
        #time_end       
        if sds_res['current_task'] == 'timeEnd':
            talk_res.response.speech.utter = "네 고객님, 말씀하신 시간에 다시 연락을 드리겠습니다, 현대해상 고객센터였습니다, 감사합니다. $callback$"
        # task11
        if sds_res['current_task'] == 'task11':
            talk_res.response.speech.utter = task11_info + "일상생활배상책임 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "일상생활배상책임 담보는 중복 가입시 비례보상됩니다, 일상생활배상책임 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
            elif sds_intent == "affirm" or sds_intent == "negate":
                talk_res.response.speech.utter = "일상생활배상책임 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
        # task13
        if sds_res['current_task'] == 'task13':
            talk_res.response.speech.utter = task13_info+ "법률비용 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "법률비용 담보는 중복 가입시 비례보상됩니다, 법률비용 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
            elif sds_intent == "affirm" or sds_intent == "negate":
                talk_res.response.speech.utter = "법률비용 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 중복, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 비례를 말씀해주세요."
        # task13
        if sds_res['current_task'] == 'time':
            if sds_intent == "hourmiss":
                talk_res.response.speech.utter = "통화 가능 시를 말씀해주시지 않았습니다.통화가능 시를 말씀해주세요."
            if sds_intent == "daymiss":
                talk_res.response.speech.utter = "통화 가능 요일을 말씀해주시지 않았습니다.통화가능 요일을 말씀해주세요."
        #task14       
        if sds_res['current_task'] == 'task14':
            talk_res.response.speech.utter = "네 고객님, 소중한시간 내주셔서 감사합니다. 현대해상 고객센터였습니다. $complete$"


        print("[ANSWER]: " + original_answer)
        #print("[SESSION_KEY] :" + )
        print("[ENGINE]: " + answer_engine)

        #위치 전송
        #self.DBConnect("update hc_hh_campaign_score set task='"+ sds_res['current_task'] + "' where contract_no = '" + seq + "';")




        return talk_res
コード例 #8
0
ファイル: HC_HH_1call_.py プロジェクト: hakseongkim/hakseong
    def Talk(self, talk, context):
        #print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        #print(talk)
        #print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        a = {}
        """
        talk.utter.utter : 사용자 발화
        talk_res를 return

        talk_res.response.speech.utter : 챗봇 발화
        """
        talk.utter.utter = talk.utter.utter + ";$callSeq6$"
        print("talk : ", talk.utter.utter)
        seq = talk.utter.utter[talk.utter.utter.index("$callSeq")+9:-1]
        phoneNum = self.DBConnect("select cust_tel_no from campaign_target_list_tb where contract_no = '" + seq + "';")
        phoneNum = phoneNum[0]['cust_tel_no']
        #phoneNum = '01084520997'
        uttertext = talk.utter.utter[talk.utter.utter.find(";$callSeq"):]
        talk.utter.utter = talk.utter.utter.replace(uttertext,"")

        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        print("talk : ", talk.utter.utter)
        print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")


        #session_id = talk.session.id
        dbsession = self.DBConnect("select session_value,cust_tel_no,cust_nm,join_time,talk_time,insurance_contractor,insurance_insured,insurance_closeproduct,address_main,address_sub,insurance_productname from hc_hh_campaign_score where contract_no = '" + seq + "';")
        # cust_nm 통화자(가입자)
        # join_time 전체 시간 호출
        # join_month 가입 월
        # join_day 가입 일
        # insurance_contractor 가입 계약자
        # insurance_insured 가입 피보험자
        # insurance_closeproduct 무해지상품 가입여부
        # address_main 메인주소
        # address_sub 세부주소
        phone = dbsession[0]['cust_tel_no']
        user_name = dbsession[0]['cust_nm']

        join_time = dbsession[0]['join_time']
        print ("join_time : " + str(join_time))
        join_strp = datetime.datetime.strptime(str(join_time), '%Y-%m-%d %H:%M:%S')
        join_month = join_strp.month
        join_day = join_strp.day

        talk_time = dbsession[0]['talk_time']
        talk_strp = datetime.datetime.strptime(str(talk_time), '%Y-%m-%d %H:%M:%S')
        talk_month = talk_strp.month
        talk_day = talk_strp.day
        talk_hour = talk_strp.hour
        talk_minute = talk_strp.minute

        insurance_contractor = dbsession[0]['insurance_contractor']
        insurance_insured = dbsession[0]['insurance_insured']
        insurance_closeproduct = dbsession[0]['insurance_closeproduct']
        insurance_productname = dbsession[0]['insurance_productname']
        privacy_add1 = dbsession[0]['address_main']
        privacy_add2 = dbsession[0]['address_sub']

        if dbsession[0]['session_value'] is None:
            dbsessioncode = talk.session.id
            self.DBConnect("update hc_hh_campaign_score set session_value = '" + str(dbsessioncode) + "' where contract_no = '" + seq + "';")
            session_id = dbsessioncode
        else:
            session_id = int(dbsession[0]['session_value'])

        talk_res = talk_pb2.TalkResponse()

        ##초기 모델 설정
        dbsession = self.DBConnect("select model from campaign_target_list_tb where contract_no = '" + seq + "';")
        if dbsession[0]['model'] is None:
            model = "Happy_Call_HH"
        else:
            model = dbsession[0]['model']

        #question = talk.utter.utter
        meta = dict()
        #meta['seq_id'] = util.time_check(0)
        meta['log_type'] = 'SVC'
        meta['svc_name'] = 'DA'

        #output = ""
        original_answer = ""
        engine_path = list()
        answer_engine = "None"
        status_code = ""
        status_message = ""
        flag = False
        weight = 0
        code = 'None'





        # SDS
        dbtask = self.DBConnect("select task from campaign_target_list_tb where contract_no = '" + seq + "';")
        task = dbtask[0]['task']
        if task == 'task3' and insurance_contractor == insurance_insured:
            sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
            if sds_intent == 'affirm':
                talk.utter.utter = "$task5$"

        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        if task == 'task2' and sds_intent == "affirm":
            print("성공11111")
            sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
            self.DBConnect("update campaign_target_list_tb set model='privacy' where contract_no = '" + seq + "';")
            model = 'privacy'

        #입력받는 주소를 여기다가 처리를 해줘야함
        if task == 'PRIVACY2' and sds_intent == "affirm":
            print("성공22222")
            talk.utter.utter = '$next$'
            self.DBConnect("update campaign_target_list_tb set model='Happy_Call_HH' where contract_no = '" + seq + "';")
            model = 'Happy_Call_HH'
        if task == 'PRIVACY3' and sds_intent == "privacy3":
            print("성공333333")
            self.DBConnect("update campaign_target_list_tb set model='Happy_Call_HH' where contract_no = '" + seq + "';")
            model = 'Happy_Call_HH'


        sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
        #self.DBConnect("update test set task='" + sds_res['current_task'] + "' where contract_no = '" + seq + "';")
        #sds_intent = self.Sds.GetIntent(talk.utter.utter, model)


        # 결과값 DB에 저장하는 방식
        b = []
        for i in range(1, 15):
            b.append("task" + str(i))
        for i in range(1, 4):
            b.append("PRIVACY" + str(i))


        if task in b:
            camp_id_db = self.DBConnect("select camp_id from hc_hh_campaign_info where task = '" + task + "';")
            camp_id = camp_id_db[0]['camp_id']
            if sds_intent == 'affirm':
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('999',"+seq+","+camp_id+","+task+","'Y'")");
            elif sds_intent == 'negate':
                #self.DBConnect("update campaign_target_list_tb set " + task + "='아니오' where contract_no = '" + seq + "';")
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('999',"+seq+","+camp_id+","+task+","'N'")");
            if sds_intent == 'overlap' or sds_indent == 'noproportion':
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('999',"+seq+","+camp_id+","+task+","'중복'")");
            if sds_intent == 'nooverlap' or sds_indent == 'proportion':
                self.DBConnect("insert into hc_hh_campaign_score (call_id, contract_no, info_seq, info_task, task_value) values ('999',"+seq+","+camp_id+","+task+","'비례'")");
            elif sds_intent == 'next':
                pass
            else:
                pass
                #self.DBConnect("update campaign_target_list_tb set " + task + "='"+talk.utter.utter+"' where contract_no = '" + seq + "';")

        #디비 이관 전 데이터 넣는 방식
        #if task is not None or sds_intent != 'next':
            #self.DBConnect("insert into hc_hh_1_result (phone, user_name, session_name, model, task, utter, intent, request_time) values('" + str(phone) + "','" + user_name + "','" + str(session_id) + "','" + model + "','" + str(task) + "','" + talk.utter.utter + "','" + sds_intent + "',NOW());")

        #if sds_res['current_task'] == "timeEnd" and sds_res['intent'] == "affirm":

        print("SDS Start!")
        #dbtask = self.DBConnect("select task from test where contract_no = '" + seq + "';")
        #task = dbtask[0]['task']

        #print("++++++++++++++++taskname : " + sds_res['current_task'] + "intent : " + dialog_act)


        print(sds_res)
        #print("===============test=============")

        original_answer = sds_res['response']
        answer_engine = "SDS"
        engine_path.append("SDS")
        #첫 SDS 답변 입력사항
        original_answer = sds_res['response']
        talk_res.response.speech.utter = original_answer

        #시간 테스트
        #talk_time = dbsession[0]['talk_time']
        #talk_strp = datetime.datetime.strptime(talk_time, '%Y-%m-%d %H:%M:%S')
        #talk_month = talk_strp.month
        #talk_day = talk_strp.day
        #talk_hour = talk_strp.hour
        #talk_minute = talk_strp.minute

        nextweekdic = {
            "월요일": {0: 7, 1: 13, 2: 12, 3: 11, 4: 10, 5: 9, 6: 8},
            "화요일": {0: 8, 1: 7, 2: 13, 3: 12, 4: 11, 5: 10, 6: 9},
            "수요일": {0: 9, 1: 8, 2: 7, 3: 13, 4: 12, 5: 11, 6: 10},
            "목요일": {0: 10, 1: 9, 2: 8, 3: 7, 4: 13, 5: 12, 6: 11},
            "금요일": {0: 11, 1: 10, 2: 9, 3: 8, 4: 7, 5: 13, 6: 12},
            "토요일": {0: 12, 1: 11, 2: 10, 3: 9, 4: 8, 5: 7, 6: 13},
            "일요일": {0: 13, 1: 12, 2: 11, 3: 10, 4: 9, 5: 8, 6: 7}
        }

        weekdic = {
            "월요일": {0: 0, 1: -1, 2: -2, 3: -3, 4: -4, 5: -5, 6: -6},
            "화요일": {0: 1, 1: 0, 2: -1, 3: -2, 4: -3, 5: -4, 6: -5},
            "수요일": {0: 2, 1: 1, 2: 0, 3: -1, 4: -2, 5: -3, 6: -4},
            "목요일": {0: 3, 1: 2, 2: 1, 3: 0, 4: -1, 5: -2, 6: -3},
            "금요일": {0: 4, 1: 3, 2: 2, 3: 1, 4: 0, 5: -1, 6: -2},
            "토요일": {0: 5, 1: 4, 2: 3, 3: 2, 4: 1, 5: 0, 6: -1},
            "일요일": {0: 6, 1: 5, 2: 4, 3: 3, 4: 2, 5: 1, 6: 0}
        }

        daylist = {0: "월", 1: "화", 2: "수", 3: "목", 4: "금", 5: "토", 6: "일"}

        temp_list = [0, 1, 2, 3, 4, 5, 6]
        temp_list_kor = ["월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"]
        # 현재시간 입력
        next_month = ""
        next_day = ""
        next_part = ""
        next_hour = ""
        next_minute = ""
        next_time = talk_time

        #시간 컨펌
        a['nextweek'] = ""
        a['morae'] = ""
        a['tomorrow'] = ""
        a['today'] = ""
        a['day'] = ""
        a['part'] = ""
        a['hour'] = ""
        a['minute'] = ""
        a['input_month'] = ""
        a['input_day'] = ""
        

        if sds_res['current_task'] == 'timeAffirm':
            items = sds_res['intent.filled_slots.items']
            print(items)
            for id in items:
                a[id[0]] = id[1]
                print(id)
            if a['nextweek'] == "" : slot_nextweek = ""
            else: slot_nextweek = a['nextweek']
            if a['morae'] == "" : slot_morae = ""
            else: slot_morae = a['morae']
            if a['input_month'] == "" : slot_input_month = ""
            else: slot_input_month = a['input_month']
            if a['input_day'] == "" : slot_input_day = ""
            else: slot_input_day = a['input_day']
            if a['tomorrow'] == "" : slot_tomorrow = ""
            else: slot_tomorrow = a['tomorrow']
            if a['today'] == "" : slot_today = ""
            else: slot_today = a['today']
            if a['day'] == "" : slot_day = ""
            else: slot_day = a['day']
            if a['part'] == "" : slot_part = ""
            else: slot_part = a['part']
            if a['hour'] == "" : slot_hour = ""
            else: slot_hour = a['hour']
            if a['minute'] == "" : slot_minute = ""
            elif a['minute'] == "반": slot_minute = "30"
            else: slot_minute = a['minute']
            print ("slot_nextweek : " + str(slot_nextweek))
            print ("slot_morae : " + str(slot_morae))
            print ("slot_tomorrow : " + str(slot_tomorrow))
            print ("slot_today : " + str(slot_today))
            print ("slot_day : " + str(slot_day))
            print ("slot_part : " + str(slot_part))
            print ("slot_hour : " + str(slot_hour))
            print ("slot_minute : " + str(slot_minute))
            print("시이이이이이작")
            if slot_input_month is not None and slot_input_month != "":
                if slot_input_day is not None and slot_input_day != "":
                    print ("일월 입력")
                    next_time = next_time.replace(month=int(slot_input_month), day=int(slot_input_day))
                elif slot_input_day is None and slot_input_day == "":
                    print ("월은 있는데 일은 입력되지 않았습니다.")
                    talk.utter.utter = "$dayMiss$"
            elif slot_input_month is None or slot_input_month == "":
                if slot_input_day is not None and slot_input_day != "":
                    print("일은 있는데 월을 입력하지 않았습니다.")
                    talk_utter.utter = "$dayMiss$" 
                else:
                    if slot_nextweek == "이번":
                        if slot_day in temp_list_kor:
                            print("여기에 들어와씀")
                            b = int(weekdic[str(slot_day)][talk_strp.weekday()])
                            next_time = next_time.replace(day=next_time.day + b)
                        elif slot_day is None or slot_day == "":
                            talk.utter.utter = "$dayMiss$"
                        else:
                            talk.utter.utter = "$dayMiss$"
                    elif slot_nextweek == "다음":
                        print("다음 적용")
                   # if test_time.weekday() in temp_list:
                        if slot_day in temp_list_kor:
                            print("111111111111111111111 : " + str(slot_day) + str(talk_strp.weekday()))
                            b = int(nextweekdic[str(slot_day)][talk_strp.weekday()])
                        elif slot_day is None or slot_day == "":
                            b = 7
                        else:
                            talk.utter.utter = "$dayMiss$"
                            print("쓸대없는 요일을 말씀하셨습니다.")
                             #일자 더하기
                            next_time = next_time.replace(day=next_time.day + b)
                    elif slot_morae == "모레" or slot_morae == "내일 모레" or slot_morae == "내일모레":
                        b = 2
                        next_time = next_time.replace(day=next_time.day + b)
                    elif slot_tomorrow == "내일":
                        print("들어와씀")
                        b = 1
                        next_time = next_time.replace(day=next_time.day + b)
                    elif slot_today == "오늘":
                        b = 0
                        next_time = next_time.replace(day=next_time.day + b)
                    elif slot_nextweek == "" or slot_nextweek is None:
                        pass
                    else:
                        talk.utter.utter = "$inputMiss$"
                        print ("일정을 입력을 하시지 않았습니다. 다시 입력해주세요.")
                
            #elif slot_day[daylist] in temp_list:

            if slot_hour is None or slot_hour == "":
                if slot_minute is None or slot_minute == "":
                    print(talk_time.hour + talk_time.minute)
                    next_time = next_time.replace(hour=int(talk_time.hour), minute=int(talk_time.minute))
                    pass
                else:
                    print("시를 말씀해주시지 않았습니다.")
                    talk.utter.utter = "$hourMiss$"
            else:
                if slot_minute is None or slot_minute == "":
                    print("3333333333333333333333")
                    next_time = next_time.replace(hour=int(slot_hour), minute = 00)
                else:
                    print("4444444444444444444444")
                    next_time = next_time.replace(hour=int(slot_hour), minute=int(slot_minute))

            next_month = next_time.month
            next_day = next_time.day

            if slot_part == "오전" or slot_part == "오후":
                next_part = slot_part
                if slot_hour is None or slot_hour == "":
                    print("나와ㄸ따다ㅣㅏㅓ아러나리어나리어나리어내ㅏ")
                    talk.utter.utter = "$hourMiss$"
                    next_hour = next_time.hour
                    #next_time.minute = ""
                else:
                    next_hour = next_time.hour
                    
            else:
                if next_time.hour > 12 and next_time.hour < 24:
                    next_part = "오후"
                    next_hour = next_time.hour - 12
                elif next_time.hour == 12:
                    next_part = "오후"
                    next_hour = 12
                elif next_time.hour > 0 and next_time.hour < 12:
                    next_part = "오전"
                    next_hour = next_time.hour
                elif next_time.hour == 0:
                    next_part = "오전"
                    next_hour = next_time.hour



            next_minute = next_time.minute
            #slot_hour = self.readNumberHour((a['hour']))
            #text_output = self.readNumber(31)
            #talk_res.response.speech.utter = text_output
            print(next_time)
            #next_month = ""
            #next_day = ""
            #next_part = ""
            #next_hour = ""
            #next_minute = ""
        if sds_res['current_task'] == 'timeAffirm':
            if talk.utter.utter == "$hourMiss$" or talk.utter.utter == "$dayMiss$":
                print("dcdddddddddddddddddddddddddddddddddddd")
                sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
            else:
                print("===============test=============")
                print("next_month : " + str(next_month))
                print("next_day : " + str(next_day))
                print("next_part : " + str(next_part))
                print("next_hour : " + str(next_hour))
                print("next_minute : " + str(next_minute))
                print("===============test=============")
                talk_res.response.speech.utter = "말씀하신 통화가능 시간이 " + self.readNumberMinute(next_month) +"월"+ self.readNumberMinute(next_day) + "일 "+str(next_part) +", " +  self.readNumberHour(next_hour) + "시 "+ self.readNumberMinute(next_minute) + "분이 맞습니까?"
                self.DBConnect("update campaign_target_list_tb set next_time='"+str(next_time)+"' where contract_no = '" + seq + "';")
            #talk_res.response.speech.utter = "말씀하신 통화가능 시간이 " + next_month +"월"+ next_day + "일 "+next_part +", " +  next_hour + "시 "+ next_minute + "분이 맞습니까?"
            #말씀하신 일정이 11월 19일 오전 3시 30분이 맞습니까?
        #if sds_res['current_task'] == 'timeEnd':
            #self.DBConnect("update campaign_target_list_tb set next_time='"+str(next_time)+"' where contract_no = '" + seq + "';")





        #질문 수정사항
        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        #task1
        if sds_res['current_task'] == 'task1':
            talk_res.response.speech.utter = "안녕하십니까?, 현대해상 고객센터입니다, " + user_name + " 고객님 되십니까?"
        #task2
        if sds_res['current_task'] == 'task2':
            talk_res.response.speech.utter = "" + self.readNumberMinute(join_month) + "월," + self.readNumberMinute(join_day) +"일 저희 현대해상에 "+insurance_productname+"을 가입해 주셔서, 진심으로 감사드립니다, 가입하실때 상품의 중요한 사항이 제대로 설명 되었는지, 확인해 드리고자 하는데요, 잠시 통화 가능하십니까?"
        #PRIVACY2
        if sds_res['current_task'] == 'PRIVACY2':
            talk_res.response.speech.utter = "고객님의 주소는 " + privacy_add1 + ", " + privacy_add2 + "로 확인 되는데 맞으십니까?"
        #PRIVACY3
        if sds_res['current_task'] == 'PRIVACY3':
            talk_res.response.speech.utter = "고객님의 주소는 " + privacy_add1 + " 으로 확인되는데요, 나머지 주소는 어떻게 되십니까?"
        # ask3
        if sds_res['current_task'] == 'task3':
            talk_res.response.speech.utter = "확인 감사드립니다, 계약하실 때 계약자 " + insurance_contractor + " 님 께서 청약서, 상품설명서, 개인정보처리 동의서에 직접 서명하셨습니까?"
        # task4
        if sds_res['current_task'] == 'task4':
            talk_res.response.speech.utter = "타인의 사망을 보장 해주는 계약의 경우 보험대상자도 반드시 서면동의를 해주셔야 하는데요, 피보험자 "+ insurance_insured +" 님도 직접 서명하셨습니까?"
        # task8
        if sds_res['current_task'] == 'task8':
            if insurance_closeproduct == 'Y':
                talk_res.response.speech.utter = "중도해지 또는 만기시, 환급금이 납입한 보험료보다 적을 수 있다는 설명을 들으셨습니까?"
            else:
                talk_res.response.speech.utter = "보험료 납입기간 중 중도 해지시, 해지환급금이 지급되지 않는다는 설명을 들으셨나요?"
        # task9
        if sds_res['current_task'] == 'task9':
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "화재벌금 담보는 중복 가입시 비례보상됩니다, 화재벌금 또는 과실 치사상 벌금 담보 등은 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 1번, 실제손해액을 한도로 비례보상 된다는 설명을 들으셨다면 2번을 말씀해주세요"
        # task11
        if sds_res['current_task'] == 'task11':
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "일상생활배상책임 담보는 중복 가입시 비례보상됩니다, 일상생활배상책임 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 1번, 실제손해액을 한도로 비례보상 된다는 설명을 들으셨다면 2번을 말씀해주세요"
        # task13
        if sds_res['current_task'] == 'task13':
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "법률비용 담보는 중복 가입시 비례보상됩니다, 법률비용 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 1번, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 2번을 말씀해주세요"
        # task13
        if sds_res['current_task'] == 'time':
            if sds_intent == "hourmiss":
                talk_res.response.speech.utter = "통화 가능 시를 말씀해주시지 않았습니다.통화가능 시를 말씀해주세요."
            if sds_intent == "daymiss":
                talk_res.response.speech.utter = "통화 가능 요일을 말씀해주시지 않았습니다.통화가능 요일을 말씀해주세요."


        print("[ANSWER]: " + original_answer)
        #print("[SESSION_KEY] :" + )
        print("[ENGINE]: " + answer_engine)

        #위치 전송
        self.DBConnect("update campaign_target_list_tb set task='"+ sds_res['current_task'] + "' where contract_no = '" + seq + "';")


        return talk_res
コード例 #9
0
ファイル: HC_HH_2_.py プロジェクト: hakseongkim/hakseong
    def Talk(self, talk, context):
        #print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        #print(talk)
        #print("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^")
        a = {}
        """
        talk.utter.utter : 사용자 발화
        talk_res를 return

        talk_res.response.speech.utter : 챗봇 발화
        """

        #session_id = talk.session.id
        print("talk : ", talk.utter.utter)
        seq = talk.utter.utter[talk.utter.utter.index("$callSeq")+9:-1]
        phoneNum = self.DBConnect("select phone from hc_hh_2_score where seq_num = '" + seq + "';")
        phoneNum = phoneNum[0]['phone']
        #phoneNum = '01034491702'
        uttertext = talk.utter.utter[talk.utter.utter.find(";$callSeq"):]
        talk.utter.utter = talk.utter.utter.replace(uttertext,"")


        dbsession = self.DBConnect("select session_name,phone,user_name,join_month,join_day,insurance_contractor,insurance_insured,insurance_closeproduct,privacy_add1,privacy_add2,insurance_productname from hc_hh_2_score where phone = '" + phoneNum + "';")
        # user_name 통화자(가입자)
        # join_month 가입 월
        # join_day 가입 일
        # insurance_contractor 가입 계약자
        # insurance_insured 가입 피보험자
        # insurance_closeproduct 무해지상품 s가입여부
        # privacy_add1 메인주소
        # privacy_add2 세부주소
        phone = dbsession[0]['phone']
        user_name = dbsession[0]['user_name']
        join_month = dbsession[0]['join_month']
        join_day = dbsession[0]['join_day']
        insurance_contractor = dbsession[0]['insurance_contractor']
        insurance_insured = dbsession[0]['insurance_insured']
        insurance_closeproduct = dbsession[0]['insurance_closeproduct']
        insurance_productname = dbsession[0]['insurance_productname']
        privacy_add1 = dbsession[0]['privacy_add1']
        privacy_add2 = dbsession[0]['privacy_add2']

        if dbsession[0]['session_name'] is None:
            dbsessioncode = talk.session.id
            self.DBConnect("update hc_hh_2_score set session_name = '" + str(dbsessioncode) + "' where phone = '" + phoneNum + "';")
            session_id = dbsessioncode
        else:
            session_id = int(dbsession[0]['session_name'])


        #print("talk.session.id : " + str(talk.session.id))
        #print("session.id : " + str(dbsession[0]['session_name']))
        #print("talk.session.id : " + talk.session.id + "---- talk.session.id type : " + type(talk.session.id))
        #print("session.id : " + dbsession[0]['session_name'] + "---- session.id type : " + type(dbsession[0]['session_name']))


        #print("dbsession : " + dbsession[0]['session_name'])

        #self.DBConnect("update test set session_name = '"+session_id+"' where phone = '01084520997';")
        #print ("session_id" + str(session_id))
        talk_res = talk_pb2.TalkResponse()
        #print ("session_id" + str(session_id))
        print ("talk : ", talk.utter.utter)
        # 참고 - task4 삭제,
        #개인정보 호출


        ##초기 모델 설정
        dbsession = self.DBConnect("select model from hc_hh_2_score where phone = '" + phoneNum + "';")
        if dbsession[0]['model'] is None:
            model = "Happy_Call_HH2"
        else:
            model = dbsession[0]['model']

        #question = talk.utter.utter
        meta = dict()
        #meta['seq_id'] = util.time_check(0)
        meta['log_type'] = 'SVC'
        meta['svc_name'] = 'DA'

        #output = ""
        original_answer = ""
        engine_path = list()
        answer_engine = "None"
        status_code = ""
        status_message = ""
        flag = False
        weight = 0
        code = 'None'





        # SDS
        dbtask = self.DBConnect("select task from hc_hh_2_score where phone = '" + phoneNum + "';")
        task = dbtask[0]['task']
        if task == 'task3' and insurance_contractor == insurance_insured:
            sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
            if sds_intent == 'affirm':
                talk.utter.utter = "$task5$"

        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        if task == 'task2' and sds_intent == "affirm":
            print("성공11111")
            sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
            self.DBConnect("update hc_hh_2_score set model='privacy' where phone = '" + phoneNum + "';")
            model = 'privacy'

        #입력받는 주소를 여기다가 처리를 해줘야함
        if task == 'PRIVACY2' and sds_intent == "affirm":
            print("성공22222")
            talk.utter.utter = '$next$'
            self.DBConnect("update hc_hh_2_score set model='Happy_Call_HH2' where phone = '" + phoneNum + "';")
            model = 'Happy_Call_HH2'
        if task == 'PRIVACY2' and sds_intent == "negate":
            print("성공22222")
            talk.utter.utter = '$next2$'
            self.DBConnect("update hc_hh_2_score set model='Timesetting' where phone = '" + phoneNum + "';")
            model = 'Happy_Call_HH2'
        if task == 'PRIVACY3' and sds_intent == "privacy3":
            print("성공333333")
            self.DBConnect("update hc_hh_2_score set model='Happy_Call_HH2' where phone = '" + phoneNum + "';")
            model = 'Happy_Call_HH2'


        sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
        #self.DBConnect("update test set task='" + sds_res['current_task'] + "' where phone = '" + phoneNum + "';")
        #sds_intent = self.Sds.GetIntent(talk.utter.utter, model)


        # 결과값 DB에 저장하는 방식
        b = []
        for i in range(1, 6):
            b.append("task" + str(i))
        for i in range(1, 4):
            b.append("PRIVACY" + str(i))



        if task in b:
            if sds_intent == 'affirm':
                self.DBConnect("update hc_hh_2_score set " + task + "='네' where phone = '" + phoneNum + "';")
            elif sds_intent == 'negate':
                self.DBConnect("update hc_hh_2_score set " + task + "='아니오' where phone = '" + phoneNum + "';")
            elif sds_intent == 'next':
                pass
            else:
                self.DBConnect("update hc_hh_2_score set " + task + "='"+talk.utter.utter+"' where phone = '" + phoneNum + "';")

        if task is not None or sds_intent != 'next':
            self.DBConnect("insert into hc_hh_2_result (phone, user_name, session_name, model, task, utter, intent, request_time) values('" + str(phone) + "','" + user_name + "','" + str(session_id) + "','" + model + "','" + str(task) + "','" + talk.utter.utter + "','" + sds_intent + "',NOW());")



        print("SDS Start!")
        #dbtask = self.DBConnect("select task from test where phone = '" + phoneNum + "';")
        #task = dbtask[0]['task']

        #print("++++++++++++++++taskname : " + sds_res['current_task'] + "intent : " + dialog_act)


        print(sds_res)
        #print("===============test=============")

        original_answer = sds_res['response']
        answer_engine = "SDS"
        engine_path.append("SDS")

        #original_answer = self.unknown_answer()
        #첫 SDS 답변 입력사항
        original_answer = sds_res['response']
        talk_res.response.speech.utter = original_answer

        #시간 컨펌
        if sds_res['current_task'] == 'timeAffirm':
            items = sds_res['intent.filled_slots.items']
            #print(items)
            for id in items:
                a[id[0]] = id[1]
                print(id)
            #text_nextweek = a['nextweek']
            #다음주의 기능까지 만들어서 넣어야 할까?
            text_day = a['day']
            text_part = a['part']
            text_hour = self.readNumberHour((a['hour']))
            #text_output = self.readNumber(31)
            #talk_res.response.speech.utter = text_output
            talk_res.response.speech.utter = "말씀하신 시각이 " + text_day +" "+ text_part + " "+ text_hour + "시가 맞습니까?"
            #말씀하신 일정이 11월 19일 오전 3시 30분이 맞습니까?

           # if text_nextweek is None:
           #     if text_day is None:
           #         if text_hour is None:
           #             talk_res.response.speech.utter = "원하시는 시간을 말씀해주세요"
           #         if text_part is None:
           #             pass

        #질문 수정사항
        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        #task1
        if sds_res['current_task'] == 'task1':
            talk_res.response.speech.utter = "안녕하십니까?, 현대해상, 홍길동 입니다, " + user_name + " 고객님 되십니까?"
        #task2
        if sds_res['current_task'] == 'task2':
            talk_res.response.speech.utter = "지난" + self.readNumberMinite(join_month) + "월," + self.readNumberMinite(join_day) +"일 저희 현대해상에 "+insurance_productname+"을 가입해 주셔서, 진심으로 감사드립니다, 가입하신 계약이 정확하게 체결 되었는지, 안내 해드리고자 하는데요, 잠시 통화 가능하십니까?"
        #PRIVACY2
        if sds_res['current_task'] == 'PRIVACY2':
            talk_res.response.speech.utter = "고객님의 주소는 " + privacy_add1 + ", " + privacy_add2 + "로 확인 되는데 맞으십니까?"
        #PRIVACY3
        if sds_res['current_task'] == 'PRIVACY3':
            talk_res.response.speech.utter = "고객님의 주소는 " + privacy_add1 + " 으로 확인되는데요, 나머지 주소는 어떻게 되십니까?"
        # task3
        if sds_res['current_task'] == 'task3':
            talk_res.response.speech.utter = "확인 감사드립니다, 게약자와 피보험자가 다른 계약의 경우에는, 피보험자이신 "+insurance_insured+"님의 계약체결에 대한 동의가 반드시 필요합니다. 자필서명이 정확하게 이루어지지 않은 경우 무효계약으로 고객님꼐서 불이익을 보실 수 있습니다. 피보험자이신 고객님께서 청약서에 직접 자필서명을 하셨는지요?"

        print("[ANSWER]: " + original_answer)
        #print("[SESSION_KEY] :" + )
        print("[ENGINE]: " + answer_engine)

        #위치 전송
        self.DBConnect("update hc_hh_2_score set task='"+ sds_res['current_task'] + "' where phone = '" + phoneNum + "';")


        return talk_res
コード例 #10
0
ファイル: HC_tesths_.py プロジェクト: hakseongkim/hakseong
    def Talk(self, talk, context):
        a = {}
        """
        talk.utter.utter : 사용자 발화
        talk_res를 return

        talk_res.response.speech.utter : 챗봇 발화
        """

        #session_id = talk.session.id
        phoneNum = '01084520997'
        dbsession = self.DBConnect(
            "select session_name from test where phone = '" + phoneNum + "';")

        if dbsession[0]['session_name'] is None:
            dbsessioncode = talk.session.id
            self.DBConnect("update test set session_name = '" +
                           str(dbsessioncode) + "' where phone = '" +
                           phoneNum + "';")
            session_id = dbsessioncode
        else:
            session_id = int(dbsession[0]['session_name'])

        #print("talk.session.id : " + str(talk.session.id))
        #print("session.id : " + str(dbsession[0]['session_name']))
        #print("talk.session.id : " + talk.session.id + "---- talk.session.id type : " + type(talk.session.id))
        #print("session.id : " + dbsession[0]['session_name'] + "---- session.id type : " + type(dbsession[0]['session_name']))

        #print("dbsession : " + dbsession[0]['session_name'])

        #self.DBConnect("update test set session_name = '"+session_id+"' where phone = '01084520997';")
        #print ("session_id" + str(session_id))
        talk_res = talk_pb2.TalkResponse()
        #print ("session_id" + str(session_id))
        print("talk : ", talk.utter.utter)
        ##초기 모델 설정
        dbsession = self.DBConnect("select model from test where phone = '" +
                                   phoneNum + "';")
        if dbsession[0]['model'] is None:
            model = "Happy_Call_HH"
        else:
            model = dbsession[0]['model']

        #question = talk.utter.utter
        meta = dict()
        #meta['seq_id'] = util.time_check(0)
        meta['log_type'] = 'SVC'
        meta['svc_name'] = 'DA'

        #output = ""
        original_answer = ""
        engine_path = list()
        answer_engine = "None"
        status_code = ""
        status_message = ""
        flag = False
        weight = 0
        code = 'None'

        # 참고 - task4 삭제,
        #개인정보 호출
        dbsession = self.DBConnect(
            "select user_name,join_month,join_day,insurance_contractor,insurance_insured,insurance_closeproduct,privacy_add1,privacy_add2,insurance_productname from test where phone = '"
            + phoneNum + "';")
        #user_name 통화자(가입자)
        #join_month 가입 월
        #join_day 가입 일
        #insurance_contractor 가입 계약자
        #insurance_insured 가입 피보험자
        #insurance_closeproduct 무해지상품 가입여부
        #privacy_add1 메인주소
        #privacy_add2 세부주소
        user_name = dbsession[0]['user_name']
        join_month = dbsession[0]['join_month']
        join_day = dbsession[0]['join_day']
        insurance_contractor = dbsession[0]['insurance_contractor']
        insurance_insured = dbsession[0]['insurance_insured']
        insurance_closeproduct = dbsession[0]['insurance_closeproduct']
        insurance_productname = dbsession[0]['insurance_productname']
        privacy_add1 = dbsession[0]['privacy_add1']
        privacy_add2 = dbsession[0]['privacy_add2']

        # SDS
        dbtask = self.DBConnect("select task from test where phone = '" +
                                phoneNum + "';")
        task = dbtask[0]['task']
        if task == 'task3' and insurance_contractor == insurance_insured:
            sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
            if sds_intent == 'affirm':
                talk.utter.utter = "$task5$"

        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        if task == 'task2' and sds_intent == "affirm":
            print("성공11111")
            self.DBConnect("update test set model='privacy' where phone = '" +
                           phoneNum + "';")
            model = 'privacy'

        #입력받는 주소를 여기다가 처리를 해줘야함
        if task == 'PRIVACY2' and sds_intent == "affirm":
            print("성공22222")
            self.DBConnect(
                "update test set model='Happy_Call_HH' where phone = '" +
                phoneNum + "';")
            model = 'Happy_Call_HH'
        if task == 'PRIVACY3' and sds_intent == "privacy3":
            print("성공333333")
            self.DBConnect(
                "update test set model='Happy_Call_HH' where phone = '" +
                phoneNum + "';")
            model = 'Happy_Call_HH'

        sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)
        #self.DBConnect("update test set task='" + sds_res['current_task'] + "' where phone = '" + phoneNum + "';")
        #sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        #print("==========sds===========" + sds_intent)

        #if sds_res['current_task'] == 'PRIVACY_END':
        #    talk.utter.utter = '네'
        #    sds_res = self.Sds.Talk(talk.utter.utter, session_id, model)

        # sds_intent = self.Sds.GetIntent(talk.utter.utter, model)

        # 결과값 DB에 저장하는 방식
        b = []
        for i in range(1, 15):
            b.append("task" + str(i))
        for i in range(1, 4):
            b.append("PRIVACY" + str(i))

        if task in b:
            if sds_intent == 'affirm':
                self.DBConnect("update test set " + task +
                               "='네' where phone = '" + phoneNum + "';")
            elif sds_intent == 'negate':
                self.DBConnect("update test set " + task +
                               "='아니오' where phone = '" + phoneNum + "';")
            else:
                self.DBConnect("update test set " + task + "='" +
                               talk.utter.utter + "' where phone = '" +
                               phoneNum + "';")
        #if sds_res['current_task'] == "timeEnd" and sds_res['intent'] == "affirm":

        #print(sds_res['best_slu'])
        print("SDS Start!")
        #dbtask = self.DBConnect("select task from test where phone = '" + phoneNum + "';")
        #task = dbtask[0]['task']

        #print("++++++++++++++++taskname : " + sds_res['current_task'] + "intent : " + dialog_act)

        print(sds_res)
        #print("===============test=============")

        original_answer = sds_res['response']
        answer_engine = "SDS"
        engine_path.append("SDS")

        #original_answer = self.unknown_answer()
        #첫 SDS 답변 입력사항
        original_answer = sds_res['response']
        talk_res.response.speech.utter = original_answer

        #시간 컨펌
        if sds_res['current_task'] == 'timeAffirm':
            items = sds_res['intent.filled_slots.items']
            #print(items)
            for id in items:
                a[id[0]] = id[1]
                print(id)
            #text_nextweek = a['nextweek']
            #다음주의 기능까지 만들어서 넣어야 할까?
            text_day = a['day']
            text_part = a['part']
            text_hour = self.readNumberHour((a['hour']))
            #text_output = self.readNumber(31)
            #talk_res.response.speech.utter = text_output
            talk_res.response.speech.utter = "말씀하신 시각이 " + text_day + " " + text_part + " " + text_hour + "시가 맞습니까?"
            #말씀하신 일정이 11월 19일 오전 3시 30분이 맞습니까?

        # if text_nextweek is None:
        #     if text_day is None:
        #         if text_hour is None:
        #             talk_res.response.speech.utter = "원하시는 시간을 말씀해주세요"
        #         if text_part is None:
        #             pass

        #질문 수정사항
        sds_intent = self.Sds.GetIntent(talk.utter.utter, model)
        #task1
        if sds_res['current_task'] == 'task1':
            talk_res.response.speech.utter = "안녕하십니까? 현대해상 홍길동입니다. " + user_name + "고객님 되십니까?"
        #task2
        if sds_res['current_task'] == 'task2':
            talk_res.response.speech.utter = "지난 " + self.readNumberMinite(
                join_month
            ) + "월" + self.readNumberMinite(
                join_day
            ) + "일 저희 현대해상에 " + insurance_productname + "보험을 가입해 주셔서 진심으로 감사드립니다. 가입하실때 상품의 중요한 사항이 제대로 설명 되었는지 확인해 드리고자 하는데요, 잠시 통화 가능하십니까?"
        #PRIVACY2
        if sds_res['current_task'] == 'PRIVACY2':
            talk_res.response.speech.utter = "고객님의 주소는 " + privacy_add1 + " " + privacy_add2 + "로 확인 되는데 맞으십니까?"
        #PRIVACY3
        if sds_res['current_task'] == 'PRIVACY3':
            talk_res.response.speech.utter = "고객님의 주소는 " + privacy_add1 + " 으로 확인되는데요~ 나머지 주소는 어떻게 되십니까?"
        # ask3
        if sds_res['current_task'] == 'task3':
            talk_res.response.speech.utter = "확인 감사드립니다. 계약하실 때 계약자 " + insurance_contractor + "님 께서 청약서, 상품설명서, 개인정보처리 동의서에 직접 서명하셨습니까?"
        # task4
        if sds_res['current_task'] == 'task4':
            talk_res.response.speech.utter = "타인의 사망을 보장 해주는 계약의 경우 보험대상자도 반드시 서면동의를 해주셔야 하는데요~ 피보험자 " + insurance_insured + "님도 직접 서명하셨습니까?"
        # task8
        if sds_res['current_task'] == 'task8':
            if insurance_closeproduct == 'Y':
                talk_res.response.speech.utter = "중도해지 또는 만기시 환급금이 납입한 보험료보다 적을 수 있다는 설명을 들으셨습니까?"
            else:
                talk_res.response.speech.utter = "보험료 납입기간 중 중도해지 시 해지환급금이 지급되지 않는다는 설명을 들으셨나요?"
        # task9
        if sds_res['current_task'] == 'task9':
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "화재벌금 담보는 중복가입시 비례보상됩니다, 화재벌금 또는 과실 치사상 벌금 담보 등은 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 1번, 실제손해액을 한도로 비례보상 된다는 설명을 들으셨다면 2번을 말씀해주세요"
        # task11
        if sds_res['current_task'] == 'task11':
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "일상생활배상책임 담보는 중복가입시 비례보상됩니다, 일상생활배상책임 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 1번, 실제손해액을 한도로 비례보상 된다는 설명을 들으셨다면 2번을 말씀해주세요"
        # task13
        if sds_res['current_task'] == 'task13':
            if sds_intent == "unknown":
                talk_res.response.speech.utter = "법률비용 담보는 중복가입시 비례보상됩니다, 법률비용 담보는 중복가입시 보험금을 중복해서 받으실 수 있다고 설명 들으셨다면 1번, 실제지급액을 한도로 비례보상 된다는 설명을 들으셨다면 2번을 말씀해주세요"

        print("[ANSWER]: " + original_answer)
        #print("[SESSION_KEY] :" + )
        print("[ENGINE]: " + answer_engine)

        #위치 전송까지
        self.DBConnect("update test set task='" + sds_res['current_task'] +
                       "' where phone = '" + phoneNum + "';")

        return talk_res