Example #1
0
def upload_image(url):
    log(url)
    attachment = attachments.Image(url=url, is_reusable=True)
    client = MessengerClient(page_access_token=os.environ['PAGE_ACCESS_TOKEN'])
    res = client.upload_attachment(attachment)
    log(res)
    return res['attachment_id']
Example #2
0
def test_send_data(client, monkeypatch, entry):
    mock_post = Mock()
    mock_post.return_value.status_code = 200
    mock_post.return_value.json.return_value = {
        "recipient_id": 12345678,
        "message_id": "mid.1456970487936:c34767dfe57ee6e339"
    }
    monkeypatch.setattr('requests.Session.post', mock_post)
    client = MessengerClient(page_access_token=12345678)
    payload = {'text': 'Test message'}
    resp = client.send(payload, entry)

    assert resp == {
        "recipient_id": 12345678,
        "message_id": "mid.1456970487936:c34767dfe57ee6e339"
    }
    assert mock_post.call_count == 1
    mock_post.assert_called_with('https://graph.facebook.com/v2.6/me/messages',
                                 params={'access_token': 12345678},
                                 json={
                                     'recipient': {
                                         'id': entry['sender']['id']
                                     },
                                     'message': payload
                                 })
Example #3
0
def test_get_user_data(client, monkeypatch):
    mock_get = Mock()
    mock_get.return_value.status_code = 200
    mock_get.return_value.json.return_value = {
        "first_name": "Test",
        "last_name": "User",
        "profile_pic": "profile"
    }
    monkeypatch.setattr('requests.Session.get', mock_get)
    entry = {'sender': {'id': 12345678}}
    client = MessengerClient(page_access_token=12345678)
    resp = client.get_user_data(entry)

    assert resp == {
        "first_name": "Test",
        "last_name": "User",
        "profile_pic": "profile"
    }
    assert mock_get.call_count == 1
    mock_get.assert_called_with(
        'https://graph.facebook.com/v2.6/12345678',
        params={
            'fields':
            'first_name,last_name,profile_pic,locale,timezone,gender',
            'access_token': 12345678
        })
Example #4
0
def test_subscribe_app_to_page(client, monkeypatch):
    mock_post = Mock()
    mock_post.return_value.status_code = 200
    mock_post.return_value.json.return_value = {"success": True}
    monkeypatch.setattr('requests.Session.post', mock_post)
    client = MessengerClient(page_access_token=12345678)
    resp = client.subscribe_app_to_page()

    assert resp == {"success": True}
    assert mock_post.call_count == 1
    mock_post.assert_called_with(
        'https://graph.facebook.com/v2.6/me/subscribed_apps',
        params={'access_token': 12345678})
Example #5
0
def test_link_account(client, monkeypatch):
    mock_post = Mock()
    mock_post.return_value.status_code = 200
    monkeypatch.setattr('requests.Session.post', mock_post)
    client = MessengerClient(page_access_token=12345678)
    client.link_account(1234)

    assert mock_post.call_count == 1
    mock_post.assert_called_with('https://graph.facebook.com/v2.6/me',
                                 params={
                                     'access_token': 12345678,
                                     'fields': 'recipient',
                                     'account_linking_token': 1234
                                 })
Example #6
0
    def __init__(
            self, page_access_token: Text,
            on_new_message: Callable[[UserMessage], Awaitable[None]]) -> None:

        self.on_new_message = on_new_message
        self.client = MessengerClient(page_access_token)
        self.last_message = {}
Example #7
0
 def __init__(self, page_access_token, app_secret=None, **kwargs):
     self.page_access_token = page_access_token
     self.app_secret = app_secret
     self.client = MessengerClient(self.page_access_token,
                                   app_secret=self.app_secret,
                                   api_version=kwargs.get(
                                       'api_version', DEFAULT_API_VERSION))
Example #8
0
def test_delete_persistent_menu(client, monkeypatch):
    mock_delete = Mock()
    mock_delete.return_value.status_code = 200
    monkeypatch.setattr('requests.Session.delete', mock_delete)
    client = MessengerClient(page_access_token=12345678)
    client.delete_persistent_menu()

    assert mock_delete.call_count == 1
    mock_delete.assert_called_with(
        'https://graph.facebook.com/v2.6/me/messenger_profile',
        params={'access_token': 12345678},
        json={
            'fields': [
                'persistent_menu',
            ],
        })
