Crafting happiness with Free Software & Hardware

Envoyer un SMS avec Guile et l'API de Twilio

Guile Logo

Ces derniers jours, je me suis mis en tête d'essayer d'envoyer un SMS avec un script Guile.
TL;DR : J'ai réussi !

Étant donné que le code se résume à une simple requête HTTP de type POST, le plus long aurait dû être la création du compte Twilio (avec un Regulatory Bundle et un numéro de téléphone).

Mais finalement, j'ai mis environ une soirée[1] à mettre en place un environnement de développement avec les dépendances qui vont bien, puis deux autres soirées à cerner quelles en-têtes HTTP étaient nécessaires.

Bref, voici le script :

$ guix shell guile gnutls guile-gcrypt

Le 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))

Et comment l'executer :

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

Tous les numéros de téléphone doivent commencer par l'indicateur de pays. Par exemple +33 pour un numéro français.

[1] l’unité de temps de mes bidouillages avec Guile

Merci beaucoup d'avoir lu cet article !

N'hésite pas à me contacter pour me donner ton avis, proposer une idée d'amélioration, ou poser une question !

Abonnes-toi pour ne pas manquer les prochains :

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

Et encore plus important, partages ce blog et dis à tes amis que c'est le meilleur blog de l'histoire du logiciel libre ! Sans dec'

#fun #guile #français