Facebook Messenger PUSH notifications
-
PREREQUISITES:
- a FaceBook account;
- a Messenger client installed on your device from appstore (Pesbuk recommended);
- a "home" server capable running python3 code. You can run on your own UPBorts device instead, but I have not tested;
- "pushclient" mini app installed on your device from AppStore;
- basic programming skills;
- understanding, and taking your own responsibility of security considerations.
GETTING YOUR APP TOKEN
- Start your pushclient on the UB device.
- Write/copy your token (take care, it's yours, don't share with others!)
INSTALL fbchat
- Login as administrator (aka. root) to your home server
- install fbchat:
# pip install fbchatINSTALL AND SETUP fbnotifications.py
- Login as a safe normal user to your home server.
- Open your favourite code editor, and create a file 'fbnotifications.py'. Copy this code into that file:
#!/usr/bin/env python import signal import sys import requests import json from datetime import datetime, timedelta from fbchat import Client from fbchat.models import * DEBUG = True LOG_FILENAME = "debug.log" USER = "<your facebook login email>" PASSWORD = "<your facebook login password>" PUSH_URL = "https://push.ubports.com/notify" HEADERS = {"Content-Type" : "application/json"} card = { "icon" : "message", "body" : "", "summary" : "Messenger", "popup" : True, "persist" : True } notification = { "card" : card, "vibrate" : True, "sound" : True } data = { "notification" : notification, } params = { "appid" : "pushclient.christianpauly_pushclient", "token" : "<your ubuntu one app token>", "expire_on" : "", "data" : data } client = None logfile = None def log(log_msg): if DEBUG: logfile.write(f'{str(log_msg)}\n') logfile.flush() def signal_handler(sig, frame): log('Exiting with signal {sig}') if client and client.isLoggedIn(): client.logout() if logfile: logfile.close() sys.exit(0) class CustomClient(Client): def onMessage(self, mid, author_id, message_object, thread_id, thread_type, ts, metadata, msg, **kwargs): if not DEBUG and author_id == self.uid: return user = self.fetchUserInfo(author_id)[author_id] log(f'Message from:\n{str(user)}\n') name = 'noname' if user.nickname: name = user.nickname elif user.name: name = user.name dt = datetime.now() + timedelta(days=1) dt_str = dt.strftime("%Y-%m-%dT%H:%M:00.000Z") if message_object: if message_object.text: body = f'{name}: {message_object.text[:23]}' else: body = f'{name} sent media content.' params["expire_on"] = dt_str params["data"]["notification"]["card"]["body"] = body json_data = json.dumps(params) log(f'Data sent:\n {json_data}\n') r = requests.post(url=PUSH_URL, headers=HEADERS, data=json_data) log(r.json()) ##################### MAIN ##################### if __name__ == "__main__": if DEBUG: print(f'Loggin in: {LOG_FILENAME}') logfile = open(LOG_FILENAME, "a") client = CustomClient(USER, PASSWORD) log(f'User logged in: {client.isLoggedIn()}') log(client.getSession()) signal.signal(signal.SIGINT, signal_handler) client.listen()- Change <your facebook login email>, <your facebook login password>, and <your ubuntu one app token> strings to your own data respectively.
- Set DEBUG global variable according to your needs to False or True.
- Save the file.
- Set permissions so that only you (and administrator) can read your personal data:
$ chmod 600 fbnotifications.py- Run the program:
$ python fbnotifications.pyTESTING
If you want to run a self-test, then:- set DEBUG = True, and see the generated logfile in another terminal;
- open FB Messenger web client in a desktop browser;
- search for yourself in the search box above the contact list;
- send a message to yourself;
Now you have to wait until the push notification arrives.
If you have issues, write me on telegram UBPorts Supergroup.POSSIBLE OPTIONS
- Run the program on home server as a system service (recommended).
- on most modern Linux use systemd
- on BSD use rc scripts
- Run the program in a screen process
This is a very simple solution to run it quick and "service" like.
Note, this will not start automatically after a system restart.DEFICIENCIES
- Tapping the notification does not open the Messenger app automatically. You have to open it explicitly.
-
Wow this sounds interesting. Sadly I don't have my own server.
Another alternative though is using the Pesbuk app. It's just a webapp but if you set it to run in the background (via UTTT) it'll get push notifications whenever you get new ones. There's a know issue though when you have a different webapp header than the one tested with it.
I'm not intentionally promoting my app. Just trying to help

-
Thank you, I'll try that also.
-
This post is deleted!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login