def handle_message(self, event, context): message = event.get('content') if '비트코인' in message: self.send_message('비트코인') self.send_message(coin_detail('btc_krw')) msg = Message(event).set_text('비트코인 캐시를 조회하시겠습니까?') \ .add_quick_reply('캐시') self.send_message(msg) elif '캐시' in message: self.send_message('비트코인 캐시') self.send_message(coin_detail('bch_krw')) elif '이더리움' in message: self.send_message('이더리움') self.send_message(coin_detail('eth_krw')) msg = Message(event).set_text('이더리움 클래식을 조회하시겠습니까?') \ .add_quick_reply('클래식') self.send_message(msg) elif '리플' in message: self.send_message('리플') self.send_message('리플은 오류로 인해 조회할 수 없습니다.') self.send_message(coin_detail('xrp_krw')) elif '이오스' in message: self.send_message('이오스') self.send_message(coin_detail('eos_krw')) elif '라이트' in message: self.send_message('라이트 코인') self.send_message(coin_detail('ltc_krw')) elif '클래식' in message: self.send_message('이더리움 클래식') self.send_message(coin_detail('etc_krw')) else: self.send_message(message, ' 은(는) 아직 준비되지 않았습니다. 기다려주세요.')
def whole_reservation(self, event, message): answer = self.get_project_data().get( message) #Properties에 저장된 message를 저장 msg = Message(event).set_text(answer.get('answer')) if answer.get('link'): #Properties에 저장된 link를 불러옴 msg.add_url_button(answer.get('title'), answer.get('link')) self.send_message(msg)
def send_menu(self, event): menu = self.get_project_data()['menu'] names = [name for name in menu.keys()] message = Message(event).set_text('어떤 음료를 원하시나요?') for name in names: message.add_postback_button(name, '/show {}'.format(name)) self.send_message(message)
def send_error_message(self, event): menu = self.get_project_data().get('set_menu').split( ',') #bothub Properties 메뉴 생성 message = Message(event).set_text('죄송합니다.ㅠ_ㅠ\n'\ '무슨 말씀인지 이해를 못했어요.\n'\ '다시 한번 입력해주세요.') for item in menu: message.add_keyboard_button(item) #키보드 버튼 생성 self.send_message(message)
def send_menu(self, event): menu = self.get_project_data()['menu'] names = [name for name in menu.keys()] message = Message(event).set_text('What kind of juice would you like?') for name in names: message.add_postback_button(name, '/show {}'.format(name)) self.send_message(message)
def recognize(self, event, context): response = self.nlu('apiai').ask(event=event) action = response.action message = Message(event) if action.intent == 'input.unknown': return False # if not action.completed: # message.set_text(response.next_message) # self.send_message(message) # return True if action.intent == 'hit-movies': message.set_text(response.next_message) self.send_message(message) self.send_box_office(event, context, []) return True if action.intent == 'movie-sentiment': message.set_text(response.next_message) self.send_message(message) params = action.parameters # self.send_order(event, context, (params['menu'], params['quantity'])) message2 = Message(event).set_text(params['movie-name']) self.send_message(message2) return True message.set_text(response.next_message) self.send_message(message) return True
def send_menu(self, event): # bothub studio 의 project property 의 menu 값을 가져온다 menu = self.get_project_data()['menu'] # menu 에서 key 값(name)만 받아와 names 에 저장 names = [name for name in menu.keys()] message = Message(event).set_text('어떤 음료를 원하세요?') # 버튼으로 메뉴를 하나하나 보여줌 for name in names: message.add_postback_button(name, '/show {}'.format(name)) self.send_message(message)
def set_pool6(self, event, context, **kwargs): q1 = kwargs.get('question1') #slots id 와 대응 q2 = kwargs.get('question2') sql = "select * from meeting where name=%s and id=%s" #이름과 예약번호가 일치하는지 확인하는 query cur.execute(sql, (q1, q2)) rows = cur.fetchall() if (str(rows) == "()"): #일치하는 query가 없을 때 menu = self.get_project_data().get('set_menu').split( ',') #bothub Properties 메뉴 생성 message = Message( event).set_text('\'' + q1 + '\'님의 예약번호 ' + '\'' + q2 + '\'번 예약 내역이 없습니다.\n다시 한번 입력해주세요.') for item in menu: message.add_keyboard_button(item) #키보드 버튼 생성 self.send_message(message) else: #일치하는 query가 있을 때 sql = "delete from meeting where name=%s and id=%s" #일치하는 이름과 회원번호를 지우는 query cur.execute(sql, (q1, q2)) db.commit() menu = self.get_project_data().get('set_menu').split( ',') #bothub Properties 메뉴 생성 message = Message(event).set_text('\'' + q1 + '\'님의 예약번호 \'' + q2 + '\'번 예약이 취소되었습니다.') for item in menu: message.add_keyboard_button(item) #키보드 버튼 생성 self.send_message(message)
def on_help(self, event, context): message = Message(event) message.set_text('Let me tell you what can I do.') message.add_postback_button('Stack List', '/stacks') message.add_postback_button('Layer List', '/layers') message.add_postback_button('Deploy', '/deploy') self.send_message(message)
def send_chatroom_welcome_message(self, event): menu = self.get_project_data().get('set_menu').split( ',') #bothub Properties 메뉴 생성 self.remember_chatroom(event) #id를 저장하는 함수로 이동 message = Message(event).set_text('처음뵙겠습니다. 저는 회의실을 예약하는 챗봇입니다. ^_^\n무엇을 도와드릴까요?\n\n'\ '1. 회의실 예약\n'\ '2. 날짜별 예약 현황\n'\ '3. 나의 예약 확인\n'\ '4. 날짜 수정\n'\ '5. 예약 취소') for item in menu: message.add_keyboard_button(item) #키보드 버튼 생성 self.send_message(message)
def send_welcome_message(self, event): menu = self.get_project_data().get('set_menu').split( ',') #bothub Properties 메뉴 생성 message = Message(event).set_text('안녕하세요? 저는 회의실을 예약하는 챗봇입니다. ^-^\n무엇을 도와드릴까요?\n\n'\ '1. 회의실 예약\n'\ '2. 날짜별 예약 현황\n'\ '3. 나의 예약 확인\n'\ '4. 날짜 수정\n'\ '5. 예약 취소') for item in menu: message.add_keyboard_button(item) #키보드 버튼 생성 self.send_message(message)
def send_order(self, name, event, quantity=1): self.send_message('{}를 {}잔 주문했습니다. 음료가 준비되면 알려드릴께요.'.format( name, quantity)) chat_id = self.get_project_data().get('chat_id') order_message = Message(event).set_text('{} {}잔 주문 들어왔습니다!'.format(name, quantity))\ .add_postback_button('완료', '/done {} {}'.format(event['sender']['id'], name)) self.send_message(order_message, chat_id=chat_id)
def send_drink_done(self, content, event): _, sender_id, menu_name = content.split() self.send_message('{}가 준비되었습니다. 카운터에서 수령해주세요.'.format(menu_name), chat_id=sender_id) message = Message(event).set_text('저희 가게를 이용하신 경험을 말씀해주시면 많은 도움이 됩니다.')\ .add_quick_reply('평가하기', '/feedback') self.send_message(message, chat_id=sender_id) self.send_message('고객분께 음료 완료 알림을 전송했습니다.')
def on_deploy_status(self, event, context, deploy_id): data = self.get_user_data() client = self.get_boto_client(data) response = client.describe_deployments(DeploymentIds=[deploy_id]) deploy = response['Deployments'][0] message = Message(event) message.set_text('Deployment is {Status}'.format(**deploy)) if deploy['Status'] == 'running': message.add_quick_reply('Deployment status', '/deploy_status {}'.format(deploy_id)) else: message.add_quick_reply('Layer list', '/layers') message.add_quick_reply('Deploy', '/deploy') self.send_message(message)
def test_prepare_payload_should_returns_message_data(): context = {'channel': {'channels': [{'type': 'mychannel'}]}} event = {} client = BaseChannelClient(10, 'myapikey', 'myurl', context=context) message = Message(event) data = client._prepare_payload('myid', message, channel='mychannel', event=event) assert data == { 'channel': { 'type': 'mychannel' }, 'receiver': 'myid', 'context': { 'project_id': 10, 'api_key': 'myapikey' }, 'event': {}, 'extra': None, 'message': { 'model': [], 'event': {} } }
def send_welcome_message(self, event, context, args): message = Message(event).set_text('반가워요.\n\n'\ '저는 요즘 볼만한 영화들을 알려드리고, '\ '현재 계신 곳에서 가까운 영화관들의 상영시간표를 알려드려요.\n\n' "'영화순위'나 '근처 상영관 찾기'를 입력해보세요.")\ .add_quick_reply('영화순위', '/boxoffice')\ .add_quick_reply('근처 상영관 찾기', '/find') self.send_message(message)
def send_error_message(self, event): message = Message(event).set_text('잘 모르겠네요.\n\n'\ '저는 요즘 볼만한 영화들을 알려드리고, '\ '현재 계신 곳에서 가까운 영화관들의 상영시간표를 알려드려요.\n\n' "'영화순위'나 '근처 상영관 찾기'를 입력해보세요.")\ .add_quick_reply('영화순위')\ .add_quick_reply('근처 상영관 찾기') self.send_message(message)
def test_add_keyboard_button_should_append_entry(): message = Message(None).add_keyboard_button('hello') assert message.model == [{ 'command': 'add_keyboard_button', 'args': { 'text': 'hello' } }]
def test_add_template_should_append_entry(): message = Message(None).add_template('mypayload') assert message.model == [{ 'command': 'add_template', 'args': { 'payload': 'mypayload' } }]
def send_show(self, name ,event): menu = self.get_project_data()['menu'] selected_menu = menu[name] text = '{name}는 {description}\n 가격은 {price}원 입니다.'.format(name=name, **selected_menu) message = Message(event).set_text(text)\ .add_quick_reply('{} 주문 '.format(name), '/order {}'.format(name))\ .add_quick_reply('메뉴보기') self.send_message(message)
def test_add_location_request_should_append_entry(): message = Message(None).add_location_request('hello') assert message.model == [{ 'command': 'add_location_request', 'args': { 'text': 'hello' } }]
def send_drink_done(self, content, event): _, sender_id, menu_name = content.split() self.send_message("{}가 준비되었습니다. 카운터에서 수령해주세요.".format(menu_name), chat_id=sender_id) message = Message(event).set_text('저희 가게를 이용하신 후 평가를 해주세요')\ .add_quick_reply('평가하기','/feedback') self.send_message(message, chat_id=sender_id) # chat_id=sender_id : 요청을 보낸 사람의 id, 고객에게 대답 전송 self.send_message('고객분께 음료 완료 알림을 전송했습니다.')
def on_use_stack(self, event, context, stack_id, stack_name): data = self.get_user_data() data['stack_id'] = stack_id self.set_user_data(data) message = Message(event) message.set_text('Use stack {} now'.format(stack_name)) message.add_postback_button('Layer list', '/layers') message.add_postback_button('Deploy', '/deploy') self.send_message(message)
def send_drink_done(self, content, event): _, sender_id, menu_name = content.split() self.send_message( '{} is ready. Please take your drinks.'.format(menu_name), chat_id=sender_id) message = Message(event).set_text('Let us know how we did.')\ .add_quick_reply('Evaluate', '/feedback') self.send_message(message, chat_id=sender_id) self.send_message('Customer was notified to pick up drinks.')
def send_welcome_message(self, event): message = Message(event).set_text('안녕하세요. 오늘을 함께할 cs496 채팅 봇입니다.\n ' + '시작가능하신 명령어로 \'영화순위\' , \'근처 상영관 찾기\' ,\'메뉴\', \'날씨\', \'매드캠프\'가 있습니다. ')\ .add_quick_reply('영화순위')\ .add_quick_reply('근처 상영관 찾기')\ .add_quick_reply('메뉴보기')\ .add_quick_reply('날씨')\ .add_quick_reply('매드캠프') self.send_message(message)
def send_show(self, name, event): menu = self.get_project_data()['menu'] selected_menu = menu[name] text = '{name}는 {description}\n가격은 {price}원이예요.'.format( name=name, **selected_menu) message = Message(event).set_text(text)\ .add_postback_button('{} 주문'.format(name), payload = '/order {}'.format(name))\ .add_postback_button('메뉴보기', '메뉴보기') self.send_message(message)
def test_set_text_with_markdown_should_append_entry(): message = Message(None).set_text(HTML('hello')) assert message.model == [{ 'command': 'set_text', 'args': { 'text': 'hello', 'markup': 'html' } }]
def test_add_postback_button_should_append_entry(): message = Message(None).add_postback_button('hello', 'mypayload') assert message.model == [{ 'command': 'add_postback_button', 'args': { 'text': 'hello', 'payload': 'mypayload' } }]
def test_set_text_should_append_entry(): message = Message(None).set_text('hello') assert message.model == [{ 'command': 'set_text', 'args': { 'text': 'hello', 'markup': None } }]
def set_pool4(self, event, context, **kwargs): try: q1 = kwargs.get('question1') #slots id 와 대응 q2 = kwargs.get('question2') sql = "select * from meeting where id=%s and name=%s" #예약번호와 이름이 일치하는지 확인하는 query cur.execute(sql, (q2, q1)) rows = cur.fetchall() for row in rows: global meetingRoom2 #예약 정보를 set_pool7으로 넘겨주기 위해 global 변수 선언 global id2 global name2 meetingRoom2 = row['meetingRoom'] id2 = row['id'] name2 = row['name'] #각 column에 맞지 않는 데이터가 들어갔을 때 except: ''' menu = self.get_project_data().get('set_menu').split(',') #bothub Properties 메뉴 생성 message = Message(event).set_text('예약번호가 올바르지 않습니다.\n다시 한번 입력해주세요.') for item in menu: message.add_keyboard_button(item) #키보드 버튼 생성 self.send_message(message) ''' else: if (str(rows) == "()"): #예약번호와 이름이 일치하는 query가 없을 때 menu = self.get_project_data().get('set_menu').split( ',') #bothub Properties 메뉴 생성 message = Message( event).set_text('\'' + q1 + '\'님의 예약번호 ' + '\'' + q2 + '\'번 예약 내역이 없습니다.\n다시 한번 입력해주세요.') for item in menu: message.add_keyboard_button(item) #키보드 버튼 생성 self.send_message(message) else: #중복확인 query에서 중복되는 값이 안나왔을 때 self.modify_data(event, context)