Example #9
0
def test_send_action(client, monkeypatch, entry):
    mock_post = Mock()
    mock_post.return_value.status_code = 200
    monkeypatch.setattr('requests.Session.post', mock_post)
    client = MessengerClient(page_access_token=12345678)
    client.send_action('typing_on', entry)

    assert mock_post.call_count == 1
    mock_post.assert_called_with('https://graph.facebook.com/v2.6/me/messages',
                                 params={'access_token': 12345678},
                                 json={
                                     'recipient': {
                                         'id': entry['sender']['id']
                                     },
                                     'sender_action': 'typing_on'
                                 })
Example #10
0
class FacebookMessengerNotificationService(BaseNotificationService):
    def __init__(self, hass, page_access_token):
        """Initialize the service."""
        self.hass = hass
        self.client = MessengerClient(page_access_token)

    def send_message(self, message="", **kwargs):
        """Send a message to a user."""
        targets = kwargs.get(ATTR_TARGET)

        # text message
        title = kwargs.get(ATTR_TITLE)
        payload = dict(text=f"{title}\n{message}" if title else message)

        _LOGGER.debug("Send message to %s, with payload %s ", targets, payload)
        for target in targets:
            try:
                out = self.client.send(payload,
                                       target,
                                       messaging_type="MESSAGE_TAG",
                                       tag="ACCOUNT_UPDATE")
                _LOGGER.debug(out)

                event_data = {
                    ATTR_TARGET: out.get("recipient_id"),
                    ATTR_MESSAGEID: out.get("message_id"),
                }
                self.hass.bus.async_fire(EVENT_FACEBOOK_SENT, event_data)
            except ValueError as exc:
                _LOGGER.error(exc)
Example #11
0
    def __init__(
            self,
            page_access_token: Text,
    ) -> None:

        self.client = MessengerClient(page_access_token)
        self.last_message: Dict[Text, Any] = {}
Example #12
0
def test_unlink_account(client, monkeypatch):
    mock_post = Mock()
    mock_post.return_value.status_code = 200
    mock_post.return_value.json.return_value = {
        "result": "unlink account success"
    }
    monkeypatch.setattr('requests.Session.post', mock_post)
    client = MessengerClient(page_access_token=12345678)
    res = client.unlink_account(1234)
    assert res == {"result": "unlink account success"}
    assert mock_post.call_count == 1
    mock_post.assert_called_with(
        'https://graph.facebook.com/v2.6/me/unlink_accounts',
        params={
            'access_token': 12345678,
        },
        json={'psid': 1234})
Example #13
0
def test_auth_args_with_app_secret():
    client = MessengerClient('1595920652850039|OxHxLwLVJkTZhEjwlHqPgxKgzRVU',
                             app_secret='2e82nk47smn29dnam298fnamq82')
    assert client.auth_args == {
        'access_token':
        '1595920652850039|OxHxLwLVJkTZhEjwlHqPgxKgzRVU',
        'appsecret_proof':
        '577b294b975cde92b75ef73c1469c7355bd7fb5e568d522f534dc539dec65b38',
    }
Example #14
0
def test_add_whitelisted_domains_not_as_list(client, monkeypatch):
    mock_post = Mock()
    mock_post.return_value.status_code = 200
    mock_post.return_value.json.return_value = {
        "result": "success",
    }
    monkeypatch.setattr('requests.Session.post', mock_post)
    client = MessengerClient(page_access_token=12345678)
    res = client.update_whitelisted_domains('https://facebook.com')
    assert res == {"result": "success"}
    assert mock_post.call_count == 1
    mock_post.assert_called_with(
        'https://graph.facebook.com/v2.6/me/messenger_profile',
        params={
            'access_token': 12345678,
        },
        json={
            'whitelisted_domains': ['https://facebook.com'],
        })
Example #15
0
def test_set_greeting_text(client, monkeypatch):
    mock_post = Mock()
    mock_post.return_value.status_code = 200
    mock_post.return_value.json.return_value = {"result": "success"}
    monkeypatch.setattr('requests.Session.post', mock_post)
    client = MessengerClient(page_access_token=12345678)
    welcome_message = thread_settings.GreetingText(text='Welcome message')
    profile = thread_settings.MessengerProfile(greetings=[welcome_message])
    resp = client.set_messenger_profile(profile.to_dict())

    assert resp == {"result": "success"}
    assert mock_post.call_count == 1
    mock_post.assert_called_with(
        'https://graph.facebook.com/v2.6/me/messenger_profile',
        params={'access_token': 12345678},
        json={'greeting': [{
            'locale': 'default',
            'text': 'Welcome message'
        }]})
