В последние дни я пытался отправить СМС со скриптом Guile. TL;DR: Мне удалось!

Поскольку код представляет собой простой HTTP-запрос POST, самой длинной частью должно было стать создание учетной записи Twilio (с нормативным пакетом и номером телефона).

Но в итоге мне понадобилось около одного вечера[1], чтобы настроить среду разработки с нужными зависимостями, а затем еще два вечера, чтобы выяснить, какие HTTP-заголовки нужны.

В любом случае, вот сценарий:

;; send-happiness.scm
(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))

И как это выполнить:

$ guix shell guile gnutls guile-gcrypt -- guile send-happiness.scm

Все телефонные номера должны начинаться с указателя страны. Например +33 для французского номера.

[1] единица времени моей хитрости

Большое спасибо за чтение этой статьи!

Не стесняйтесь высказывать свое мнение, предлагать идеи по улучшению или задавать вопросы! Для этого: Свяжитесь со мной.

Не пропустите следующие…

  1. статьи через Mastodon @[email protected] и RSS
  2. скринкасты через Peertube [email protected] и RSS

И, что более важно, поделитесь этим блогом и расскажите своим друзьям, что это лучший блог в истории свободного программного обеспечения! Без шуток!