def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.customer_name) customer_name = tracker.get_slot(Entities.customer_name) bot_position = tracker.get_slot(Entities.bot_position) query = f'SELECT * FROM {Category.TABLE_NAME}' categories = SqlUtils.get_result(query, Category) if len(categories) == 0: message = 'Xin lỗi ' + prefix_name + customer_name + '. ' \ + bot_position + ' không tìm thấy category nào trong cơ sở dữ liệu.' dispatcher.utter_message(message) else: quick_reply_elements = [] for category in categories: element = QuickReplyElement( content_type=QuickReplyElement.TEXT, title=category.categoryName, payload=f'cho a xem loại giày {category.categoryName}') quick_reply_elements.append(element) quick_reply_template = QuickReplies( text_before_template= f'Hiện bên {bot_position} có những loại này. Mời {prefix_name} chọn:', list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message( json_message=quick_reply_template.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.prefix_name) customer_name = tracker.get_slot(Entities.customer_name) bot_position = tracker.get_slot(Entities.bot_position) quick_reply_elements = [ # text on screen and the text send back to server QuickReplyElement(QuickReplyElement.TEXT, 'Bạn có giày gì?', 'bạn có giày gì?'), QuickReplyElement(QuickReplyElement.TEXT, 'Xem giày mới', 'có đôi nào mới ra k?'), QuickReplyElement(QuickReplyElement.TEXT, 'Xem giày đang hot', 'cho a xem vài đôi giày đang hot đi'), QuickReplyElement(QuickReplyElement.TEXT, 'Có mã giảm giá k?', 'có mã giảm giá k bạn?'), QuickReplyElement(QuickReplyElement.TEXT, 'Cho xem giỏ hàng', 'cho tôi xem giỏ hàng'), QuickReplyElement(QuickReplyElement.TEXT, 'Hướng dẫn', 'help'), QuickReplyElement(QuickReplyElement.TEXT, 'K có gì', 'nope'), ] quick_replies = QuickReplies( text_before_template=f'{prefix_name} muốn làm gì?', list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message(json_message=quick_replies.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.prefix_name) messenger_id = tracker.current_state()["sender_id"] coupon_id = tracker.get_slot(Entities.coupon_id) coupon_code = tracker.get_slot(Entities.coupon_code) MyWebUrl.get_edit_cart_url(messenger_id) buttons = [ UrlButton( title='Xem giỏ hàng', url_access=f'{MyWebUrl.get_edit_cart_url(messenger_id)}'), PostBackButton(title='Đặt hàng luôn', str_send_to_webhook=f'đặt hàng nào'), ] if coupon_code: button_template = ButtonTemplate( f'Hiện {prefix_name} đang có mã giảm giá {coupon_code} đó. {prefix_name} có muốn đặt hàng luôn không?', buttons) else: button_template = ButtonTemplate( f'Giỏ hàng của {prefix_name} đây ạ', buttons) dispatcher.utter_message( json_message=button_template.to_json_message()) # xem tiep quick_reply_elements = [ QuickReplyElement(QuickReplyElement.TEXT, 'Xem thêm giày', 'Xem đôi giày khác'), ] text = 'Hành động khác:' if not coupon_id: text = '{} có muốn lấy mã giảm giá không ạ?'.format(prefix_name) quick_reply_elements.append( QuickReplyElement(QuickReplyElement.TEXT, 'Lấy mã giảm giá', 'cho tôi xem mã giảm giá'), ) quick_replies = QuickReplies( text_before_template=text, list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message(json_message=quick_replies.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: print('_____' + self.name()) quick_reply_elements = [ # text on screen and the text send back to server QuickReplyElement(QuickReplyElement.TEXT, 'OK', 'ok'), QuickReplyElement(QuickReplyElement.TEXT, 'Không', 'không'), ] quick_replies = QuickReplies( text_before_template='Vui lòng xác nhận:', list_quick_reply_elements=quick_reply_elements ) dispatcher.utter_message(json_message=quick_replies.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: """ Trả về generic template 6 sản phẩm hot + quick replies đòi xem thêm :param dispatcher: :param tracker: :param domain: :return: """ print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.prefix_name) customer_name = tracker.get_slot(Entities.customer_name) bot_position = tracker.get_slot(Entities.bot_position) query = f''' select distinct mainapp_shoe.id as shoe_id, mainapp_shoe.shoeName, mainapp_shoe.shoeModel, mainapp_shoe.shoeThumbnail, mainapp_shoe.dateCreated, mainapp_shoe.image_static, mainapp_shoe.viewCount, mainapp_shoe.quantitySold, mainapp_shoe.favouriteCount, mainapp_category.categoryName, mainapp_detailshoe.newPrice from mainapp_shoe inner join mainapp_detailshoe on mainapp_shoe.id = mainapp_detailshoe.shoe_id inner join mainapp_category on mainapp_shoe.category_id = mainapp_category.id where active = 1 order by dateCreated desc limit 0, 5; ''' shoes = SqlUtils.get_result(query, Shoe) shoes: List[Shoe] detail_shoes = SqlUtils.get_result(query, DetailShoe) if len(detail_shoes) == 0 or len(shoes) == 0: err_code = ErrorCode.ERR_IN_ACT_GET_NEW_SHOE err_message = f'Xin lỗi {prefix_name}{customer_name}, hệ thống đã xảy ra lỗi. error code={err_code}' dispatcher.utter_message(text=err_message) else: dispatcher.utter_message(text='Đây là 5 đôi bên ' + bot_position + ' mới nhập đó ' + prefix_name + customer_name) dispatcher.utter_message( text= f'Đôi mới nhất được nhập từ ngày {shoes[0].dateCreated}, mời {prefix_name} xem:' ) # horizontal_template_elements = [] # for index in range(len(shoes)): # shoe = shoes[index] # detail_shoe = detail_shoes[index] # # buttons = [ # PostBackButton( # title='Xem đôi này ' + shoe.shoeModel, # str_send_to_webhook='tôi muốn xem mẫu ' + shoe.shoeModel + ' id ' + str(shoe.shoe_id) # ), # UrlButton( # title='Xem trên website', # url_access=MyWebUrl.get_detail_shoe_url(shoe.shoe_id) # ), # ] # # element = HorizontalTemplateElement( # image_url=MyWebUrl.get_shoe_image_url(shoe.shoeThumbnail), # # image_url='https://www.w3schools.com/w3css/img_lights.jpg', # title=shoe.shoeName, # subtitle=price_format(detail_shoe.newPrice), # default_action=HorizontalTemplateElement.DefaultAction(MyWebUrl.get_detail_shoe_url(shoe.shoe_id)), # list_buttons=buttons, # ) # horizontal_template_elements.append(element) # horizontal_template = HorizontalTemplate(horizontal_template_elements) horizontal_template = HorizontalTemplate.from_shoes_detail_shoe( shoes=shoes, detail_shoes=detail_shoes) dispatcher.utter_message( json_message=horizontal_template.to_json_message()) # xem tiep quick_reply_elements = [ QuickReplyElement(QuickReplyElement.TEXT, 'Xem thêm', 'còn đôi nào khác k?'), QuickReplyElement(QuickReplyElement.TEXT, 'Thôi', 'tôi muốn xem menu'), ] quick_replies = QuickReplies( text_before_template='Xin hãy chọn một hành động', list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message( json_message=quick_replies.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: """ Trả về list cacs mau :param dispatcher: :param tracker: :param domain: :return: """ print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.prefix_name) customer_name = tracker.get_slot(Entities.customer_name) bot_position = tracker.get_slot(Entities.bot_position) shoe_id = tracker.get_slot(Entities.shoe_id) shoe_model = tracker.get_slot(Entities.shoe_model) # have not chosen shoe yet if shoe_model is None and shoe_id is None: err_message = f'Xin lỗi {customer_name}, {prefix_name} chưa chọn giày.' dispatcher.utter_message(text=err_message) return [] if shoe_id: query = f'call get_colors({shoe_id})' elif shoe_model: query = f'call get_colors_by_model("{shoe_model}")' debug_print_content('query: ' + query) colors = SqlUtils.get_result(query, Color) if len(colors) == 0: err_code = ErrorCode.ERR_IN_ACT_CHOSE_COLOR err_message = f'Xin lỗi {prefix_name}{customer_name}, hệ thống đã xảy ra lỗi. error={err_code}' dispatcher.utter_message(text=err_message) return [] # xem tiep quick_reply_elements = [] for color in colors: quick_reply_elements.append( QuickReplyElement( QuickReplyElement.TEXT, color.colorName, 'tôi lấy màu {}'.format(color.colorName.lower()), image_url=MyWebUrl.get_color_image('colors/red.png'))) if len(colors) == 1: text = f'Bên cửa hàng {bot_position} chỉ còn màu này thôi {prefix_name} ạ:' else: text = prefix_name.capitalize() + ' hãy chọn một màu bên dưới:' quick_replies = QuickReplies( text_before_template=text, list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message(json_message=quick_replies.to_json_message()) # debug_print_content('quick_replies') # debug_print_content(quick_replies.to_json_message()) # print('*****************************************************') # print(horizontal_template.to_json_message()) # print('*****************************************************') # pprint(quick_replies.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: """ Trả về quick replies sizes :param dispatcher: :param tracker: :param domain: :return: """ print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.prefix_name) customer_name = tracker.get_slot(Entities.customer_name) bot_position = tracker.get_slot(Entities.bot_position) shoe_id = tracker.get_slot(Entities.shoe_id) shoe_model = tracker.get_slot(Entities.shoe_model) shoe_color = tracker.get_slot(Entities.shoe_color) color_id = tracker.get_slot(Entities.color_id) # have not chosen shoe yet if shoe_model is None and shoe_id is None: err_message = f'Xin lỗi {customer_name}, {prefix_name} chưa chọn giày.' dispatcher.utter_message(text=err_message) return [FollowupAction('act_show_menu')] # if color_id: # noinspection SqlNoDataSourceInspection query = f''' select size from mainapp_shoe inner join mainapp_detailshoe on mainapp_detailshoe.shoe_id = mainapp_shoe.id where mainapp_shoe.id = {shoe_id} and mainapp_detailshoe.color_id = {color_id} and mainapp_detailshoe.quantityAvailable > 0; ''' # debug_print_content('query: ' + query) detail_shoes = SqlUtils.get_result(query, DetailShoe) if len(detail_shoes) == 0: err_code = ErrorCode.ERR_IN_ACT_CHOSE_SIZE err_message = f'Xin lỗi {prefix_name}{customer_name}, hệ thống đã xảy ra lỗi. error={err_code}' dispatcher.utter_message(text=err_message) return [] quick_reply_elements = [] for detail_shoe in detail_shoes: quick_reply_elements.append( QuickReplyElement( content_type=QuickReplyElement.TEXT, title=str(detail_shoe.size), payload=f'lấy size {detail_shoe.size}', )) if len(detail_shoes) == 1 and shoe_color: text = f'Bên {bot_position} màu {shoe_color} chỉ còn size này thôi {prefix_name} ạ:' elif len(detail_shoes) == 1: text = f'Đôi {shoe_model} chỉ còn size này thôi {prefix_name} ạ:' else: text = f'{prefix_name} muốn lấy size nào?'.capitalize() quick_replies = QuickReplies( text_before_template=text, list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message(json_message=quick_replies.to_json_message()) # debug_print_content('quick_replies') # debug_print_content(quick_replies.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: """ Trả về generic template san pham cuoi va ask them vao gio hang/thanh toan :param dispatcher: :param tracker: :param domain: :return: """ # debug('\n_________act_shoe_new_shoe_________') print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.prefix_name) customer_name = tracker.get_slot(Entities.customer_name) messenger_id = tracker.current_state()["sender_id"] bot_position = tracker.get_slot(Entities.bot_position) shoe_id = tracker.get_slot(Entities.shoe_id) shoe_model = tracker.get_slot(Entities.shoe_model) shoe_size = tracker.get_slot(Entities.shoe_size) color_id = tracker.get_slot(Entities.color_id) color_name = tracker.get_slot(Entities.shoe_color) coupon_id = tracker.get_slot(Entities.coupon_id) coupon_code = tracker.get_slot(Entities.coupon_code) # get_final_shoe(shoe_id int, shoe_size int, color_id int) # query = 'call get_final_shoe({}, {}, {})'.format(shoe_id, shoe_size, color_id) query = f''' select mainapp_shoe.id as shoe_id, mainapp_shoe.shoeName, mainapp_shoe.shoeModel, mainapp_shoe.shoeThumbnail, mainapp_shoe.image_static, mainapp_detailshoe.id as detailShoe_id, mainapp_detailshoe.newPrice, mainapp_detailshoe.quantityAvailable, mainapp_detailshoe.size, mainapp_color.id as color_id, mainapp_color.colorName from mainapp_shoe inner join mainapp_detailshoe on (mainapp_shoe.id = mainapp_detailshoe.shoe_id) inner join mainapp_color on (mainapp_detailshoe.color_id = mainapp_color.id) where mainapp_shoe.id = {shoe_id} and mainapp_detailshoe.size = {shoe_size} and mainapp_color.id = {color_id}; ''' shoes, detail_shoes, colors = SqlUtils.get_result( query, Shoe, DetailShoe, Color) if len(detail_shoes) == 0: err_code = ErrorCode.ERR_IN_ACT_SHOW_FINAL_CHOICE err_message = f'Xin lỗi {prefix_name}{customer_name}, hệ thống đã xảy ra lỗi. error code={err_code}' dispatcher.utter_message(text=err_message) return [] elif detail_shoes[0].quantityAvailable < 1: text = 'Xin lỗi {}, đôi {} size {} màu {} hết hàng rồi ạ' \ .format(prefix_name, shoe_model, shoe_size, color_name) dispatcher.utter_message(text=text) return [] else: text = '{} thêm món này vào giỏ hàng giúp {} nhé'.format( bot_position, prefix_name) dispatcher.utter_message(text=text) horizontal_template_elements = [] for index in range(len(shoes)): shoe = shoes[index] detail_shoe = detail_shoes[index] detail_shoe: DetailShoe buttons = [ PostBackButton( title='Thêm vào giỏ hàng' + shoe.shoeModel, str_send_to_webhook='ok luôn. thêm vào giỏ hàng'), # UrlButton( # title='Mua luôn đôi này', # url_access=MyWebUrl.get_buy_now_url(messenger_id=messenger_id, # detail_shoe_id=detail_shoe.detailShoe_id) # ), ] element = HorizontalTemplateElement( image_url=shoe.image_static, title=shoe.shoeName, subtitle=f'màu: {color_name}, size: {shoe_size}\n ' + price_format(detail_shoe.newPrice), default_action=HorizontalTemplateElement.DefaultAction( MyWebUrl.get_detail_shoe_url(shoe.shoe_id)), list_buttons=buttons, ) horizontal_template_elements.append(element) horizontal_template = HorizontalTemplate( horizontal_template_elements) dispatcher.utter_message( json_message=horizontal_template.to_json_message()) # xem tiep quick_reply_elements = [ QuickReplyElement(QuickReplyElement.TEXT, 'Xem thêm giày', 'Xem đôi giày khác'), ] text = 'Hành động khác:' # if not coupon_id: # text = '{} có muốn lấy mã giảm giá không ạ?'.format(prefix_name) # quick_reply_elements.append( # QuickReplyElement(QuickReplyElement.TEXT, 'Lấy mã giảm giá', 'cho tôi xem mã giảm giá'), # ) quick_replies = QuickReplies( text_before_template=text, list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message( json_message=quick_replies.to_json_message()) # print('*****************************************************') # print(horizontal_template.to_json_message()) # print('*****************************************************') # pprint(quick_replies.to_json_message()) return []
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: """ Trả về generic template 6 sản phẩm hot + quick replies đòi xem thêm :param dispatcher: :param tracker: :param domain: :return: """ # debug('\n_________act_shoe_new_shoe_________') print('_____' + self.name()) prefix_name = tracker.get_slot(Entities.prefix_name) customer_name = tracker.get_slot(Entities.customer_name) bot_position = tracker.get_slot(Entities.bot_position) err_message = f'Xin lỗi {prefix_name}{customer_name}, hệ thống đã xảy ra lỗi. ' query = ''' select distinct mainapp_shoe.id as shoe_id, mainapp_shoe.shoeName, mainapp_shoe.shoeModel, mainapp_shoe.viewCount, mainapp_shoe.quantitySold, mainapp_shoe.image_static, mainapp_shoe.favouriteCount, mainapp_shoe.shoeThumbnail, mainapp_category.categoryName, mainapp_detailshoe.newPrice, sum(mainapp_detailshoe.quantityAvailable) as totalQuantityAvailable, (mainapp_shoe.viewCount + mainapp_shoe.quantitySold + mainapp_shoe.favouriteCount) as hotCount, datediff(curdate(), mainapp_shoe.dateCreated) as days, ((mainapp_shoe.viewCount + mainapp_shoe.quantitySold + mainapp_shoe.favouriteCount)/datediff(curdate(), mainapp_shoe.dateCreated)) as hotRate from mainapp_shoe inner join mainapp_detailshoe on mainapp_shoe.id = mainapp_detailshoe.shoe_id inner join mainapp_category on mainapp_shoe.category_id = mainapp_category.id where active = 1 group by mainapp_shoe.id, mainapp_shoe.shoeName, mainapp_shoe.shoeModel, mainapp_shoe.viewCount, mainapp_shoe.quantitySold, mainapp_shoe.favouriteCount, mainapp_shoe.shoeThumbnail, mainapp_shoe.image_static, mainapp_category.categoryName, mainapp_detailshoe.newPrice having totalQuantityAvailable > 0 order by hotRate desc limit 0, 5; ''' shoes = SqlUtils.get_result(query, Shoe) detail_shoes = SqlUtils.get_result(query, DetailShoe) if len(shoes) == 0: err_code = ErrorCode.ERR_IN_ACT_GET_NEW_SHOE err_message = err_message + 'error code=' + err_code dispatcher.utter_message(err_message) else: dispatcher.utter_message( text='Dưới đây là top những đôi đc mọi người xem và mua nhiều nhất đó ' + prefix_name + customer_name) # horizontal_template_elements = [] # for index in range(len(shoes)): # shoe = shoes[index] # detail_shoe = detail_shoes[index] # # buttons = [ # PostBackButton( # title='Xem đôi này ' + shoe.shoeModel, # str_send_to_webhook='tôi muốn xem mẫu ' + shoe.shoeModel # ), # UrlButton( # title='Xem trên website', # url_access=MyWebUrl.get_detail_shoe_url(shoe.shoe_id) # ), # ] # # element = HorizontalTemplateElement( # image_url=shoe.shoeThumbnail, # title=shoe.shoeName, # subtitle=price_format(detail_shoe.newPrice), # default_action='', # list_buttons=buttons, # ) # horizontal_template_elements.append(element) # horizontal_template = HorizontalTemplate(horizontal_template_elements) horizontal_template = HorizontalTemplate.from_shoes_detail_shoe(shoes=shoes, detail_shoes=detail_shoes) dispatcher.utter_message(json_message=horizontal_template.to_json_message()) # xem tiep quick_reply_elements = [ QuickReplyElement(QuickReplyElement.TEXT, 'Xem thêm', 'còn đôi nào khác k?'), QuickReplyElement(QuickReplyElement.TEXT, 'Xem lại menu', 'tôi muốn xem menu'), ] quick_replies = QuickReplies(text_before_template='', list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message(json_message=quick_replies.to_json_message()) # xem tiep quick_reply_elements = [ QuickReplyElement(QuickReplyElement.TEXT, 'Xem thêm', 'còn đôi nào khác k?'), QuickReplyElement(QuickReplyElement.TEXT, 'Thôi', 'tôi muốn xem menu'), ] quick_replies = QuickReplies(text_before_template='Xin hãy chọn một hành động', list_quick_reply_elements=quick_reply_elements) dispatcher.utter_message(json_message=quick_replies.to_json_message()) return []