Toolkit and dependency abstraction library for the glued project.
The notify class uses for most cases the symfony/notifier libraries under the hood, but provides enough abstraction to enable easy integration of other code to communicate on platforms that are unsupported by symfony.
The class requires a yaml configuration, where dst
in every netowrk is an administrators'
destination (recipient) address. In each network (i.e. email
), multiple (sending) channels can be
used. Currently, if the first channel fails to send, the class will try to continue sending by other
channels. This failover mechanism (intentionally) doesn't work between networks over privacy/security
concerns.
In case of admins, all destinations on all networks are used to really ensure admins get notified. In case of users, users may change define one or more notification channels to be used always and additional channels that can be used only by user choice.
To configure notifications, override defaults.yaml. An example here:
notify:
network:
telegram:
channels:
- name: Telegram
dsn: 'telegram://123456789:yourbotsecret@default?channel='
dst:
- '111111111'
- '222222222'
config:
src: '@MyTelegramBot'
email:
channels:
- name: E-mail (smtp)
dsn: 'smtp://login:[email protected]:587?encryption=starttls'
- name: E-mail (smtp2)
dsn: 'smtp://login:[email protected]:587?encryption=starttls'
config:
src: '[email protected]'
dst:
- '[email protected]'
- '[email protected]'
sms:
channels:
- name: Twilio
dsn: 'twilio://SID:TOKEN@default?from=FROM'
- name: O2
config:
src: '+1123456789'
Send a notification to admins
$this->notify->send(content: 'this is the message', subject: 'this is the optional header (i.e. mail subject', notify_admins: true);
Send a notification to specific users (all the channels below will be used)
$users = [
'45216b0c-32ca-4a48-8307-3466ee81f32e' => [
'telegram' => '222333222',
'email' => '[email protected]',
],
'8e51819a-4595-4e5c-990c-f27cacb1a2dd' => [
'telegram' => '2222777777',
],
];
$this->notify->to($users)->send('A quick notification only sent to $users');
Helper functions of the class will
$res = $this->notify->getusers();
echo "<br><br>All users to be notified:";
print_r($res);
$res = $this->notify->getadmins();
echo "<br><br>All admins to be notified:";
print_r($res);
$res = $this->notify->status();
print_r($res);
echo "<br><br>Current configuration and send queue:";
Currently only the following networks/channels are supported:
- TELEGRAM
- EMAIL (SMTP)
TELEGRAM
Go to https://web.telegram.org/k/#@BotFather
and type in
/newbot # start setup
glued-dev # bot name
glued_dev_bot # bot username
Go to https://web.telegram.org/k/#@RawDataBot
to get the chat_id of the recipient
You will end up with something like:
- Token:
1234567890:asecretstringapproximatelythisloong
- Uri:
https://web.telegram.org/k/#@glued_dev_bot
- Chat_id:
2244668800
and a DSN string TELEGRAM_DSN=telegram://1234567890:asecretstringapproximatelythisloong@default?channel=2244668800
To test that the above works, use curl as follows:
TG_TOKEN=secret-token
TG_CHAT_ID=recipients-chat-id
curl -X POST -H "Content-Type:multipart/form-data" -F chat_id=$TG_CHAT_ID -F text="message" "https://api.telegram.org/bot$TG_TOKEN/sendMessage"
To test, use curl as follows:
SMTP_HOST='mail.example.com:587'
SMTP_USER='login:pass'
SMTP_FROM='[email protected]'
SMTP_RCPT='[email protected]'
curl --ssl-reqd --url "smtp://$SMTP_HOST" --user "$SMTP_USER" --mail-from "$SMTP_FROM" --mail-rcpt "$SMTP_RCPT" --upload-file file.txt
cat file.txt
From: <[email protected]>
To: <[email protected]>
Subject: Curl Test