Gửi và nhận tin nhắn SMS với Twilio
Tác giả: Trịnh Phúc Thọ
Mục đích:
Bài viết này giới thiệu & hướng dẫn cách sử dụng dịch vụ tin nhắn Twilio để gửi và nhận tin SMS, nội dung cụ thể như sau:
· Gửi tin nhắn SMS từ Web application đến điện thoại của người dùng
· Cập nhật trạng thái tin nhắn gửi đi
· Nhận tin nhắn từ người dùng gửi đến
Gửi và nhận tin nhắn SMS với Twilio
Tác giả: Trịnh Phúc Thọ
Mục đích:
Bài viết này giới thiệu & hướng dẫn cách sử dụng dịch vụ tin nhắn Twilio để gửi và nhận tin SMS, nội dung cụ thể như sau:
· Gửi tin nhắn SMS từ Web application đến điện thoại của người dùng
· Cập nhật trạng thái tin nhắn gửi đi
· Nhận tin nhắn từ người dùng gửi đến
Yêu cầu kỹ thuật:
· Kỹ năng lập trình Web trên Java với Servlet & JSP.
· Kỹ năng sử dụng thư viện JDBC để đọc/ghi database.
· Quen thuộc với Git, Maven.
· Do ứng dụng sẽ được deploy trên OpenShift, một Platform-as-a-Service cung cấp bởi RedHat, nên yêu cầu người dùng cần nắm được các khái niệm về Cloud & PaaS.
Công cụ sử dụng:
· Netbean IDE, https://netbeans.org/
· Git, http://git-scm.com/
Nội dung
1. Đăng ký & cấu hình tài khoản Twilio
2. Đăng ký & cấu hình tài khoản OpenShift
3. Coding (gửi tin & cập nhật trạng thái SMS, nhận tin SMS)
4. Deploy & Test
1. Đăng ký & cấu hình tài khoản Twilio
Twilio cung cấp dịch vụ tin nhắn thoại (voice) & tin nhắn văn bản (text). Chi tiết xem tại http://www.twilio.com/. Hiện tại bạn có thể đăng ký tài khoản trial với giới hạn sử dụng miễn phí lên đến 30$ (tương ứng khoảng 450 tin nhắn SMS về Việt Nam). Xem danh sách các nhà mạng được hỗ trợ và giá cước tin nhắn tại http://www.twilio.com/sms/pricing.
Sau khi đăng ký thành công & đăng nhập vào tài khoản:
·
Để cho phép SMS
được gửi đến Việt Nam:
Mở trang Account, chọn
mục Geographic Permissions, chọn tab Messaging (https://www.twilio.com/user/account/settings/international/sms). Trong danh sách hiện ra đánh dấu chọn "Vietnam
(+84)"
· Với số điện thoại đã xác thực khi đăng ký, có thể thử tính năng gửi tin nhắn bằng cách vào DEV TOOLS > API Explorer > Trong mục "Send a Message", click chọn "View request & code sample" (https://www.twilio.com/user/account/developer-tools/api-explorer/message-create)
· Tài khoản trial chỉ cho phép gửi SMS đến những số điện thoại đã xác thực với Twilio, do đó để xác thực thêm các số điện thoại khác, vào NUMBERS > Verified Caller IDs > Chọn Verify a Number.
Trên trang NUMBERS > Twilio Numbers, ghi nhớ lại số điện thoại mà Twilio cấp cho bạn.
Trở về Dashboard (https://www.twilio.com/user/account/voice-messaging), ghi nhớ lại ACCOUNT SID và AUTH TOKEN.
2. Đăng ký & cấu hình tài khoản OpenShift
OpenShift là một PaaS platform cung cấp bởi RedHat. Chi tiết xem tại https://www.openshift.com/. Tài khoản trial cho phép bạn sử dụng miễn phí lên đến 3 compute units ("gears").
Sau khi đăng ký & đăng nhập vào tài khoản, có thể tạo ngay ứng dụng mới trên trang Applications. Tuy nhiên để có thể checkout sourcecode & deploy sau này (thông qua Git), cần cấu hình SSH cho tài khoản vừa tạo.
Cách tạo SSH key nằm ngoài phạm vi bài viết, người dùng Windows có thể sử dụng PuTTYgen (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html).
Sau khi cấu hình SSH thành công:
1. Tại trang Applications, chọn Add Application.
2. Chọn bộ runtime là Tomcat 7 (JBoss EWS 2.0).
3. Trên trang mới, đặt URL cho ứng dụng tại ô "Public URL".
4. Chọn Create Application.
Sau khi ứng dụng được tạo thành công, OpenShift cung cấp cho chúng ta địa chỉ Git repository của sourcecode của ứng dụng. Clone sourcecode này về máy local để tiến hành chỉnh sửa.
Tạo database:
1. Cài đặt MySQL:
Tại trang chi tiết của ứng dụng vừa tạo,
chọn "Add MySQL X.X". Trang
Add Cartridge mở ra, chọn "Add Cartridge".
2.
Cài phpMyAdmin:
Chọn
"Add phpMyAdmin X.X" > Add Cartridge.
3.
Mở phpMyAdmin để
thêm bảng (table) trong database
http://<your-app>.rhcloud.com/phpmyadmin
4. Chọn database có tên trùng với tên application đã tạo. Sau đó tạo 2 table với cấu trúc như sau:
InboundMessage (Lưu trữ tin nhắn gửi đến)
OutboundMessage (Lưu trữ tin nhắn gửi đi)
3. Coding
Sau khi clone sourcecode về, ta có cấu trúc thư mục của project như sau:
Mở project trên bằng Netbeans IDE:
Mở file pom.xml, xóa bỏ dependency PostgreSQL do không dùng đến và thêm các dependency mới bao gồm MySQL Java connector, Servlet API, JSP API, JSTL, và Twilio API:
Tiến hành build để Netbeans tải về các thư viện cần thiết.
Tạo các Entity Classes:
InboundMessage.java
OutboundMessage.java
Tạo các util class để truy cập database và gửi tin nhắn:
DbUtils.java
Ghi chú:
·
Các tham số host:port,
username và password của MySQL instance được
OpenShift cung cấp thông qua các biến môi trường
OPENSHIFT_*.
Xem danh sách đầy đủ các biến môi trường
tại: https://developers.openshift.com/en/managing-environment-variables.html
· Do mục đích học tập nên sẽ không bắt các Exception.
SmsUtils.java
Tham khảo chi tiết cách sử
dụng Twilio API tại:
https://www.twilio.com/docs/api/rest/sending-messages.
Tạo các Servlet:
HomeServlet (map với /home)
home.jsp
StatusCallbackServlet (map với /statusCallback)
Vai trò: Nhận thông báo từ Twilio về trạng thái của tin nhắn gửi đi.
Xem danh sách các tham số và các trạng thái của tin nhắn tại https://www.twilio.com/docs/api/rest/message#sms-status-values.
InboundHandlerServlet (map với /inboundHandler)
Vai trò: Nhận tin nhắn từ Twilio do người dùng gửi đến và lưu trữ xuống database.
Xem danh sách tham số tại: https://www.twilio.com/docs/api/rest/message.
Sau khi hoàn tất 3 servlet trên, nội dung mapping trong file web.xml như sau:
4. Deploy & Test
Developer chỉ cần commit và push sourcecode lên remote repository, OpenShift sẽ tiến hành build và deploy ứng dụng:
$ git add .
$ git commit -m "<your message>"
$ git push origin master
Sau khi deploy hoàn tất, truy cập vào trang home:
Kiểm tra chức năng gửi tin:
Nhập số điện thoại (+84...) và nội dung tin nhắn, rồi nhấn Send.
Nếu hệ thống kết nối và gửi request đến đến dịch vụ của Twilio thành công thì tin nhắn sẽ được lưu lại trên database của ứng dụng (+ database của Twilio). Đồng thời Twilio cũng gửi về SID và trạng thái ban đầu của tin nhắn.
Các trạng thái sau đó của tin nhắn (gửi thành công hoặc thất bại, etc..) sẽ được Twilio thông báo cho ứng dụng web qua 1 callback URL như đã cài đặt trong SmsUtils.java. StatusCallbackServlet sẽ đón nhận HTTP POST message từ Twilio, lấy giá trị các parameters để cập nhật trạng thái của tin nhắn đã lưu trong database.
Kiểm tra chức năng nhận tin nhắn:
Cấu hình để nhận tin nhắn:
Khi tin nhắn được nhà cung cấp dịch vụ viễn thông gửi đến Twilio, Twilio sẽ thông báo đến web application thông qua 1 HTTP POST message đến 1 URL của ứng dụng. URL này cần được thiết lập trên tài khoản Twilio của bạn.
1. Đăng nhập vào tài khoản Twilio, vào trang NUMBERS > Twilio Numbers, chọn số điện thoại tương ứng.
2.
Trên trang chi
tiết, mục Messaging, điền
vào ô Request URL địa chỉ của Servlet sẽ
đón nhập request từ
Twilio.
Ví dụ: http://twiliotutorial-trphuctho.rhcloud.com/inboundHandler.
3. Nhấn Save để lưu lại.
Kiểm tra:
Gửi 1 tin nhắn SMS từ điện thoại của bạn (không cần thiết phải xác thực) đến số mà Twilio cung cấp, sẽ thấy tin nhắn xuất hiện trong mục Inbound Messages của ứng dụng web.
Source code: https://github.com/thotp/twiliotutorial
good, cảm ơn bạn
Trả lờiXóa