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 })
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 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, )