def ask_user_for_origin(user_id, savedHome, savedUniversity):
    recipient = messages.Recipient(user_id)
    if savedHome:
        home_location_button = elements.PostbackButton(title=savedHome,
                                                       payload="useSavedHome")
    if savedUniversity:
        university_location_button = elements.PostbackButton(
            title=savedUniversity, payload="useSavedUniversity")
    other_location_button = elements.PostbackButton(title="Other",
                                                    payload="useOtherLocation")
    if savedHome and savedUniversity:
        template = templates.ButtonTemplate(text="What about for your origin?",
                                            buttons=[
                                                home_location_button,
                                                university_location_button,
                                                other_location_button
                                            ])
    elif savedHome:
        template = templates.ButtonTemplate(
            text="What about for your origin?",
            buttons=[home_location_button, other_location_button])
    elif savedUniversity:
        template = templates.ButtonTemplate(
            text="What about for your origin?",
            buttons=[university_location_button, other_location_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
    return
Beispiel #2
0
def respond_to_client(sender_id, message):
    recipient = messages.Recipient(recipient_id=sender_id)
    result = chat.respond(message, session_id=sender_id)
    response = messages.MessageRequest(recipient,
                                       messages.Message(text=result))
    # send message to Messenger
    messenger.send(response)
Beispiel #3
0
    def send_message(self, chat_id, text, keyboard, reply_message=None, user=None):
        texts = text.strip().split('\\n')
        msgs = []
        for txt in texts:
            for chunk in textwrap.wrap(txt, 320):
                msgs.append(messages.Message(text=chunk))

        if keyboard:
            if len(msgs[-1].text) <= 45:
                title = msgs.pop().text
            else:
                new_texts = textwrap.wrap(msgs[-1].text, 45)
                msgs[-1].text = " ".join(new_texts[:-1])
                title = new_texts[-1]
            elements = []
            for chunk_buttons, last in self.batch(keyboard[0:30], 3):
                elements.append(Element(title=title, buttons=chunk_buttons))
            generic_template = GenericTemplate(elements)
            attachment = TemplateAttachment(generic_template)
            msgs.append(messages.Message(attachment=attachment))

        for msg in msgs:
            try:
                logger.debug("Message to send:(%s)" % msg.to_dict())
                recipient = messages.Recipient(recipient_id=chat_id)
                self._bot.send(messages.MessageRequest(recipient, msg))
                logger.debug("Message sent OK:(%s)" % msg.to_dict())
            except:
                exctype, value = sys.exc_info()[:2]
                logger.error("Error trying to send message:(%s): %s:%s" % (msg.to_dict(), exctype, value))
def askUserForDestination(user_id, savedHome, savedUniversity):
    recipient = messages.Recipient(user_id)
    if savedHome:
        home_location_button = elements.PostbackButton(title=savedHome,
                                                       payload="useSavedHome")
    if savedUniversity:
        university_location_button = elements.PostbackButton(
            title=savedUniversity, payload="useSavedUniversity")
    other_location_button = elements.PostbackButton(title="Other",
                                                    payload="useOtherLocation")
    if savedHome and savedUniversity:
        template = templates.ButtonTemplate(
            text=
            "Would you like to use a previous location as your destination?",
            buttons=[
                home_location_button, university_location_button,
                other_location_button
            ])
    elif savedHome:
        template = templates.ButtonTemplate(
            text=
            "Would you like to use a previous location as your destination?",
            buttons=[home_location_button, other_location_button])
    elif savedUniversity:
        template = templates.ButtonTemplate(
            text=
            "Would you like to use a previous location as your destination?",
            buttons=[university_location_button, other_location_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
    return
Beispiel #5
0
    def test_client_send_error_with_no_error_data(self, mock_post):

        mock_post.return_value.status_code = 190
        mock_post.return_value.json.return_value = {
            'error': {
                u'message':
                u'This Page access token belongs to a Page that has been deleted.',
                u'code': 190,
                u'type': u'OAuthException'
            }
        }

        messenger = MessengerClient(access_token='1234')

        recipient = messages.Recipient(recipient_id='123')
        message = messages.Message(text='Hello World')
        request = messages.MessageRequest(recipient, message)
        self.assertRaises(MessengerException, messenger.send, request)
        mock_post.assert_called_with(
            'https://graph.facebook.com/v2.6/me/messages',
            json={
                "message": {
                    "text": "Hello World"
                },
                "recipient": {
                    "id": "123"
                }
            },
            params={'access_token': '1234'})
Beispiel #6
0
def handle_api_call(fbid):
    """
    TODO: write description
    """
    recipient = messages.Recipient(recipient_id=fbid)

    text = ""
    criteria_data = db.get_criteria_data_by_id(fbid)
    if criteria_data is not None:
        wine_list = api.build_wine_list(criteria_data, RESULTS_LIMIT)
        text = "Voici les meilleurs vins présentants les critères recherchés :\n".decode(
            'utf-8')
        res = ""
        for wine in wine_list:
            res += "- "
            res += wine.get_name().decode('utf-8')
            res += ", " + wine.get_appellation().decode('utf-8').upper()
            res += " (" + str(wine.get_vintage()) + ")"
            res += ", " + str(wine.get_price()) + " euros"
            res += " (score : " + str(wine.get_global_score()) + ")"
            res += "\n"

        pprint(wine_list)

        if not res:
            res = "Aucun vin ne correspond à votre recherche".decode('utf-8')

        text += res
    else:
        text = "Une erreur s'est produite"

    message = messages.Message(text=text)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
Beispiel #7
0
    def test_client_send_error_with_error_data(self, mock_post):

        mock_post.return_value.status_code = 190
        mock_post.return_value.json.return_value = {
            "error": {
                "message": "Invalid parameter",
                "type": "FacebookApiException",
                "code": 100,
                "error_data": "No matching user found.",
                "fbtrace_id": "D2kxCybrKVw"
            }
        }

        messenger = MessengerClient(access_token='1234')

        recipient = messages.Recipient(recipient_id='123')
        message = messages.Message(text='Hello World')
        request = messages.MessageRequest(recipient, message)
        self.assertRaises(MessengerException, messenger.send, request)
        mock_post.assert_called_with(
            'https://graph.facebook.com/v2.6/me/messages',
            json={
                "message": {
                    "text": "Hello World"
                },
                "recipient": {
                    "id": "123"
                }
            },
            params={'access_token': '1234'})
Beispiel #8
0
def handle_text(fbid, data):
    """
    Handles the sending to messenger of a text message
    """
    recipient = messages.Recipient(recipient_id=fbid)
    if (data["api_call"] == False):
        message = messages.Message(text=data["text"])
        request = messages.MessageRequest(recipient, message)
        messenger.send(request)
    else:
        criteria = data["criteria"]
        criteria_list = []
        for criterion in criteria:
            crit = Criteria(criterion["name"], criterion["value"])
            criteria_list.append(crit)
        wine_list = api.get_wines_by_criteria(criteria_list)
        text = ""

        for wine in wine_list:
            text += wine.get_name().decode('utf-8')
            text += "," + wine.get_appellation().decode('utf-8')
            text += "," + str(wine.get_vintage())
            text += "\n"

        pprint(wine_list)

        if not text:
            text = 'Aucun vin de correspond à votre recherche'

        message = messages.Message(text=text)
        request = messages.MessageRequest(recipient, message)
        messenger.send(request)
def start_over(user_id, context):
    global user_conversations
    user_dictionary = next(item for item in user_conversations
                           if item["recipient"]['id'] == user_id)
    user_dictionary['context'] = {}
    user_dictionary['payment'] = {
        "name": "",
        "cardNumber": "",
        "phoneNumber": "",
        "email": "",
        "address": "",
        "railcard": ""
    }
    recipient = messages.Recipient(user_id)
    buy_tickets_button = elements.PostbackButton(title="Buy Tickets",
                                                 payload="buyTickets")
    help_button = elements.PostbackButton(title="Display Help",
                                          payload="displayHelp")
    template = templates.ButtonTemplate(
        text="Is there anything else I can help you with?",
        buttons=[buy_tickets_button, help_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
def ask_ticket_speed_references(user_id, context):
    global user_conversations
    user_dictionary = next(item for item in user_conversations
                           if item["recipient"]['id'] == user_id)
    recipient = messages.Recipient(user_id)
    if 'returnTime' in context:
        if user_dictionary['ticketPreference'] == "":
            cheaper_button = elements.PostbackButton(
                title="Cheaper", payload="ticketPreferenceCheaper")
            sweet_spot_button = elements.PostbackButton(
                title="Sweet Spot", payload="ticketPreferenceSweetSpot")
            faster_button = elements.PostbackButton(
                title="Faster", payload="ticketPreferenceFaster")
            template = templates.ButtonTemplate(
                text="What are your ticket preferences?",
                buttons=[cheaper_button, sweet_spot_button, faster_button])
        else:
            use_old_preference_button = elements.PostbackButton(
                title="Use " + user_dictionary['ticketPreference'],
                payload="useOldTicketPreference")
            dont_use_old_preference_button = elements.PostbackButton(
                title="Change ticket prefs", payload="changePreferences")
            template = templates.ButtonTemplate(
                text="You have a saved preference. Would you like to use that?",
                buttons=[
                    use_old_preference_button, dont_use_old_preference_button
                ])
        attachment = attachments.TemplateAttachment(template=template)
        message = messages.Message(attachment=attachment)
        request = messages.MessageRequest(recipient, message)
        messenger.send(request)
    return context
Beispiel #11
0
def handle_error(fbid):
    """
    Sends an error message to messenger
    """
    recipient = messages.Recipient(recipient_id=fbid)
    message = messages.Message(text='Oups, une erreur est survenue.')
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
Beispiel #12
0
def handle_text(fbid, data):
    """
    Handles the sending to messenger of a text message
    """
    recipient = messages.Recipient(recipient_id=fbid)
    message = messages.Message(text=data["text"])
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
Beispiel #13
0
def chathandler(request):
    data = json.loads(request.body)
    sender_id = data["entry"][0]["messaging"][0]["sender"]["id"]
    recipient = messages.Recipient(recipient_id=sender_id)
    for i in data["entry"][0]["messaging"]:
        if "message" in i:
            if not sender_id in chat.conversation:
                initiateChat()
            respondToClient(sender_id, i["message"]["text"])
    return HttpResponse("It's Working")
def respond_to_client(sender_id,message):
    recipient = messages.Recipient(recipient_id=sender_id)
    chat.attr[sender_id]={"match":None,"pmatch":None,"_quote": False}
    chat.conversation[sender_id].append(message)
    message = message.rstrip(".! \n\t")
    result = chat.respond(message,session_id=sender_id)
    chat.conversation[sender_id].append(result)
    response = messages.MessageRequest(recipient, messages.Message(text=result))
    #send message to Messenger
    messenger.send(response)
    del chat.attr[sender_id]
def send_yes_no_template(user_id):
    recipient = messages.Recipient(user_id)
    yes_button = elements.PostbackButton(title="Yes",
                                         payload="yesConfirmation")
    no_button = elements.PostbackButton(title="No", payload="noConfirmation")
    template = templates.ButtonTemplate(text="Is this correct?",
                                        buttons=[yes_button, no_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
Beispiel #16
0
def handle_welcome(fbid, received_message):
    recipient = messages.Recipient(recipient_id=fbid)
    red_button = elements.PostbackButton(title='Rouge', payload='Rouge')
    white_button = elements.PostbackButton(title='Blanc', payload='Blanc')
    rose_button = elements.PostbackButton(title='Rose', payload='Rose')
    template = templates.ButtonTemplate(
        text='Bonjour, quelle couleur de vin desirez-vous ?',
        buttons=[red_button, white_button, rose_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
def ask_to_save_payment(user_id, context):
    recipient = messages.Recipient(user_id)
    yes_button = elements.PostbackButton(title="Yes", payload="yesPayment")
    no_button = elements.PostbackButton(title="No", payload="noPayment")
    template = templates.ButtonTemplate(
        text="Awesome. Would you like to save these details for next time?",
        buttons=[yes_button, no_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
    pass
def ask_return_date(user_id, context):
    recipient = messages.Recipient(user_id)
    one_way_button = elements.PostbackButton(title="One way only",
                                             payload="oneWayTicket")
    template = templates.ButtonTemplate(
        text=
        "What date and time would you like to return? Please type if not one way.",
        buttons=[one_way_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
    return context
def send_single_or_return_template(user_id):
    recipient = messages.Recipient(user_id)
    single_button = elements.PostbackButton(title="Single",
                                            payload="singleTicket")
    return_button = elements.PostbackButton(title="Return",
                                            payload="returnTicket")
    template = templates.ButtonTemplate(
        text="Would you like a Single or a Return ticket?",
        buttons=[single_button, return_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
Beispiel #20
0
def send_facebook_message(fbid, data):
    """
    Calls the right function according to the data type
    """
    recipient = messages.Recipient(recipient_id=fbid)

    if 'type' in data:
        if (data["type"] == "text"):
            handle_text(fbid, data)
        elif (data["type"] == "button"):
            handle_button(fbid, data)
        else:
            handle_error(fbid)
def ask_to_memorize_location(user_id, context):
    recipient = messages.Recipient(user_id)
    location_save_yes_button = elements.PostbackButton(
        title="Yes", payload="saveLocationConfirmedYes")
    location_save_no_button = elements.PostbackButton(
        title="No", payload="saveLocationConfirmedNo")
    template = templates.ButtonTemplate(
        text="Would you like to save this location?",
        buttons=[location_save_yes_button, location_save_no_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
    return context
def ask_for_railcard(user_id, context):
    recipient = messages.Recipient(user_id)
    young_persons_button = elements.PostbackButton(title="16-25 Railcard",
                                                   payload="yesRailcard")
    other_button = elements.PostbackButton(title="Other",
                                           payload="otherRailcard")
    no_button = elements.PostbackButton(title="No", payload="noRailcard")
    template = templates.ButtonTemplate(
        text="One more thing: do you have a railcard?",
        buttons=[young_persons_button, other_button, no_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
def ask_to_save_ticket_preferences(user_id, context):
    recipient = messages.Recipient(user_id)
    yes_button = elements.PostbackButton(title="Yes",
                                         payload="saveTicketPreferences")
    no_button = elements.PostbackButton(title="No",
                                        payload="doNotSaveTicketPreferences")
    template = templates.ButtonTemplate(
        text="Would you like to save your ticket preferences?",
        buttons=[yes_button, no_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
    return context
Beispiel #24
0
def handle_button(fbid, data):
    """
    Handles the sending to messenger of a button template of postback buttons
    """
    recipient = messages.Recipient(recipient_id=fbid)
    text = data["text"]
    button_list = []
    for option in data["options"]:
        button_text = option["text"]
        button_payload = option["payload"]
        button_list.append(
            elements.PostbackButton(title=button_text, payload=button_payload))
    template = templates.ButtonTemplate(text=text, buttons=button_list)
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
def ask_to_save_used_railcard(user_id, context):
    global user_conversations
    user_dictionary = next(item for item in user_conversations
                           if item["recipient"]['id'] == user_id)
    recipient = messages.Recipient(user_id)
    yes_railcard_button = elements.PostbackButton(title="Yes",
                                                  payload="yesSavedRailcard")
    no_railcard_button = elements.PostbackButton(title="No",
                                                 payload="noRailcard")
    template = templates.ButtonTemplate(
        text="You have a saved railcard: " +
        user_dictionary['savedPayment']['railcard'] +
        ". Would you like to use it?",
        buttons=[yes_railcard_button, no_railcard_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
def ask_to_use_saved_payment(user_id, context):
    global user_conversations
    user_dictionary = next(item for item in user_conversations
                           if item["recipient"]['id'] == user_id)
    recipient = messages.Recipient(user_id)
    use_saved_payment_button = elements.PostbackButton(
        title=user_dictionary['savedPayment']['email'],
        payload="useSavedPayment")
    dont_use_saved_payment_button = elements.PostbackButton(
        title="New email address", payload="enterNewPayment")
    template = templates.ButtonTemplate(
        text="You have a saved email address. Would you like to use that?",
        buttons=[use_saved_payment_button, dont_use_saved_payment_button])
    attachment = attachments.TemplateAttachment(template=template)
    message = messages.Message(attachment=attachment)
    request = messages.MessageRequest(recipient, message)
    messenger.send(request)
    return context
Beispiel #27
0
def handle_incoming_messages():
    # Preberemo poslano sporocilo (to je v obliki json)
    data = request.json

    # Odvisno od tipa sporocila se Branko razlicno odzove
    messageData = data['entry'][0]['messaging'][0]

    # Najdemo id uporabnika in ustvarimo objekt Recipient
    senderId = messageData['sender']['id']
    recipient = messages.Recipient(recipient_id=senderId)

    if "message" in messageData:
        messageReceived(messageData, recipient)
    elif "postback" in messageData:
        postbackReceived(messageData, recipient)
    elif "account_linking" in messageData:
        accountLinkingReceived(messageData, recipient)

    return "ok"
Beispiel #28
0
    def _build_messages(self, recipient_id, incoming):
        '''Constructs the response message according to the incoming message. Returns the messenger request.'''
        recipient = messages.Recipient(recipient_id=recipient_id)
        action = self.bot_ai.extract_action(recipient_id, incoming)

        if action.fulfillment:
            app.logger.info('Parsed action: fulfillment')
            items = [messages.Message(text=action.fulfillment)]
        elif action.name == 'history':
            app.logger.info('Parsed action: history, date: %s, year: %s',
                            action.date.strftime('%-d %B %Y'), action.year)
            items = self._fetch_history(action.date, action.year)
            if not action.year:
                items = items[:3]
        else:
            app.logger.warning('Could not parse the action')
            items = []

        return [messages.MessageRequest(recipient, item) for item in items]
Beispiel #29
0
    def test_client_send(self, mock_post):

        mock_post.return_value.status_code = 200
        mock_post.return_value.json.return_value = {
            'success': True
        }

        messenger = MessengerClient(access_token='1234')

        recipient = messages.Recipient(recipient_id='123')
        message = messages.Message(text='Hello World')
        request = messages.MessageRequest(recipient, message)
        messenger.send(request)

        mock_post.assert_called_with(
            'https://graph.facebook.com/v2.6/me/messages',
            json={
                "message": {"text": "Hello World"},
                "recipient": {"id": "123"}
            },
            params={'access_token': '1234'}
        )
Beispiel #30
0
    def test_get_user_profile(self, mock_get):
        mock_get.return_value.status_code = 200
        mock_get.return_value.json.return_value = {
            "first_name": "Peter",
            "last_name": "Chang",
            "profile_pic":
            "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpf1/v/t1.0-1/p200x200/13055603_10105219398495383_8237637584159975445_n.jpg?oh=1d241d4b6d4dac50eaf9bb73288ea192&oe=57AF5C03&__gda__=1470213755_ab17c8c8e3a0a447fed3f272fa2179ce",
            "locale": "en_US",
            "timezone": -7,
            "gender": "male"
        }
        recipient = messages.Recipient(recipient_id='123')
        messenger_user_profile = users.MessengerUserProfile(
            access_token='1234', recipient=recipient)
        result = messenger_user_profile.get_user_profile()

        mock_get.assert_called_with(
            'https://graph.facebook.com/v2.6/123',
            params={
                'access_token': '1234',
                'fields':
                'first_name,last_name,profile_pic,locale,timezone,gender'
            })