Tự tạo server gửi SMS free online với Node.js – Express

0

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é!

gửi sms api miễn phí với Node.js

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
})
Lưu ý: Bạn cần phải thay thế apiKey và apiSecret của bạn. Để lấy 2 loại key này, Bạn có thể thấy trong trang “Getting Started” trong Nexmo Dashboard

#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 với 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!

Bình luận. Đặt câu hỏi cũng là một cách học

avatar
  Theo dõi bình luận  
Thông báo