Thứ Hai, 5 tháng 9, 2016

Gửi và nhận tin nhắn SMS với Twilio

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 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:
C
họ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 shost:port, username 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...) 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

1 nhận xét: