Originally posted on www.florin-pop.com
Today is Valentines Day! 😍
How nice would it be if you sent a Romantic Message every hour to your loved one? But even better...
How awesome would it be to do it automatically using a NodeJS script? We are after all... programmers, right? 😏
In this short tutorial I'm going to show you how to do it.
P.S. For the lazy ones out there, here is a Video Tutorial:
Create a CRON job
First, we need to create a CRON job which will run a function every hour.
For that, let's install the node-cron
package into our NodeJS app:
npm install node-cron
Next, we're going to schedule a function to run every hour:
const cron = require('node-cron');
cron.schedule('0 * * * *', () => {
sendMessage();
});
Perfect. We don't have the sendMessage()
function yet, but we'll create it later.
Also, in case you don't know how the CRON string works, here is an awesome website where you can test it out.
Basically '0 * * * *'
means: Run every hour at 0 minutes
, so it will run at: 00:00, 01:00, 02:00
, etc... You get the point!
Connect to Twilio
We need a Twilio acount, so head over to Twilio.com and create one. You need to verify your email address and also verify the number you want to send message to. (I had to "steal" my wife's phone in order to verify the number 😅)
In there they'll ask you a couple of questions like: "What programming language are you using"... You can pick NodeJS and then you'll end up on the /console
page.
Here you'll get the ACCOUNT SID
and AUTH TOKEN
. We need these to call the Twilio API so we are going to store them inside a config.js
file.
Warning: Do not share the AUTH TOKEN. This is a secret key so we're going to store them inside this "secret" config.js file.
Great.
The next thing will be to create a Trial Number (you can find the button on the /console page). This number will be used to send message FROM.
Now that we have everything in place, let's go back to our code!
We need to install the Twilio package: npm install twilio
and we need to use the data we stored inside the ./config.js
file.
Along the ACCOUNT_SID
and AUTH_TOKEN
we can also store the PHONE_NR
of our loved one as we are going to use this to tell Twilio where to send the message TO.
Let's do that and also let's create the sendMessage()
function, which will... send a message 😆.
const config = require('./config');
const accountSid = config.ACCOUNT_SID;
const authToken = config.AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);
function sendMessage() {
client.messages
.create({
body: 'Your Message here',
from: '+19166191713',
to: config.PHONE_NR
})
.then(message => {
console.log(message);
});
}
You can see that the client.messages.create()
function required three things:
- The body/the message
- The FROM number (this is the trial number created above)
- The TO number (this is the number we want to send the message to)
Get the messages
We need a list of 24 romantic messages, so for that let's create a messages.js
file and put all the messages in there inside an array.
module.exports = [
`If I could give you one thing in life, I'd give you the ability to see yourself through my eyes, only then would you realize how special you are to me.`,
`If you were a movie, I'd watch you over and over again.`,
`In a sea of people, my eyes always search for you.`
];
I only added 3 messages above, but you can fill the array up till you get to 24 messages.
Combine everything
Now that we have all the 3 components:
- the CRON job
- the Twilio sendMessage() call
- the messages
We can combine them into the final code:
const cron = require('node-cron');
const config = require('./config');
const accountSid = config.ACCOUNT_SID;
const authToken = config.AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);
const messages = require('./messages');
const currentMessage = 0;
function sendMessage() {
client.messages
.create({
body: messages[currentMessage],
from: '+19166191713',
to: config.PHONE_NR
})
.then(message => {
currentMessage++;
console.log(message);
});
}
cron.schedule('0 * * * *', () => {
console.log('Message sent!');
sendMessage();
});
You can see that I added a currentMessage
counter which will be incremented every time we send a message, this way we're going to loop over the entire array of messages.
That's it! 😃
Now you can run the script and it'll send a romantic message, every hour, to your loved one!
Happy Valentines! 😇
Top comments (7)
This made me remember of a story I read somewhere sometime (yeah, quite vague reference) where this certain dude programmed a cronjob to send poems to her girlfriend each X amount of time... Mind you, this was done when back we used floppy drives... And he developed this on his job's infrastructure...
However, he had a bug. Something went terribly wrong, and the production env. Went down HARD..
It's amazing we now have enough resources to make this on our own. We can make so much more today...
This is both my first nodeJS and API project.
I got this message from Twilio:
We have detected that your Twilio API credentials have been compromised. It is urgent that you take immediate action to secure your account as this poses a security risk and could lead to unauthorized activity or excessive charges.
is there a different way to hide this besides creating a .env file?
I am on my work computer right now, and I don't want to mess with the environment here.
Thanks
Did you push the project to GitHub, including the config.js file? That would have caused the Twilio and GitHub monitoring systems to spot it and send you that email.
Hopefully you have already logged in and updated your auth token.
If you have hidden credentials like this before using
.env
files then the secret really is that.env
files are likely to appear in your.gitignore
file and never get committed to your repo. You can addconfig.js
to the project's.gitignore
file for this project, or, better for the future, update this project to use environment variables and dotenv (or similar).Let me know if I can help any further.
I'm not sure why you got that error... I didn't 🤔
Great post! I hope that your loved one appreciated all the messages!
They might not love you back after the 10th message.
True... It might be the next level of love. 😂