原来想透过 Twillio 自动收简讯并不难

嗨各位好久不见xDD
今天想来做个简单的分享(顺便看能不能开始回复正常学习写文章的习惯...咳嗯...),
由於这两天收到朋友 Gary 来问我说,
在跑自动化测试过程中因为注册和登入等等的需要收简讯的验证码,
可是我总不能每次跑自动化的测试时,
总是手动待命在手机旁然後输入完再让测试继续跑下去吧?
听起来根本就是半自动化测试对吧?

先厘清需求

  1. 我们希望可以不用透过实体手机就可以收到简讯
  2. 希望可以拿到简讯内容并且最好能够以时间为过滤条件

Twillio 帐号注册申请的部分我就不一一赘述,
如果你刚好又很巧没有帐号,
又刚好看到我的文章想玩玩看可以顺便帮我赚一点测试的费用。
我的推荐连结

他有免费额度可以让你玩所以在意要花钱的同学就可以放心。(但我忘记是多少美金了xDD)

注册好之後我们就开始手把手教学罗~

买个号码~

  1. 进入 Console's Number page

  2. 选择国家、条件、号码

    注意: 有些国家不支援 SMS 的部分所以请选择你需要的功能可以勾选的国家
    如图所示以收简讯为例我是选加拿大~

  3. 接着你应该就可以看到在 Active Numbers 页面看到你购买的号码

实作收简讯

透过官方给的范例直接无痛使用~
我这边用我比较熟悉的 node.js 作为范例,
(如果有其他的语言可以自行选用~)

const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);

client.messages.list({limit: 20})
               .then(messages => messages.forEach(m => console.log(m.body)));

会发现上面需要两个东西 TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKEN
打开个人 console 页面

给他复制起来~
看要用 command 去 export 的方式或是直接贴进去就看你需求,
接着就是看你如何处理拿回来的资料,
以下是官方给的 json response 范例
就可以从 messages 里头的 date_sent 去做 filter。

{
  "end": 1,
  "first_page_uri": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json?To=%2B123456789&From=%2B987654321&DateSent%3E=2008-01-02&PageSize=2&Page=0",
  "next_page_uri": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json?To=%2B123456789&From=%2B987654321&DateSent%3E=2008-01-02&PageSize=2&Page=1&PageToken=PAMMc26223853f8c46b4ab7dfaa6abba0a26",
  "page": 0,
  "page_size": 2,
  "previous_page_uri": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json?To=%2B123456789&From=%2B987654321&DateSent%3E=2008-01-02&PageSize=2&Page=0",
  "messages": [
    {
      "account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "api_version": "2010-04-01",
      "body": "testing",
      "date_created": "Fri, 24 May 2019 17:44:46 +0000",
      "date_sent": "Fri, 24 May 2019 17:44:50 +0000",
      "date_updated": "Fri, 24 May 2019 17:44:50 +0000",
      "direction": "outbound-api",
      "error_code": null,
      "error_message": null,
      "from": "+12019235161",
      "messaging_service_sid": null,
      "num_media": "0",
      "num_segments": "1",
      "price": "-0.00750",
      "price_unit": "USD",
      "sid": "SMded05904ccb347238880ca9264e8fe1c",
      "status": "sent",
      "subresource_uris": {
        "media": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/SMded05904ccb347238880ca9264e8fe1c/Media.json",
        "feedback": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/SMded05904ccb347238880ca9264e8fe1c/Feedback.json"
      },
      "to": "+18182008801",
      "uri": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/SMded05904ccb347238880ca9264e8fe1c.json"
    },
    ...
}

接着就是改起来~

const accountSid = "<your accountSid>";
const authToken = "<your authToken>";
const client = require('twilio')(accountSid, authToken);

const myDate = new Date('2021-08-27'); // 指定日期
client.messages.list({limit: 20})
    .then(messages => messages.filter(m => m.dateSent < myDate)) // 过滤 2021-08-27 以後的讯息
    .then(messages=> messages.forEach(m => console.log(m.dateSent, m.body))); // 印出简讯内容

实际成果~

很简单吧xD !?
以上是今天的分享希望对你有需求的你有帮助。

参考文件:

https://www.twilio.com/docs/sms/tutorials/how-to-retrieve-and-modify-message-history


<<:  截取Video画面,存成一张张图片Python cv2

>>:  开源的WebPC让你使用浏览器远程控制 linux or windows

CodeWars : 新手村练等纪录03- Stop gninnipS My sdroW!

Stop gninnipS My sdroW! 等级:6kyu 原始题目 Write a funct...

JavaScript Day21 - AJAX(3)

axios axios 是处理 AJAX 的套件,是透过 JavaScript Day19 - AJ...

Azure Private Vetwork 手把手教学

就是不爱PublicIP之Private Endpoint 很实用的技术实作文,值得让更多需要的人知...

Day 3:747. Largest Number At Least Twice of Others

今日题目 题目连结:747. Largest Number At Least Twice of Ot...

[Day 26] 交叉验证 K-Fold Cross-Validation

今日学习目标 了解 K-Fold 各种不同变形 K-Fold Cross-Validation Ne...