Rumah >hujung hadapan web >tutorial js >Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Lisa Kudrow
Lisa Kudrowasal
2025-02-18 11:04:13977semak imbas

Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Artikel ini dikaji semula oleh Marc Towler dan Bruno Mota. Terima kasih kepada semua pengulas rakan sebaya SitePoint untuk membuat kandungan SitePoint yang terbaik! Dalam tutorial ini kita akan membina aplikasi peringatan SMS dengan Node.js. Kami akan menggunakan Kalendar Google Pengguna untuk mendapatkan pelantikan dan kemudian menghantar mesej teks dengan Twilio.

seperti biasa, anda boleh mencari kod yang digunakan dalam tutorial ini dari repo github.

Takeaways Key

    menyediakan akaun yang diperlukan dengan Google dan Twilio, dan membolehkan API seperti API Google Calendar untuk mengambil pelantikan.
  • Gunakan node.js dan pelbagai perpustakaan seperti Express, Googleapis, dan Twilio untuk membina fungsi teras aplikasi peringatan SMS.
  • Melaksanakan OAuth 2.0 untuk Pengesahan Pengguna untuk mengakses data kalendar Google dengan selamat.
  • Gunakan pangkalan data MySQL untuk menyimpan data pengguna dan butiran pelantikan yang diambil dari Google Calendar.
  • Tugas Jadual Menggunakan Cron di Node.js Untuk mengautomasikan pengambilan acara dari Google Calendar dan menghantar peringatan SMS melalui Twilio.
  • mengendalikan kesilapan dan pastikan pembalakan yang mantap untuk menyelesaikan masalah semasa pembangunan dan penggunaan aplikasi.
Menetapkan perkara ke atas

Pertama, anda perlu mempunyai akaun Google dan akaun Twilio. Jika anda tidak mempunyai mereka, anda boleh pergi ke hadapan dan mendaftar. Berikut adalah pautan:

    google
  • Twilio
  • Anda tidak perlu bimbang tentang Twilio, ia bebas untuk mencuba.

Projek Konsol Google

Sebaik sahaja anda mempunyai akaun Google, pergi ke Konsol Google dan buat aplikasi baru. Secara lalai halaman Google Console menunjukkan kepada anda papan pemuka aplikasi terbaru yang telah anda kerjakan. Tetapi jika anda tidak bekerja pada mana -mana projek tetapi ia akan menunjukkan perkara berikut:

dari sana anda boleh mengklik menu Pilih Projek di sudut kanan atas dan pilih Buat Projek. Ini membuka tetingkap modal yang membolehkan anda memasuki tajuk projek. Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Setelah projek dibuat, papan pemuka dipaparkan. Dari sana anda boleh mengklik penggunaan API Google, cari API Kalendar Google dan membolehkannya. Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Setelah API diaktifkan, ia akan meminta anda untuk membuat kelayakan. Klik pergi ke kelayakan untuk mula menetapkannya. Ini akan menunjukkan kepada anda perkara berikut: Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Klik pada butang Tambah Kelayakan kemudian pilih OAuth 2.0 Client ID.

Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio Ini akan meminta anda untuk mengkonfigurasi skrin persetujuan terlebih dahulu. Klik pada Konfigurasi Skrin Persetujuan.

masukkan nilai untuk nama produk yang ditunjukkan ke medan teks Pengguna dan klik Simpan.

Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Setelah itu dikonfigurasikan, anda kini boleh membuat ID klien. Pilih aplikasi web untuk jenis aplikasi, tinggalkan nama lalai (jika anda mahu), masukkan http: // localhost: 3000/login untuk uris redirect yang diberi kuasa kemudian klik Buat.

Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio

Ini membuka modal yang memaparkan ID pelanggan dan rahsia pelanggan. Perhatikan mereka buat masa ini kerana kami akan menggunakannya kemudian.

Twilio

