Bạn đã từng thử gửi code gửi tin nhắn sms online miễn phí từ một dịch vụ web chưa? Ngày trước, hồi mà các dịch vụ OTT chưa phổ biến như bây giờ, mình cũng thi thoảng sử dụng dịch vụ gửi tin nhắn miễn phí mỗi khi hết “xiền”.
Giờ SMS không còn là phương tiện liên lạc chính như xưa, nhưng nó vẫn có một chỗ đứng vứng chắc trong thời buổi hiện đại ngày nay. SMS được dùng để xác thực tài khoản, dùng làm một lớp bảo mật tài khoản ngân hàng, email, Facebook…
Có rất nhiều ứng dụng thực tế vẫn sử dụng SMS như một phương tiện liên lạc, quảng bá cho dịch vụ của họ. Nếu bạn có ý tưởng, mọi điều không thể đều có thể.
Hôm nay, mình sẽ hướng dẫn các bạn tự xây dựng một server để gửi SMS API online, công cụ chính là Node.js và Express.
Chúng ta bắt đầu nhé gửi sms bằng Nodejs nhé!
Nội dung chính của bài viết
Yêu cầu chuẩn bị
Để thực hiện bài viết, bạn cần chuẩn bị trước những yêu cầu sau:
- Một tài khoản Nexmo.
- js đã được cài đặt trong máy tính (Xem hướng dẫn cài đặt Node.js)
- ngrok: công cụ để có thể truy cập code trên máy tính của bạn từ bên ngoài internet.
- Cuối cùng là Nexmo CLI:
$ npm install -g nexmo-cli
Sau khi môi trường phát triển đã sẵn sàng thì chúng ta tiến hành viết code thôi.
Sử dụng SMS API để gửi SMS online
Nexmo là dịch vụ cung cấp rất nhiều API hay ho như: SMS API, Voice API, Facebook Message API… Ở bài viết này, để gửi tin nhắn SMS thì tất nhiên chúng ta sẽ sử dụng SMS API.
#Cài đặt dependencies cần thiết
Đầu tiên, chúng ta cần phải cài đặt thư viện mã Nexmo cung cấp bằng NPM. Cách cài đặt Nexmo cũng như bao thư viện khác thôi.
$ npm install nexmo
Sau đó, tạo một file index.js
$touch index.js
Chúng ta cần khởi tạo thư viện Nexmo mà chúng ta vừa cài trước đó. Trong file index.js, bạn thêm đoạn code sau:
const Nexmo = require('nexmo') const nexmo = new Nexmo({ apiKey: NEXMO_API_KEY, apiSecret: NEXMO_API_SECRET })
#Gửi tin nhắn SMS bằng SMS API
Thư viện Nexmo có API để gửi tin nhắn SMS, đó là: nexmo.message.sendSms
API này 4 tham số: số điện thoại from, số điện tới, nội dung tin nhắn và cấu hình tin nhắn.
Dữ liệu trả về của API là một mảng các tin nhắn đã được gửi kèm trạng thái (gửi thành công hay lỗi). Mỗi phần tử trong mảng trả về sẽ là một block tin nhắn 160 ký tự. Tức là:
- Nếu bạn gửi tin nhắn với nội dung ngắn, nhỏ hơn 160 ký tự thì mảng trả về chỉ có 1 phần tử.
- Còn nếu tin nhắn dài, phải chia thành nhiều block 160 ký tự thì mảng trả về sẽ tương ứng từng ấy phần tử.
let text = "Hello from Nexmo";
nexmo.message.sendSms("Nexmo", "TO_NUMBER", text, {
type: "unicode"
}, (err, responseData) => {
if (err) {
console.log(err);
} else {
if (responseData.messages[0]['status'] === "0") {
console.log("Message sent successfully.");
} else {
console.log(Message failed with error: ${responseData.messages[0]['error-text']}
);
}
}
})
Nếu nhà mạnh hỗ trợ alphanumeric sender ID, thì trường from có thể text, thay vì số điện thoại. Ở Việt Nam thì hầu hết các nhà mạng đều hỗ trợ, bạn để ý thi thoảng có các tin nhắn quảng cáo từ ngân hàng mà chỉ hiển thị tên ngân hàng mà không hiển thị số người gửi không?
Phần tiếp theo, mình sẽ chỉnh sửa lại chút và tạo rest API để dùng khi gửi tin nhắn từ ứng dụng.
Và đây là toàn bộ mã nguồn file index.js
const express = require('express')
const app = express()
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded());
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
app.post("/sendsms", function(req, res) {
let fromPhone = req.body.fromPhone;
let toPhone = req.body.toPhone;
let content = req.body.content;
sendSMS(fromPhone, toPhone, content, function(responseData){
console.log(responseData);
});
})
/**
* Author: VNTALKING.COM
* send SMS use Nexmo SMS Api.
* @param {*} fromPhone the phone number which send sms
* @param {*} toPhone the phone number which receive sms
* @param {*} content the body of message sms
* @param {*} callback after send sms
*/
function sendSMS(fromPhone, toPhone, content, callback){
nexmo.message.sendSms(fromPhone, toPhone, content, {
type: "unicode"
}, (err, responseData) => {
if (err) {
console.log(err);
} else {
if (responseData.messages[0]['status'] === "0") {
callback("Message sent successfully.")
} else {
callback(Message failed with error: ${responseData.messages[0]['error-text']}
);
}
}
})
}
Bạn chạy thử server bằng lệnh: $ node index.js
Giờ bạn có thể sử dụng Postman để tạo thử một POST request tới server của bạn và hưởng thụ thành quả.
Hy vọng qua cách sử dụng SMS API bạn có thể lập trình gửi tin nhắn sms free nhanh chóng!
Chào bạn. Mình có 1 thắc mắc là trên Nexmo có tính phí gửi tin nhắn mà. Phí gửi tới số điện thoại ở VN là 0.05Euro/message.
https://dashboard.nexmo.com/pricing
Chạy node index.js báo lỗi: Message failed with error: Non White-listed Destination – rejected
Làm sao để sửa vậy admin
Hi,
Lỗi này do Nexmo yêu cầu phải add số điện thoại test vào whitelist. Bạn có thể tham khảo thêm hướng dẫn của nhà cung cấp tại đây: https://help.nexmo.com/hc/en-us/articles/204014853-Nexmo-trial-period-How-to-add-numbers-to-list-of-permitted-destinations-
Cái hình dưới câu : “Còn nếu tin nhắn dài, phải chia thành nhiều block 160 ký tự thì mảng trả về sẽ tương ứng từng ấy phần tử.” thì để trong đâu vậy ad
Hi Duy Do,
Bạn vẫn để trong file index.js nhé
anh cho em hoir phan 2 cua minh co’ chua anh
Phần 2 nào bạn nhỉ? bài viết trên là hoàn thành rùi bạn