Learn more about Russian war crimes in Ukraine.

Nativité 2017: creating a Facebook Messenger bot

A few days ago I described Nativité, a pastoral Christmas game which I made last year.. I’m updating it for 2017, switching from SMS notifications to a Facebook Messenger bot. Here’s the latest game:

Last year, I used Firebase. This was mostly an excuse to try out Firebase. I found Firebase pleasant, but also quickly found its limitations. I wanted to send SMS messages on custom server-side events, and couldn’t figure out how to do this in a secure manner. I ended up making client-side calls to an external server to fulfil this, which is a horrible hack!

It also turns out SMS is expensive. There are four sheep in the game; each sheep moved a minimum of twelve times; and each move sends an SMS to the four girls and to me. I was using AWS SNS to send messages, which at the time was charging around 10c for each message to France. That’s a minimum of 4 × 12 × 5 × 10c = $24 in messaging costs! (Today’s SNS pricing for SMS is much cheaper and more uniform: around 0.64c per message to anywhere. But this is still expensive.)

When I was making Nativité last year, I was in Dedham, deepest rural Essex. Testing SMS required waving my phone around in the garden, freezing, trying to attract the attention of some distant cell tower. I would receive a few dozen test messages at once, and see my AWS bill grow a few dollars. (Since then, I’ve discovered “WiFi calling”, which seems to magically transfer cellular data over WiFi. But I didn’t know about it then!)

If instead I were to use Facebook Messenger, the end-user experience would be more pleasant, my bill would be $0, and I could test anywhere with an internet connection. So I did that.

To make a Facebook bot, I needed to switch out “serverless” for a more standard setup (Heroku for the server-side, Netlify for the client-side, and Pusher for some realtime magic). After reimplementing everything, the new client is hosted at https://nativite-2017.lantreibecq.com/.

A Facebook Messenger bot is a Facebook App with the Messenger product added to it. Mine is app 299278960590947. But I don’t think end-users see Facebook Apps directly. Instead, Facebook Messenger bots communicate via a Facebook Page: if you own both the app and the page, you can give the app permission to communicate via the page. The Page for Nativité is TheChristChild (it was surprisingly hard to find a free unique name). Facebook Pages have Messenger accounts which users can send messages to; here is the Messenger account for TheChristChild.

Pages can’t initiate conversations. Users have to send a message to a Page before it can reply. I’m using this as a “subscription” mechanism; anyone sending a message to TheChristChild is subscribed to all updates.

Facebook Apps have a review process. Before an App/Page can interact with the public, it must have gone through review. An exception to this is a list of “testers” which can be added to the app. Surprisingly, it seems that a user does not have to give permission to be added as a tester. So I added my partner and all her family as testers.

Oh, I also added a little crown to the sheep that’s currently winning. That’s all for this year.

What can computers do? What are the limits of mathematics? And just how busy can a busy beaver be? This year, I’m writing Busy Beavers, a unique interactive book on computability theory. You and I will take a practical and modern approach to answering these questions — or at least learning why some questions are unanswerable!

It’s only $19, and you can get 50% off if you find the discount code ... Not quite. Hackers use the console!

After months of secret toil, I and Andrew Carr released Everyday Data Science, a unique interactive online course! You’ll make the perfect glass of lemonade using Thompson sampling. You’ll lose weight with differential equations. And you might just qualify for the Olympics with a bit of statistics!

It’s $29, but you can get 50% off if you find the discount code ... Not quite. Hackers use the console!

More by Jim

Tagged . All content copyright James Fisher 2017. This post is not associated with my employer. Found an error? Edit this page.