Sebaik sahaja anda telah membuat akaun Twilio, pergi ke halaman Tetapan dan perhatikan nilai -nilai untuk AccountSID dan Authtoken di bawah kelayakan API secara langsung.

seterusnya pergi ke papan pemuka suara yang boleh diprogramkan. Di sinilah anda dapat melihat nombor kotak pasir. Anda boleh menggunakan nombor ini untuk menguji Twilio. Tetapi kemudian anda perlu membeli nombor telefon supaya mesej teks yang dihantar oleh Twilio tidak akan mempunyai "dihantar dari Twilio Sandbox" ditambah kepadanya. Satu lagi had nombor kotak pasir Twilio ialah ia hanya boleh digunakan dengan nombor yang disahkan. Yang bermaksud anda perlu mendaftarkan nombor telefon dengan Twilio untuk menghantar mesej kepadanya. Anda boleh melakukan ini dari halaman IDS Urus Pemanggil.

Membina aplikasi

Sekarang kami sudah bersedia untuk membina aplikasinya. Sebelum kami meneruskan, saya ingin memberikan gambaran ringkas tentang bagaimana kami akan melaksanakan aplikasinya. Akan ada tiga fail utama: satu untuk pelayan, satu untuk acara caching dari Google Calendar dan satu untuk mengingatkan pengguna. Pelayan digunakan untuk membenarkan pengguna log masuk dan mendapatkan token akses. Acara akan disimpan dalam pangkalan data MySQL dan konfigurasi aplikasi global akan ditambah dalam fail .json. Pelaksanaan Node Cron akan digunakan untuk melaksanakan tugas untuk acara caching dan mengingatkan pengguna.

Memasang kebergantungan

di direktori kerja anda, buat fail pakej.json dan tambahkan yang berikut:

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

Dalam fail ini, kami menentukan nama dan versi perpustakaan yang bergantung kepada aplikasi kami. Berikut adalah pemecahan penggunaan untuk setiap perpustakaan:

  • config - digunakan untuk menyimpan dan mengambil konfigurasi aplikasi global.
  • Cron - Digunakan untuk melaksanakan tugas tertentu pada waktu tertentu pada hari itu. Dalam aplikasi ini kami menggunakannya untuk menjalankan tugas untuk acara caching dari pengguna Kalendar Google dan menghantar peringatan teks.
  • Express - Rangka Kerja Web Defacto untuk Node.js. Kami menggunakannya untuk melayani halaman log masuk.
  • Googleapis - pelanggan Node.js rasmi untuk API Google.
  • Momen - Perpustakaan Tarikh dan Masa. Kami menggunakannya dengan mudah memformat tarikh yang kami dapat dari API Kalendar Google.
  • momen-timeZone-plugin zon masa untuk momen. Ini menetapkan zon waktu lalai untuk aplikasi.
  • MySQL - Pelanggan MySQL untuk Node.js.
  • Twilio - pelanggan Twilio rasmi untuk Node.js. Ini membolehkan kita menghantar peringatan teks.

Jalankan NPM Pasang dari terminal anda untuk memasang semua kebergantungan.

Pangkalan data

Seperti yang dinyatakan sebelum ini, kami akan menggunakan pangkalan data MySQL untuk aplikasi ini. Teruskan dan buat pangkalan data baru menggunakan alat pengurusan pangkalan data pilihan anda. Kemudian gunakan fail dump SQL berikut untuk membuat jadual: pelantikan-notifier.sql.

Terdapat dua jadual dalam pangkalan data: pengguna dan pelantikan. Jadual Pengguna digunakan untuk menyimpan data pengguna. Dalam kes aplikasi ini, kami hanya akan menyimpan satu pengguna, dan hanya token akses disimpan.

Jadual pelantikan digunakan untuk menyimpan acara yang kami dapat dari API Kalendar Google. Perhatikan bahawa ia tidak mempunyai medan user_id di dalamnya kerana kami hanya mempunyai satu pengguna. Dan kita akan mengambil semua baris yang mempunyai sifar sebagai nilai untuk medan yang diberitahu.

