前言 陸陸續續間間隔隔開發公司簡訊平臺介面已經一段時間了,在年末的時候找個空閑把覺得實際可行的東西記錄下來。 想了想,感覺這東西應該沒啥好說的,但是又覺得哪裡需要記一記,以後換個工作環境,還來一發呢,不就可以避免不必要的坑。 畢竟在實現簡訊介面的過程中,看似簡單,但是有許多需要註意的地方和可以一步到 ...
前言
陸陸續續間間隔隔開發公司簡訊平臺介面已經一段時間了,在年末的時候找個空閑把覺得實際可行的東西記錄下來。
想了想,感覺這東西應該沒啥好說的,但是又覺得哪裡需要記一記,以後換個工作環境,還來一發呢,不就可以避免不必要的坑。
畢竟在實現簡訊介面的過程中,看似簡單,但是有許多需要註意的地方和可以一步到位的地方可以記錄下來,請大牛們分享探討不足指正。
來吧,整理整理思緒。
開發背景
由於公司的APP端、微信公眾號端、各種後臺端和報警機制端等等的一系列應用和系統都需要用到一個基礎功能:發簡訊。所以一開始只是做了簡單的一個發簡訊的介面在dubbo上,供各個端來調用。基礎簡訊介面是去接入市場上一些靠譜的簡訊服務商,比如國都、中數、阿裡雲以及一些國外的短息服務商等等。漸漸地、公司的業務量在慢慢變大,用戶量也在變大,導致簡訊的日用量逐漸增大,每月都是一筆大支出,老闆可不高興了,咋回事,簡訊被人刷了還是開發人員死迴圈了亂髮簡訊。這時候,就意識到需要完善這個簡訊介面了,不能單純的調來調去就了事了。
簡訊平臺構建
一、基礎簡訊介面:在dubbo上開發了包括單條簡訊發送介面、批量簡訊發送介面(多個號碼內容一致)、批量個性化簡訊發送介面(多個號碼內容各不一致)、簡訊餘額查詢介面、簡訊狀態回調介面(簡訊服務商回該介面告訴我們剛纔發送的那條簡訊發送成功與否)等
在開發上述這些介面的時候,當然你需要出一份介面文檔,合理簡單些喔不然業務端的開發人員會剛xi你。但是不管他們怎麼剛你,你一定要在手機號碼和簡訊內容的基礎上加上這幾個參數:
- templateid:模板id,這個參數可以用於這個簡訊的模板類別,是哪種模板,因為有的簡訊服務商也是按模板才能發送簡訊的,不是任意的內容都能給你發,自己也能定義幾種模板很規範化有木有。
- areaid:國家地區編碼,這個東西預設可以不填認為是中國大陸手機號,但是後面你公司要是牛逼了走向世界了,給國外用戶發簡訊呢,是不是,提早防備啊。
- sourceid:業務名稱編碼,就是用來標記這條簡訊是哪個具體業務發出去的,這樣老闆問你簡訊花銷怎麼這麼大的時候,你就可以說就是它,這個業務簡訊用量非常大。開個玩笑哈,這是統計簡訊用量開銷的最佳手段啊。
當然,發送完一條簡訊的時候,這些參數信息以及發送時間、發送是否成功,回調狀態等等的參數都是要記錄到資料庫的,這裡有兩個要點:
- 存放簡訊發送記錄的表欄位要設計的儘量詳細,只能多不能少,用不上的大不了後面先NULL唄,萬一哪天擴展功能又用上了對吧。
- dubbo發送簡訊介面上,調用簡訊服務商http介面發送簡訊和插入我們自己的數據表的兩個操作請用非同步,這樣當併發大的時候才能及時hold住,servlet3.0以上是支持非同步的,所以dubbo也早就支持。
二、簡訊平臺後臺:內部開發的一個工具網添加簡訊模塊,可以在上面實時查看每條簡訊的發送情況、賬戶餘額情況、敏感辭彙管理、簡訊計費報表、簡訊服務商切換、運營簡訊批量導入發送(比如公司要做個類似銀行發買黃金簡訊給你的那種推廣的時候,運營人員可以進行的推廣手段)等功能
這個web的東西就不細說了,數據都是讀取mysql表的。敏感詞提下:就是我們國內不是所有簡訊內容都能發,一些非法辭彙是不允許發送簡訊的比如"激情大獎",這個辭彙一般找簡訊服務商要個excel,導到資料庫中,簡訊介面在發送前自己先過濾一遍先,web這邊可以增刪改查管理下。簡訊服務商切換也說下:就是一般我們會有一個備用的簡訊服務商,一旦目前在用的這個簡訊服務商突然出問題了簡訊都是發送失敗的,需要換一個,這時候就可以切成備用的另外一家服務商,實現的話,是在zk上拿一個節點來控制,發送簡訊的介面都會實時關註這個值的情況來來選擇簡訊服務商。
註意事項
不管業務端是否有對用戶請求驗證碼類似功能的做限制,簡訊平臺端要有最基礎的防刷手段:1、同一天內同一個手機號碼最多發送簡訊的量;2、同一個手機號碼下次發送簡訊要間隔上次至少多久。這兩個限制一齣,平臺端的限制也只能這樣了,不能再細緻了,再細緻的限制我覺得應該是業務端的事情了。還有就是像阿裡雲簡訊這樣大的服務商本來就自帶這種限制buff,但是有的是不自帶比較自由隨你發,你一調他服務他就收你錢。
簡訊的到達率真的是很重要,想要幾乎接近99%的簡訊發送成功率,那就要找簡訊服務商給你專線,這就看你的簡訊量大小和商務部能力了,能要到專線是最好的,不同的簡訊服務商到達率真的參差不齊,目前我覺得國都是不錯的(此處不是廣告)。
國內簡訊服務商發送國內簡訊收費便宜,但是發送國外簡訊賊貴,所以你公司的業務要是擴展到海外,量也還行了,最好到當地國家找一家簡訊服務商,收費便宜到達率還高,寫簡訊介面的時候areaid參數的判斷就能用上了。
最後新年快樂!!!!
2017-01-24