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']
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 })
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 })
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})
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 })
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 = {}
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))
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', ], })
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' })
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)
def __init__( self, page_access_token: Text, ) -> None: self.client = MessengerClient(page_access_token) self.last_message: Dict[Text, Any] = {}
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})
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', }
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'], })
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' }]})
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
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, )
def __init__(self, hass, page_access_token): """Initialize the service.""" self.hass = hass self.client = MessengerClient(page_access_token)
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)
def get_output_channel(self) -> OutputChannel: client = MessengerClient(self.fb_access_token) return MessengerBot(client)
def test_explicit_session(): client = MessengerClient(12345678, session=mock.sentinel.session) assert client.session is mock.sentinel.session
def client(): return MessengerClient(page_access_token=12345678, api_version=2.12)
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)
def client(): return MessengerClient(page_access_token=12345678)
def test_generate_appsecret_proof(): client = MessengerClient('1595920652850039|OxHxLwLVJkTZhEjwlHqPgxKgzRVU', app_secret='2e82nk47smn29dnam298fnamq82') assert client.generate_appsecret_proof() == '577b294b975cde92b75ef73c1469c7355bd7fb5e568d522f534dc539dec65b38'
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)
def test_auth_args_without_app_secret(): client = MessengerClient(12345678) assert client.auth_args == { 'access_token': 12345678, }
def test_generate_appsecret_proof(): client = MessengerClient('1595920652850039|OxHxLwLVJkTZhEjwlHqPgxKgzRVU', app_secret='2e82nk47smn29dnam298fnamq82') assert client.generate_appsecret_proof( ) == '577b294b975cde92b75ef73c1469c7355bd7fb5e568d522f534dc539dec65b38'