Konfigurasi App

Pada direktori kerja anda, buat folder konfigurasi kemudian di dalamnya buat fail lalai.json. Di sinilah kami akan meletakkan konfigurasi aplikasi global. Ini termasuk zon waktu, nombor telefon yang akan kami hantar peringatan, pangkalan data, aplikasi Google dan Twilio.

Berikut adalah templat, pastikan untuk mengisi semua bidang.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}
Fail biasa

sebagai pemaju yang baik kita perlu mengelakkan pengulangan kod sebanyak mungkin. Itulah sebabnya kita perlu meletakkan kod yang diperlukan oleh tiga fail utama (pelayan, cache, memberitahu) yang saya nyatakan sebelum ini ke dalam fail berasingan. Buat folder biasa di direktori kerja anda. Di sinilah kita akan menambah fail biasa.

Pangkalan data

Buat fail db.js di dalam direktori biasa kemudian tambahkan yang berikut:

Ini menggunakan Perpustakaan Config untuk mendapatkan nilai konfigurasi yang telah kami tambahkan lebih awal pada fail Config/Default.json. Khususnya kami mendapat konfigurasi pangkalan data supaya kami dapat menyambung ke pangkalan data. Kemudian kami mengeksport modul ini supaya kami dapat menggunakannya kemudian dari fail lain.

masa

fail time.js digunakan untuk menetapkan zon waktu lalai dengan perpustakaan momen-timeZone. Kami juga mengeksport nilai untuk zon waktu kerana kami akan menggunakannya kemudian apabila menjalankan dua tugas kron (acara caching dan pengguna memberitahu).

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

google

Fail Google.js digunakan untuk memulakan klien Google dan klien OAuth2. Untuk memulakan klien OAuth2, kita perlu lulus dalam ID Pelanggan, Rahsia Pelanggan dan URL Redirect yang telah kami tambahkan dalam fail konfigurasi lebih awal. Kemudian kami memulakan perkhidmatan Kalendar Google. Akhir sekali, kami mengeksport klien OAuth2, kalendar dan konfigurasi Google.

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}
Membuat pelayan

Sekarang kami sudah bersedia untuk bekerja di pelayan. Pelayan bertanggungjawab untuk mendapatkan token akses. Yang boleh digunakan untuk bercakap dengan API Kalendar Google tanpa pengguna yang sedang dilog masuk. Mulailah dengan membuat fail server.js dan menambah yang berikut:

var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;
Breaking It Down:

Pertama kami mengimport modul Google dan DB yang telah kami buat sebelum ini.

var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;
Buat pelayan Express yang berjalan di port 3000 localhost. Inilah sebabnya kami telah menambah http: // localhost: 3000/login lebih awal pada konfigurasi aplikasi dan dalam URI redirect untuk Google:

var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;
Tentukan fungsi updateAccessToken. Ini menerima dua hujah: token dan tindak balas. Token adalah token akses yang kami dapat dari Google selepas pengguna telah memberikan keizinan yang diperlukan. Dan respons adalah objek tindak balas yang datang dari Express. Kami menyampaikannya kepada fungsi ini supaya kami dapat menghantar respons kepada pengguna. Di dalam fungsi, kami mengemas kini Access_Token baris pertama. Seperti yang dinyatakan sebelum ini, aplikasi ini hanya berfungsi untuk pengguna tunggal. Sebaik sahaja akses_token dikemas kini, kami menghantar respons.

var google = require('./common/google');
var connection = require('./common/db');

var express = require('express');
var app = express();

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});


function updateAccessToken(tokens, response){

    connection.db.query(
        "UPDATE users SET access_token = ? WHERE id = 1", 
        [JSON.stringify(tokens)],
        function(err, rows, fields){
            if(!err){
                console.log('updated!');
                response.send('connected!');
            }else{
                console.log('error updating table');
                console.log(err);
                response.send('error occured, please try again');
            }
        }
    );

}

app.get('/', function(req, res){
    var url = google.oauth2Client.generateAuthUrl({
      access_type: google.config.access_type,
      scope: google.config.scopes
    });

    res.send('<a href="' + url + '">login to google</a>');
});


app.get('/login', function(req, res){
    var code = req.query.code;
    console.log('login');

    google.oauth2Client.getToken(code, function(err, tokens){

      if(!err){
        console.log('tokens');
        console.log(tokens);

        updateAccessToken(tokens, res);

      }else{
        res.send('error getting token');
        console.log('error getting token');
      }
    });

});
Tambahkan laluan untuk halaman rumah. Ini akan dilaksanakan apabila http: // localhost: 3000 diakses. Dari sini kita menjana URL Pengesahan. Ini menggunakan kaedah GenerateAuthurl dari OAuth2Client. Ia menerima objek yang mengandungi Access_Type dan skop. Kami mendapat nilai -nilai tersebut dari fail konfigurasi aplikasi yang telah kami buat sebelum ini. Akhir sekali, kami menghantar pautan sebenar yang pengguna boleh mengklik. Perhatikan bahawa anda harus selalu melakukan ini di dalam pandangan, tetapi untuk mempermudahkan perkara -perkara yang kita akan terus mengembalikan pautan.

var google = require('./common/google');
var connection = require('./common/db');
Tambah laluan untuk log masuk. Ini adalah laluan di mana pengguna akan diarahkan semula selepas memberikan keizinan yang diperlukan kepada aplikasinya. Google meluluskan parameter pertanyaan yang dipanggil kod. Dan kami mendapatkannya melalui objek pertanyaan dalam permintaan. Kami kemudian memanggil kaedah getToken dan lulus dalam kod sebagai hujah. Ini akan memberi kita token akses. Oleh itu, kami memanggil fungsi updateAccessToken untuk menyimpannya ke dalam pangkalan data.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

Membuat Cacher

Cacher bertanggungjawab untuk menyimpan pelantikan pengguna ke dalam pangkalan data. Ini menghalang kita daripada perlu menanyakan direktori API Kalendar Google setiap kali kita menghantar peringatan. Buat fail Cache.js dan tambahkan yang berikut:

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}

Breaking It Down:

pertama kita mengimport semua modul yang kita perlukan.

var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;

Fungsi AddPointment bertanggungjawab untuk menyelamatkan pelantikan ke dalam jadual pelantikan. Ini menerima Event_ID, Ringkasan, Mula dan Akhir DateTime pelantikan. Event_id pada dasarnya adalah ID pelantikan khusus dalam Kalendar Google. Kami menggunakannya sebagai nilai untuk kunci utama, yang bermaksud bahawa pendua tidak akan dimasukkan ke dalam jadual pelantikan. Apa yang kurang di sini adalah cara untuk membandingkan pelantikan yang sudah ada dalam pangkalan data dan yang dikembalikan oleh API. Jika atas sebab tertentu jadual pelantikan berubah, pangkalan data tidak akan dikemas kini kerana semua yang kami lakukan di sini adalah memasukkan ke dalam jadual. Saya akan meninggalkannya untuk senarai todo anda.

var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;

Fungsi GetEvents bertanggungjawab untuk gelung melalui semua pelantikan yang dikembalikan oleh API. Ini menggunakan kaedah tambahan untuk menyelamatkan pelantikan untuk setiap lelaran gelung.

var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;

Kaedah cache adalah yang membuat panggilan sebenar ke API Kalendar Google. Ini adalah melalui penggunaan klien Google. Di sini kami memanggil kaedah senarai pada objek kalendar.Events. Ini menerima dua hujah: Pertama adalah objek yang mengandungi pilihan untuk pertanyaan dan yang kedua adalah fungsi yang akan dilaksanakan sebaik sahaja hasilnya dikembalikan.

var google = require('./common/google');
var connection = require('./common/db');

