def send_user_subscribe_msg(user_id): if user_id is None: app.logger.warn('Trying to send a subscribe message without a user_id') return None # quick_replies = QuickReplies([ # QuickReply(content_type="text", # title="Yes", # payload=f"register {user_id}", ), # QuickReply(content_type="text", # title="No", # payload=f"ignore {user_id}", ), # ]) # msg = elements.DynamicText(text='Do you want to get daily quotes?', # quick_replies=quick_replies) btn1 = elements.Button(button_type='postback', title='Yes', payload=f"register {user_id}") btn2 = elements.Button(button_type='postback', title='No', payload=f"ignore {user_id}") elems = elements.Element(title='Do you want to get daily quotes', buttons=[btn1, btn2]) msg = templates.GenericTemplate(elements=[elems]) return messenger.send_msg(msg, user_id)
def test_generic_template_with_single_element(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') elems = elements.Element(title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[btn]) res = templates.GenericTemplate(elements=elems) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'generic', 'elements': [{ 'title': 'Element', 'item_url': 'http://facebook.com', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }] }] } } } assert expected == res.to_dict()
def test_generic_template_with_quick_replies(self): btn = elements.Button( button_type='web_url', title='Web button', url='http://facebook.com' ) elems = elements.Element( title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[ btn ] ) qr = quick_replies.QuickReply(title='QR', payload='QR payload') qrs = quick_replies.QuickReplies(quick_replies=[qr] * 2) res = templates.GenericTemplate( elements=[elems], quick_replies=qrs ) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'generic', 'sharable': False, 'elements': [ { 'title': 'Element', 'item_url': 'http://facebook.com', 'image_url': 'http://facebook.com/image.jpg', 'subtitle': 'Subtitle', 'buttons': [ { 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' } ] } ], }, }, 'quick_replies': [ { 'content_type': 'text', 'title': 'QR', 'payload': 'QR payload' }, { 'content_type': 'text', 'title': 'QR', 'payload': 'QR payload' }, ], } assert expected == res.to_dict()
def message(self, message): print('message') print(message) get_sender = Text(text= str(message['sender']['id'])) get_text = Text(text= str(message['message']['text'])) try: chck_payload = Text(text= str(message['message']['quick_reply']['payload'])) except KeyError: chck_payload = 'text' text = get_text.to_dict() text = text['text'] check = self.read(text, chck_payload) print(check) # problem hereeeee if check != 2: print('check') response = self.movie_route() if self.questions_check[response[0]] == 'quick': print(response) quick_reply = [quick_replies.QuickReply(title=i, payload='quick') for i in response[1]] quick_reply += [quick_replies.QuickReply(title='Go back', payload='quick')] quick_replies_set = quick_replies.QuickReplies(quick_replies=quick_reply) text = { 'text': response[0]} text['quick_replies'] = quick_replies_set.to_dict() self.send(text, 'RESPONSE') else: text = {'text': response[0]} self.send(text, 'RESPONSE') print('carousel') print(self.movies) elems = [] i = 0 while i < len(self.movies[0]): btn = elements.Button(title='Read More', payload=movies[2][i], button_type='postback') elem = elements.Element( title=self.movies[2][i], image_url=self.movies[0][i], subtitle=self.movies[1][i], buttons=[ btn ] ) elems.append(elem) i+=1 res = templates.GenericTemplate(elements=elems) messenger.send(res.to_dict(), 'RESPONSE') quick_reply = [quick_replies.QuickReply(title='Go back', payload='quick')] quick_replies_set = quick_replies.QuickReplies(quick_replies=quick_reply) default = {'quick_replies': quick_replies_set.to_dict()} self.send(default, 'RESPONSE') print(self.movie_responses['Movies'])
def test_template_with_too_many_elements(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') elem = elements.Element(title='Element', item_url='http://facebook.com', image_url='http://facebook.com/image.jpg', subtitle='Subtitle', buttons=[btn]) elem_list = [elem] * 11 with pytest.raises(ValueError) as err: res = templates.GenericTemplate(elements=elem_list) res.to_dict() assert str( err.value ) == 'You cannot have more than 10 elements in the template.'
def test_template_with_invalid_quick_replies(self): with pytest.raises(ValueError) as err: templates.GenericTemplate(elements=None, quick_replies='wrong') assert str( err.value) == 'quick_replies must be an instance of QuickReplies.'
def test_generic_template_with_no_elements(self): with pytest.raises(ValueError) as err: res = templates.GenericTemplate(elements=[]) res.to_dict() assert str(err.value) == 'At least 1 elements are required.'
def postback(self, message): print("postback", message) user = index_user.get(message["sender"]["id"]) or {} # User not found, better index him at first if user == {}: index_user.index(message) if message["postback"]["payload"] == State.SCHEDULE_ORDER: if not user.get("logged_in", False): self.send( {"text": "অর্ডার করার জন্য দয়া করে লগিন করুন। ধন্যবাদ"}) else: self.send( templates.GenericTemplate( elements=food_item_list.food_elements, ).to_dict(), "RESPONSE", ) if message["postback"]["payload"] == State.REGISTER: pass if message["postback"]["payload"] == State.HI: if message["sender"]["id"] != PAGE_ID: index_user.index(message) if "ORDER#" in message["postback"]["payload"]: update_state.update( user.get("fb_id", None), current_state=State.SCHEDULE_ORDER, state_completion=False, ) item_id = message["postback"]["payload"].split("ORDER#")[-1] # print(item_id) item = [ f for f in food_item_list.food_list["foods"] if f["food_id"] == item_id ][0] scheduled_day = pendulum.now().add(days=1).format("DD-MMM-YYYY") mongodb.cx.caterbot.orders.update_one( { "userId": user.get("fb_id", None), "scheduled_day": scheduled_day }, update={ "$set": { "userId": user.get("fb_id", None), "item": item, "scheduled_day": scheduled_day, "state": State.PENDING, } }, upsert=True, ) self.send(food_confirm_decision.get_confirmation(item), "RESPONSE") if message["postback"]["payload"] == State.LOGIN: if message["sender"]["id"] != PAGE_ID: if user.get("logged_in", False): self.send({ "text": "আপনি লগড-ইন অবস্থায়ই আছেন, চাইলে আগামীকালের জন্য অর্ডার প্লেস করুন। ধন্যবাদ।" }) else: update_state.update( message["sender"]["id"], current_state=State.LOGIN, state_completion=False, ) self.send( { "text": "দয়া করে ইউজারনেম ও পাসওয়ার্ড দিন, উদাহরণ: username password" }, "RESPONSE", )