Example #1
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 #2
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 #3
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,
    )