var express = require('express');
var app = express();

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});


function updateAccessToken(tokens, response){

    connection.db.query(
        "UPDATE users SET access_token = ? WHERE id = 1", 
        [JSON.stringify(tokens)],
        function(err, rows, fields){
            if(!err){
                console.log('updated!');
                response.send('connected!');
            }else{
                console.log('error updating table');
                console.log(err);
                response.send('error occured, please try again');
            }
        }
    );

}

app.get('/', function(req, res){
    var url = google.oauth2Client.generateAuthUrl({
      access_type: google.config.access_type,
      scope: google.config.scopes
    });

    res.send('<a href="' + url + '">login to google</a>');
});


app.get('/login', function(req, res){
    var code = req.query.code;
    console.log('login');

    google.oauth2Client.getToken(code, function(err, tokens){

      if(!err){
        console.log('tokens');
        console.log(tokens);

        updateAccessToken(tokens, res);

      }else{
        res.send('error getting token');
        console.log('error getting token');
      }
    });

});

Dalam objek yang mengandungi pilihan, kami mempunyai yang berikut:

  • Auth - Ini adalah OAuth2Client. Ini digunakan untuk mengesahkan permintaan.
  • Calendarid - ID kalendar di mana kami akan mendapat pelantikan. Dalam kes ini kita menggunakan kalendar utama. Kalendar Google sebenarnya membolehkan anda membuat banyak kalendar. Orang lain juga boleh berkongsi kalendar mereka kepada anda. Dan setiap kalendar mempunyai ID mereka sendiri. Itulah yang kami nyatakan di sini. Jika anda berminat untuk mengakses kalendar lain, pastikan anda menyemak dokumentasi API pada kalendar.
  • timemin - DateTime asas yang akan digunakan dalam pertanyaan. Dalam kes ini kita menggunakan datetime semasa. Kerana siapa yang ingin diberitahu tentang peristiwa yang berlaku pada masa lalu? Perhatikan walaupun ini menggunakan standard ISO 8601 untuk mewakili masa. Syukurlah ada kaedah yang dipanggil ToisoString pada saat yang boleh kita gunakan untuk mendapatkannya.
  • MaxResults - Jumlah hasil yang anda mahu kembali.
  • SingleEvents-membolehkan anda menentukan sama ada untuk mengembalikan hanya satu peristiwa satu kali. Di sini kami telah menggunakan benar yang bermaksud bahawa peristiwa berulang tidak akan dikembalikan.
  • orderby - membolehkan anda menentukan susunan di mana hasilnya akan dikembalikan. Dalam kes ini kami telah menggunakan permulaan yang memerintahkan hasil dalam urutan menaik berdasarkan masa permulaan mereka. Ini hanya tersedia jika pilihan SingleEvents ditetapkan kepada Benar.

Semua pilihan ini dan banyak lagi boleh didapati dalam acara: Senarai Dokumentasi

Dapatkan akses_token dari pangkalan data dan gunakannya untuk menetapkan kelayakan untuk klien OAuth2Client. Sebaik sahaja itu selesai, buat kerja kron baru yang akan menjalankan kaedah cache setiap hari pada 12 tengah malam.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

Membuat pemberitahuan

Terakhir tetapi tidak kurang kita mempunyai pemberitahuan (notify.js). Ini bertanggungjawab untuk mendapatkan pelantikan dari pangkalan data dan menentukan jika mereka masak untuk pemberitahuan. Sekiranya mereka, maka kami menghantarnya.

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}

Breaking It Down:

mengimport semua modul yang diperlukan.

var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;

Buat fungsi updateAppointment. Ini menerima ID pelantikan sebagai hujahnya. Apa yang dilakukan adalah menetapkan nilai untuk medan yang diberitahu kepada 1 yang bermaksud bahawa pemberitahuan untuk pelantikan tertentu telah dihantar.

var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;

