TwilioでSMS予定リマインダーアプリを構築する方法
相変わらず、GitHub Repoからこのチュートリアルで使用されているコードを見つけることができます。
キーテイクアウト
GoogleおよびTwilioで必要なアカウントを設定し、予定を取得するためにGoogleカレンダーAPIなどのAPIを有効にします。
node.jsやExpress、Googleapis、Twilioなどのさまざまなライブラリを使用して、SMSリマインダーアプリのコア機能を構築します。- ユーザー認証用のOAUTH 2.0を実装して、Googleカレンダーデータに安全にアクセスします。
- MySQLデータベースを使用して、Googleカレンダーから取得したユーザーデータと予定の詳細を保存します。 node.jsでcronを使用してタスクをスケジュールして、Googleカレンダーからのイベントのフェッチを自動化し、twilioを介してSMSリマインダーの送信を自動化します。
- エラーを処理し、アプリの開発と展開中に問題をトラブルシューティングするための堅牢なロギングを確認してください。
- のセットアップ
- 最初に、GoogleアカウントとTwilioアカウントが必要になります。まだ持っていない場合は、先に進んでサインアップできます。リンクは次のとおりです
- twilio
Twilioについて心配する必要はありません。無料で試してみることができます。
Google Console Project
- Googleアカウントを取得したら、Googleコンソールにアクセスして新しいアプリを作成します。デフォルトでは、Googleコンソールページに、取り組んだ最新のアプリのダッシュボードが表示されます。ただし、まだプロジェクトに取り組んでいない場合は、次のことが表示されます。
- そこから、右上隅にある[プロジェクト]メニューの選択をクリックして、[プロジェクトの作成]を選択できます。これにより、プロジェクトのタイトルを入力できるモーダルウィンドウが開きます。
- プロジェクトが作成されると、ダッシュボードが表示されます。そこから、Google APIの使用をクリックして、GoogleカレンダーAPIを検索して有効にすることができます。
APIが有効になったら、資格情報を作成するように依頼します。 [資格情報]をクリックして、セットアップを開始します。これには、次のことが表示されます
[資格情報の追加]ボタンをクリックしてから、OAUTH 2.0クライアントIDを選択します。
これにより、最初に同意画面を構成するように依頼します。 [同意]画面の構成をクリックしますテキストフィールドに表示されている製品名の値を入力し、[保存]をクリックします。
それが構成されたら、クライアントIDを作成できるようになりました。アプリケーションタイプのWebアプリケーションを選択し、デフォルト名(必要な場合)を残し、http:// localhost:3000/login for autherized redirect urisを入力し、[作成]をクリックします。

