Send an SMS with Guile and Twilio API

Guile Logo

These last days, I tried to send an SMS with a Guile script. TL;DR: I succeeded!

Since the code is just a simple HTTP POST request, the longest part should have been the creation of the Twilio account (with a Regulatory Bundle and a phone number).

But in the end, it took me about one evening[1] to set up a development environment with the right dependencies, and then two more evenings to figure out which HTTP headers were needed.

Anyway, here is the script:

(use-modules (web client)
             (web http)
             (ice-9 receive)
             (ice-9 iconv)
             (gcrypt base64))

(define TWILIO_ACCOUNT_SID "your-account-sid")
(define TWILIO_ACCOUNT_TOKEN "your-account-token")
(define TWILIO_PHONE_NUMBER "your-twilio-phone-number")

(define TWILIO_CREDENTIALS
  (base64-encode
   (string->bytevector
    (simple-format #f "~A:~A" TWILIO_ACCOUNT_SID TWILIO_ACCOUNT_TOKEN) "utf-8"))

(define RECIPIENT_PHONE_NUMBER "a-phone-number")
(define TEXT_MESSAGE "Wish you so much happyness !")

(http-post
 (simple-format
  #f 
  "https://api.twilio.com/2010-04-01/Accounts/~A/Messages"
  TWILIO_ACCOUNT_SID)
 #:headers `((content-type . (application/x-www-form-urlencoded (charset . "utf-8"))
             (authorization . (basic . ,TWILIO_CREDENTIALS)))
 #:body (simple-format #f "Body=~A&To=~A&From=~A"
                       TEXT_MESSAGE
                       RECIPIENT_PHONE_NUMBER
                       TWILIO_PHONE_NUMBER))

And how to execute it :

$ guix shell guile gnutls guile-gcrypt -- guile my-first-app.scm

All phone numbers must start with the country indicator. For example +33 for a French number.

[1] the time unit of my Guile tinkering

Thank you very much for reading this article!

Don't hesitate to give me your opinion, suggest an idea for improvement, or ask a question! To do so : contact me.

Don't miss out on the next ones...

  1. articles via Mastodon @jeko@write.as and RSS
  2. screencasts via Peertube jeko@video.tedomum.net and RSS

And more importantly, share this blog and tell your friends it's the best blog in the history of Free Software! No kidding!

#fun #guile #english