Seterusnya kita mempunyai fungsi Sendnotifications. Ini bertanggungjawab untuk benar -benar menghantar peringatan teks dengan Twilio. Fungsi ini akan dipanggil selepas mengambil pelantikan dari pangkalan data. Itulah sebabnya ia mempunyai ralat, keputusan, dan argumen Fields yang disampaikan ke dalamnya. Ralat mengandungi sebarang ralat dari pangkalan data. Keputusan mengandungi baris yang dikembalikan dari pangkalan data. Dan medan mengandungi maklumat mengenai medan hasil yang dikembalikan.

var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;

di dalam fungsi kami mendapat nombor telefon pengguna dari konfigurasi aplikasi.

{
  "name": "google-calendar-twilio",
  "version": "0.0.1",
  "dependencies": {
    "config": "^1.17.1",
    "cron": "^1.1.0",
    "express": "^4.13.3",
    "googleapis": "^2.1.6",
    "moment": "^2.10.6",
    "moment-timezone": "^0.4.1",
    "mysql": "felixge/node-mysql",
    "twilio": "^2.6.0"
  }
}

semak jika terdapat sebarang kesilapan dan jika tidak ada yang meneruskan dengan gelung melalui semua hasil yang dikembalikan.

{
    "app": {
        "timezone": "Asia/Manila"
    },

    "me": {
        "phone_number": ""
    },

    "db": {
        "host": "localhost",
        "user": "root",
        "password": "secret",
        "database": "calendar_notifier"
    },

    "google":{
        "client_id": "THE CLIENT ID OF YOUR GOOGLE APP",
        "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP",
        "redirect_uri": "http://localhost:3000/login",
        "access_type": "offline",
        "scopes": [
            "https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/calendar"
        ]
    },

    "twilio": {
        "sid": "YOUR TWILIO SID",
        "secret": "YOUR TWILIO SECRET",
        "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER"
    }

}

Di dalam gelung kita mengekstrak semua nilai yang kita perlukan dan membina mesej sebenar yang akan dihantar. Kami juga mendapat perbezaan jam antara masa semasa dan masa permulaan pelantikan. Kami periksa sama ada perbezaan jam kurang daripada atau sama dengan 24 jam.

var config = require('config');

var db_config = config.get('db');
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: db_config.host,
    user: db_config.user,
    password: db_config.password,
    database: db_config.database
});

exports.db = connection;

Jika kurang daripada atau sama dengan 24 jam, kami menghantar pemberitahuan. Ini adalah melalui penggunaan pelanggan Twilio. Kami memanggil SendMessage dan lulus dalam objek yang mengandungi kepada (nombor telefon pengguna), dari (nombor sandobox Twilio atau nombor telefon yang anda beli dari Twilio), dan badan yang mengandungi mesej teks. Sekiranya tidak ada kesilapan yang dikembalikan, kami mengandaikan bahawa pemberitahuan telah dihantar. Oleh itu, kami memanggil fungsi updateAppointment untuk menetapkan medan yang diberitahu kepada 1, jadi ia tidak akan dipilih pada masa akan datang tugas dijalankan.

var config = require('config');
var app_timezone = config.get('app.timezone');
var moment = require('moment-timezone');
moment.tz.setDefault(app_timezone);

exports.config = {
    timezone: app_timezone
};

exports.moment = moment;

Akhirnya kita mempunyai kaedah permulaan. Apa yang dilakukannya ialah memilih semua pelantikan dari jadual pelantikan yang pemberitahuannya belum dihantar. Fungsi ini akan dilaksanakan setiap 12 tengah hari dan 6 petang.

var config = require('config');
var google_config = config.get('google');

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri);

var calendar = google.calendar('v3');

exports.oauth2Client = oauth2Client; 
exports.calendar = calendar;
exports.config = google_config;

Kesimpulan