Example #16
0
def webhook_post():
    facebook_page_token = current_app.config['FACEBOOK_PAGE_TOKEN']
    messenger_client = MessengerClient(facebook_page_token)

    event_data = request.get_json(force=True)

    for entry in event_data['entry']:
        for message in entry['messaging']:
            if message.get('message'):
                facebook_id = message['sender']['id']
                customer = Customer.get_customer_by_facebook_id(facebook_id)
                if not customer:
                    customer_data = messenger_client.get_user_data(message)
                    customer = Customer(
                        facebook_id=facebook_id,
                        first_name=customer_data['first_name'],
                        full_name='{} {}'.format(customer_data['first_name'],
                                                 customer_data['last_name']),
                    )
                    db.session.add(customer)
                    db.session.commit()

                timestamp = message['timestamp']
                if (customer.chats and
                        timestamp - customer.chats[-1].last_timestamp < DAY):
                    chat = customer.chats[-1]
                    chat.last_timestamp = timestamp
                else:
                    chat = Chat(customer_id=customer.id,
                                last_timestamp=timestamp)
                db.session.add(chat)
                db.session.commit()

                text = message['message'].get('text', '')
                message = Message(chat_id=chat.id,
                                  sender='customer',
                                  text=text,
                                  timestamp=timestamp)
                db.session.add(message)
                db.session.commit()

    return 'OK', 200
Example #17
0
def api_chat_add_message(chat_id):
    chat = Chat.get_chat_by_id(chat_id)
    if current_user.id != chat.employee_id:
        return jsonify({'success': False}), 403

    message_data = request.get_json(force=True)
    if not message_data['text']:
        return jsonify({'success': False}), 422

    facebook_page_token = current_app.config['FACEBOOK_PAGE_TOKEN']
    messenger_client = MessengerClient(facebook_page_token)
    messenger_client.send(
        {'text': message_data['text']},
        {'sender': {
            'id': chat.customer.facebook_id
        }},
        'RESPONSE',
    )

    message = Message(
        chat_id=chat_id,
        sender='employee',
        text=message_data['text'],
        timestamp=int(datetime.now().timestamp() * 1000),
    )
    db.session.add(message)
    db.session.commit()

    return (
        jsonify({
            '_id': message.id,
            'chat_id': message.chat_id,
            'sender': 'employee',
            'text': message.text,
            'timestamp': message.timestamp,
        }),
        200,
    )
Example #18
0
 def __init__(self, hass, page_access_token):
     """Initialize the service."""
     self.hass = hass
     self.client = MessengerClient(page_access_token)
Example #19
0
 def __init__(self, page_access_token, app_secret=None):
     self.page_access_token = page_access_token
     self.app_secret = app_secret
     self.client = MessengerClient(self.page_access_token,
                                   app_secret=self.app_secret)
Example #20
0
 def get_output_channel(self) -> OutputChannel:
     client = MessengerClient(self.fb_access_token)
     return MessengerBot(client)
Example #21
0
def test_explicit_session():
    client = MessengerClient(12345678, session=mock.sentinel.session)
    assert client.session is mock.sentinel.session
Example #22
0
def client():
    return MessengerClient(page_access_token=12345678, api_version=2.12)
Example #23
0
 def __init__(self, page_access_token):
     self.page_access_token = page_access_token
     super(Messenger, self).__init__(self.page_access_token)
     self.client = MessengerClient(self.page_access_token)
Example #24
0
def client():
    return MessengerClient(page_access_token=12345678)
Example #25
0
def test_generate_appsecret_proof():
    client = MessengerClient('1595920652850039|OxHxLwLVJkTZhEjwlHqPgxKgzRVU', app_secret='2e82nk47smn29dnam298fnamq82')
    assert client.generate_appsecret_proof() == '577b294b975cde92b75ef73c1469c7355bd7fb5e568d522f534dc539dec65b38'
Example #26
0
 def __init__(self, app_secret=None):
     self.page_access_token = os.environ.get("FB_PAGE_TOKEN")
     self.app_secret = app_secret
     self.client = MessengerClient(self.page_access_token,
                                   app_secret=self.app_secret)
Example #27
0
def test_auth_args_without_app_secret():
    client = MessengerClient(12345678)
    assert client.auth_args == {
        'access_token': 12345678,
    }
Example #28
0
def test_generate_appsecret_proof():
    client = MessengerClient('1595920652850039|OxHxLwLVJkTZhEjwlHqPgxKgzRVU',
                             app_secret='2e82nk47smn29dnam298fnamq82')
    assert client.generate_appsecret_proof(
    ) == '577b294b975cde92b75ef73c1469c7355bd7fb5e568d522f534dc539dec65b38'