Esempio n. 1
0
    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 []
Esempio n. 2
0
    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 []
Esempio n. 3
0
    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 []
Esempio n. 4
0
    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 []
Esempio n. 5
0
    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 []
Esempio n. 6
0
    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 []
Esempio n. 7
0
    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 []
Esempio n. 8
0
    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 []
Esempio n. 9
0
    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 []