twilio
Twilioアカウントを作成したら、[設定]ページに移動して、Live API資格情報の下でAccountSIDとAuthTokenの値に注意してください。
次に、プログラム可能な音声ダッシュボードに移動します。これは、サンドボックス番号を見ることができる場所です。この番号を使用してTwilioをテストできます。ただし、後で電話番号を購入する必要があります。これにより、Twilioが送信したテキストメッセージに「Twilio Sandboxから送信された」
が追加されないようにする必要があります。 Twilioサンドボックス番号のもう1つの制限は、検証済みの数字でのみ使用できることです。つまり、メッセージを送信するには、Twilioに電話番号を登録する必要があります。これは、Caller IDSの管理ページから実行できます。アプリの構築 これで、アプリを構築する準備が整いました。先に進む前に、アプリの実装方法について簡単に説明したいと思います。 3つの主要なファイルがあります。1つはサーバー用、もう1つはGoogleカレンダーからのキャッシュイベント、もう1つはユーザーを思い出させるためです。サーバーは、ユーザーがログインしてアクセストークンを取得できるようにするために使用されます。イベントはMySQLデータベースに保存され、グローバルアプリの構成は.JSONファイルに追加されます。 NodeのCronの実装は、キャッシュイベントのタスクを実行し、ユーザーに思い出させるために使用されます。
依存関係のインストール
ワーキングディレクトリで、package.jsonファイルを作成して、次を追加します。
このファイルでは、アプリが依存しているライブラリの名前とバージョンを指定しています。各ライブラリの使用法の分解:
- 構成 - グローバルアプリの構成の保存と取得に使用されます。
- cron - 特定の時間に特定のタスクを実行するために使用されます。このアプリでは、ユーザーのキャッシュイベントのタスクを実行して、Googleカレンダーからテキストリマインダーを送信するために使用しています。
express - node.jsのfacto webフレームワークログインページを提供するために使用しています
- Googleapis - GoogleのAPIの公式Node.jsクライアント。
- 瞬間 - 日付と時刻のライブラリ。 GoogleカレンダーAPIから得られる日付を簡単にフォーマットするために使用しています。
- Moment-TimeZone - すぐにTimeZoneプラグイン。これにより、アプリのデフォルトのタイムゾーンが設定されます。
- mysql - node.jsのmysqlクライアント
- twilio - node.jsの公式Twilioクライアントこれにより、テキストリマインダーを送信できます
- 端末からnpmインストールを実行して、すべての依存関係をインストールします。
データベース
前述のように、このアプリにはMySQLデータベースを使用します。先に進み、選択したデータベース管理ツールを使用して新しいデータベースを作成します。次に、次のSQLダンプファイルを使用してテーブルを作成します。
データベースには、ユーザーとアポイントメントの2つのテーブルがあります。ユーザーテーブルは、ユーザーのデータを保存するために使用されます。このアプリの場合、1人のユーザーのみを保存し、アクセストークンのみが保存されます。
予定テーブルは、Google Calendar APIから入手したイベントを保存するために使用されます。ユーザーが1人しかないため、user_idフィールドがないことに注意してください。そして、通知フィールドの値としてゼロのすべての行をフェッチします。APP Configuration
ワーキングディレクトリで、構成フォルダーを作成してから内部でdefault.jsonファイルを作成します。これは、グローバルアプリの構成を配置する場所です。これには、TimeZone、リマインダー、データベース、Googleアプリ、Twilioの設定を送信する電話番号が含まれます。
こちらがテンプレートです。すべてのフィールドに記入してください。
優れた開発者として、できる限りコードの繰り返しを避ける必要があります。そのため、前述の3つの主要なファイル(サーバー、キャッシュ、通知)に必要なコードを配置する必要があります。作業ディレクトリに共通のフォルダーを作成します。これは、一般的なファイルを追加する場所です。
データベース
共通ディレクトリ内にDB.JSファイルを作成してから、以下を追加します。
これにより、構成ライブラリを使用して、config/default.jsonファイルで以前に追加した構成値を取得します。具体的には、データベースに接続できるようにデータベース構成を取得しています。次に、このモジュールをエクスポートして、後で別のファイルから使用できるようにします。時間
time.jsファイルは、モーメントタイムゾーンライブラリでデフォルトのタイムゾーンを設定するために使用されます。また、2つのCronタスク(キャッシュイベントとユーザーへの通知)を実行するときに後で使用するため、TimeZoneの値をエクスポートします。
{ "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.jsファイルは、GoogleクライアントとOAUTH2クライアントの初期化に使用されます。 OAUTH2クライアントを初期化するには、以前に構成ファイルに追加したクライアントID、クライアントシークレット、リダイレクトURLに渡す必要があります。次に、Googleカレンダーサービスを初期化します。最後に、OAUTH2クライアント、カレンダー、および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" } }
これで、サーバーで作業する準備ができました。サーバーは、アクセストークンを取得する責任があります。これは、ユーザーが現在ログインしていることなくGoogleカレンダーAPIとの通知に使用できます。Server.jsファイルを作成して以下を追加することから始めます。
それを分解:
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;
LocalHostのポート3000で実行されるExpressサーバーを作成します。これが、http:// localhost:3000/login fary app configurationで、GoogleのリダイレクトURIを追加した理由です。
updateaccesstoken関数を定義します。これは、トークンと応答という2つの引数を受け入れます。トークンは、ユーザーが必要なアクセス許可を与えた後にGoogleから得られるアクセストークンです。応答は、Expressから来る応答オブジェクトです。ユーザーに応答を送信できるように、この関数に渡しています。関数内で、最初の行のAccess_Tokenを更新します。前述のように、このアプリは単一のユーザーでのみ機能します。 Access_Tokenが更新されたら、応答を送信します
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;
ホームページのルートを追加します。これは、http:// localhost:3000にアクセスすると実行されます。ここから認証URLを生成します。これは、OAuth2ClientのGenerateAuthurlメソッドを使用します。 Access_Typeとスコープを含むオブジェクトを受け入れます。以前に作成したアプリ構成ファイルからこれらの値を取得しています。最後に、ユーザーがクリックできる実際のリンクを送信します。常にビュー内でこれを行う必要がありますが、物事を単純化するためには、リンクを直接返すだけです。
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;
{ "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" } }
CACHER
の作成Cacherは、ユーザーの予定をデータベースに保存する責任があります。これにより、リマインダーを送信するたびにGoogleカレンダーAPIディレクトリを照会することができなくなります。 cache.jsファイルを作成し、以下を追加します
{ "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" } }
最初に、必要なすべてのモジュールをインポートします。
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;
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;
キャッシュ法は、GoogleカレンダーAPIに実際の呼び出しを行う方法です。これは、Googleクライアントの使用によるものです。ここでは、Calendar.Eventsオブジェクトのリストメソッドを呼び出します。これは2つの引数を受け入れます。1つ目はクエリのオプションを含むオブジェクトであり、2つ目は結果が返されると実行される関数です。
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;
オプションを含むオブジェクトには、次のことがあります。
- auth - これはoauth2clientです。これは、リクエストを認証するために使用されます カレンダーID - 予定を取得するカレンダーのID。この場合、プライマリカレンダーを使用しています。 Googleカレンダーを使用すると、実際に多くのカレンダーを作成できます。他の人はあなたと彼らのカレンダーを共有することもできます。そして、これらの各カレンダーには独自のIDがあります。それがここで指定していることです。他のカレンダーへのアクセスに興味がある場合は、カレンダーのAPIドキュメントを必ずチェックしてください。
- Timemin - クエリで使用される基本データタイム。この場合、現在のデータタイムを使用しています。誰が過去に起こったイベントの通知を取得したいのですか?ただし、これは時間を表すためにISO 8601標準を使用していることに注意してください。ありがたいことに、ToisoStringと呼ばれる方法があります。 MaxResults - 返品する結果の総数。
- シングルイベント - 1回限りのイベントのみを返すかどうかを指定できます。ここでは、繰り返しのイベントが返されないことを意味します。
- Orderby - 結果が返される順序を指定できます。この場合、開始時間に基づいて昇順で結果を注文するStartTimeを使用しました。これは、singleventsオプションがtrueに設定されている場合にのみ使用できます。
- これらのオプションと他の多くのオプションはすべてイベントにあります:リストドキュメント
- データベースからAccess_Tokenを取得し、OAUTH2CLIENTクライアントの資格情報を設定するためにそれを使用します。それが完了したら、12の真夜中に毎日キャッシュメソッドを実行する新しいCronジョブを作成します。
notifier
の作成最後になりましたが、通知者(notify.js)があります。これは、データベースから予約を取得し、通知の熟しているかどうかを判断する責任があります。もしそうなら、私たちはそれらを送ります
{ "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" } }
必要なすべてのモジュールをインポートします。
{ "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" } }
次に、sendnotifications関数があります。これは、Twilioで実際にテキストリマインダーを送信する責任があります。この関数は、データベースから予定を取得した後に呼び出されます。そのため、エラー、結果、およびフィールドの議論が渡された理由です。エラーには、データベースからのエラーが含まれます。結果には、データベースから返される行が含まれています。フィールドには、返された結果フィールドに関する情報が含まれています。
関数の内部では、アプリの構成からユーザーの電話番号を取得します。
{ "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" } }
エラーがあるかどうかを確認し、返されたすべての結果をループすることを続行しないかどうかを確認してください。
{ "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" } }
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;
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;
結論
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;
それだけです!このチュートリアルでは、Twilioを使用してSMSリマインダーアプリを作成する方法を学びました。具体的には、GoogleカレンダーAPIを介してユーザーの予定を取得する方法を検討しました。データベースにそれらを保存し、Twilio経由でユーザーに通知しました。このチュートリアルで使用されているコードは、GitHub Repoから見つけることができます。
TwilioでSMSアポイントメントリマインダーアプリの構築に関するよくある質問(FAQ)
SMSが送信に失敗した場合、Twilioは再送信を試みます。また、これらの障害を記録するためにコードにエラー処理を設定し、メッセージの復活やユーザーへの通知など、適切なアクションを実行することもできます。はい、複数のユーザーにこのアプリを使用できます。アポイントメントを特定のユーザーに関連付けて、リマインダーが正しい電話番号に送信されることを確認するためにコードを変更する必要があります。これには、ユーザー認証の追加とデータベース内のユーザーデータの管理が含まれる場合があります。以上がTwilioでSMS予定リマインダーアプリを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
