iT邦幫忙

1

原來想透過 Twillio 自動收簡訊並不難

  • 分享至 

  • xImage
  •  

嗨各位好久不見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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Robert Chen
iT邦新手 5 級 ‧ 2021-09-08 01:04:27

你的朋友 Gary 竟然不問 Ron
好壞

看更多先前的回應...收起先前的回應...
Robin iT邦新手 2 級 ‧ 2021-09-08 01:55:14 檢舉

心結吧

Gary iT邦新手 3 級 ‧ 2021-09-08 17:03:03 檢舉

之前有問 結果兩人一起不會XD

Robin iT邦新手 2 級 ‧ 2021-09-08 17:56:25 檢舉

是嗎?
你確定?

我不信

我要留言

立即登入留言