Itu sahaja! Dalam tutorial ini, anda telah belajar bagaimana untuk membuat aplikasi peringatan SMS dengan Twilio. Khususnya kami telah melihat bagaimana untuk mendapatkan pelantikan pengguna melalui API Kalendar Google. Kami telah menyelamatkan mereka dalam pangkalan data dan memberitahu pengguna melalui Twilio. Anda boleh mencari kod yang digunakan dalam tutorial ini dari repo GitHub.

Soalan Lazim (Soalan Lazim) Mengenai Membina Aplikasi Peringatan Pelantikan SMS Dengan Twilio

Bagaimanakah saya dapat menguji fungsi aplikasi peringatan pelantikan SMS saya? Anda boleh menggunakan alat ujian terbina dalam Twilio untuk mensimulasikan menghantar dan menerima mesej. Anda juga boleh menggunakan rangka kerja ujian unit seperti JEST atau MOCHA untuk kod JavaScript anda. Ingatlah untuk menguji semua fungsi termasuk penciptaan pelantikan, penjadualan peringatan, dan penghantaran SMS.

Bolehkah saya menyesuaikan mesej peringatan dalam aplikasi? . Kandungan mesej biasanya ditakrifkan dalam kod pelayan anda. Anda boleh mengubah suai ini untuk memasukkan sebarang maklumat yang anda mahukan, seperti masa pelantikan, lokasi, atau butiran lain yang berkaitan dengan pelantikan. Peringatan penjadualan untuk zon masa yang berbeza boleh menjadi agak rumit. Anda perlu menyimpan maklumat zon waktu untuk setiap pelantikan dan menggunakannya apabila menjadualkan peringatan. Objek tarikh JavaScript boleh mengendalikan penukaran zon waktu, atau anda boleh menggunakan perpustakaan seperti momen.js untuk senario yang lebih kompleks.

Apa yang berlaku jika SMS gagal menghantar? Anda juga boleh menetapkan pengendalian ralat dalam kod anda untuk log kegagalan ini dan mengambil tindakan yang sesuai, seperti meneruskan mesej atau memberitahu pengguna. Ya, anda boleh menggunakan aplikasi ini untuk beberapa pengguna. Anda perlu mengubah suai kod untuk mengaitkan pelantikan dengan pengguna tertentu dan memastikan peringatan dihantar ke nombor telefon yang betul. Ini mungkin melibatkan menambah pengesahan pengguna dan menguruskan data pengguna dalam pangkalan data anda.

Seberapa selamat data dalam aplikasi ini? Twilio menyediakan saluran komunikasi yang selamat, tetapi anda juga perlu memastikan bahawa pelayan dan pangkalan data anda selamat. Ini mungkin melibatkan menggunakan protokol selamat, menyulitkan data sensitif, dan mengikuti amalan terbaik untuk keselamatan web. sistem penjadualan anda yang sedia ada. Ini akan melibatkan mengubah kod untuk berinteraksi dengan API atau pangkalan data sistem anda. Butiran tepat bergantung kepada spesifik sistem penjadualan anda.

Berapakah kos untuk menghantar peringatan SMS dengan Twilio? mesej yang anda hantar dan negara yang anda hantar. Twilio menyediakan struktur harga terperinci di laman web mereka.

Bolehkah saya menghantar peringatan kepada nombor antarabangsa? Walau bagaimanapun, anda perlu memastikan bahawa anda mematuhi peraturan SMS di setiap negara, dan kosnya mungkin lebih tinggi daripada mesej domestik. 🎜> Anda boleh memantau prestasi aplikasi anda menggunakan pelbagai alat. Twilio menyediakan analisis untuk penggunaan SMS anda, dan anda boleh menggunakan alat pemantauan pelayan untuk mengesan prestasi kod pelayan anda. Anda juga harus melaksanakan pembalakan untuk membantu mendiagnosis sebarang isu yang timbul.

Atas ialah kandungan terperinci Cara Membina Aplikasi Peringatan Pelantikan SMS dengan Twilio. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Pandangan yang mendalam di CORSArtikel seterusnya:Pandangan yang mendalam di CORS