
Node.jsとGoogle Cloud RunでSMSメッセージを送受信する方法
所要時間:4 分
2019年、私はロンドンのフィンズベリー・スクエア・ガーデンとヴィクトリアで "クラウド・ラン・クラブ "を開催した。 グーグル・クラウド・ランワークショップを開催した。今日は、走ることはないが、以下を使用してSMSアプリケーションを構築し、デプロイする方法を学ぶ。 Node.js,Expressそして Vonage Messages APIについて Googleクラウドラン.
しかし、Google Cloud Runを使えば、コンテナ化されたアプリケーションをデプロイすることができる。使用した分だけ支払う。サーバーを管理する必要がないので、ウェブフックやAPIを構築するのに最適だ。トラフィックがないときは、アプリケーションはゼロにスケールする。
概要と前提条件
Node.jsv18以降をインストール
Google Cloud CLIのインストールと設定
A Google Cloudアカウント課金を有効にする
JavaScriptと Node.js.
について GitHub にあるコード一式
プロジェクトの構成
完全なコードは GitHub にある完全なコード.プロジェクト・ツリーは以下のようになっている。
blog-messages_api-cloud_run-sms/
├── index.js, contains our JavaScript
├── package.json, for our dependencies
├── .env.example, you can copy and create a .env from it to add your environment variables
├── .gitignore, for any files or folders not to be committed
└── private.key Vonageアプリケーションの作成
ダッシュボードから新しいVonageアプリケーションを作成する方法を以下に紹介します。あるいは CLIを使用してアプリケーションを作成することもできます。.
アプリケーションを作成するには アプリケーションの作成ページでアプリケーションの名前を定義します。
Webhooksを使用するAPIを使用する場合は、秘密鍵が必要です。Generate public and private key "をクリックすると、自動的にダウンロードが始まります。この鍵は紛失すると再ダウンロードできません。この鍵は紛失しても再ダウンロードできません。 private_<あなたのアプリID>.key.この鍵はAPIコールの認証に使用できます。 注意:アプリケーションを保存するまで、キーは機能しません。
必要な機能(Voice、Messages、RTCなど)を選択し、必要なWebhook(イベントURL、応答URL、受信メッセージURLなど)を提供します。これらはチュートリアルで説明します。
保存してデプロイするには、"Generate new application "をクリックして設定を確定します。これでアプリケーションはVonage APIで使用する準備が整いました。
Messages API機能とWebhooksの設定
capabilitiesの下にあるMessagesオプションを切り替えます。私たちは その メッセージAPI v1.
とりあえずプレースホルダーのURLを設定します。デプロイ後に更新します:
インバウンドURL https://example.com/webhooks/inbound
ステータスURL https://example.com/webhooks/status
アプリケーションを保存し、アプリケーションIDを控えてください。
Messages Capability
バーチャル電話番号を購入するには APIダッシュボードにアクセスし、以下の手順に従ってください。
Purchase a phone number
あなたの APIダッシュボード
BUILD & MANAGE > Numbers > Buy Numbersを開きます。
必要な属性を選択し、検索をクリックします。
ご希望の番号の横にある購入ボタンをクリックし、購入を確定する。
バーチャルナンバーを購入したことを確認するには、左側のナビゲーションメニューの「BUILD & MANAGE」から「Numbers」、「Your Numbers」の順にクリックします。
アプリケーションにバーチャル電話番号をリンクする
番号を選んだら、Vonageアプリケーションにリンクさせます。次へ マイナンバーにアクセスし、番号の横にある鉛筆のアイコンをクリックします。メッセージ "の下にあるアプリケーションを選択します。で [00:01:19で バーチャルナンバーの購入とリンク方法.
Messages APIをデフォルトに設定する
設定 設定をクリックし、"SMS Settings "までスクロールダウンします。SMSのデフォルトAPIとして "Messages API "が選択されていることを確認し、"変更を保存 "をクリックします。
SMS SettingsVonageにはSMSを送信するためのAPIが2つあります: SMS APIとMessages APIです。このチュートリアルでは メッセージAPI.この設定を切り替えないと、ウェブフックは異なるペイロードフォーマットを受信し、コードは正しく動作しません。
プロジェクトの初期化
アプリケーション用のディレクトリを作成し、そこに移動する。以下を実行する。 npm init -yを実行してプロジェクトを初期化します。
mkdir blog-messages_api-cloud_run-sms
cd blog-messages_api-cloud_run-sms
npm init -y 依存関係のインストール
プロジェクトでは以下の依存関係を使用する: エクスプレス, vonage/server-sdk, vonage/jwt.ターミナルまたはコマンドプロンプトから以下のコマンドを実行することでインストールできます。
npm install express @vonage/server-sdk @vonage/jwt サーバー設定
を作成する。 ファイルを作成しファイルを作成し、必要なパッケージでサーバーを初期化します。.env.exampleファイルから作成される.envファイルから読み込まれる環境変数を使用して、Vonageクライアントを設定します。
const express = require('express');
const path = require('path');
const { Vonage } = require('@vonage/server-sdk');
const { verifySignature } = require('@vonage/jwt');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Initialize Vonage client
const vonage = new Vonage({
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: path.join(__dirname, 'private.key')
});
const FROM_NUMBER = process.env.VONAGE_NUMBER;次のようにする。 パス.join(__dirname, 'private.key')を使用してキーファイルへの絶対パスを取得し、ローカルでも Cloud Run にデプロイしたときでも動作するようにしています。
ホームページの追加
ユーザーがSMSメッセージを送信するために記入しなければならないフォームの内容とスタイルを追加します。ユーザは電話番号とメッセージを入力し、SMSを送信するために送信ボタンをクリックします。
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html>
<head>
<title>Vonage SMS on Cloud Run</title>
<style>
body { font-family: Arial, sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; }
h1 { color: #7b00ff; }
form { display: flex; flex-direction: column; gap: 15px; }
input, textarea { padding: 10px; font-size: 16px; }
button { padding: 12px; background: #7b00ff; color: white; border: none; cursor: pointer; }
</style>
</head>
<body>
<h1> Send SMS with Vonage </h1>
<form action="/send" method="POST">
<label>Phone Number (e.g. 444155551234)</label>
<input type="tel" name="to" required>
<label>Message</label>
<textarea name="text" rows="4" required></textarea>
<button type="submit">Send SMS</button>
</form>
</body>
</html>
`);
}); 送信エンドポイントの追加
Vonage Messages API を使用して SMS を送信するエンドポイントを追加します。このエンドポイントは vonage.messages.send()メソッドは チャネルオブジェクトを受け入れます。 'SMS'そして メッセージタイプを 'テキスト'.レスポンスには message_uuidが含まれます。
app.post('/send', async (req, res) => {
const { to, text } = req.body;
try {
const response = await vonage.messages.send({
message_type: 'text',
to: to,
from: FROM_NUMBER,
channel: 'sms',
text: text
});
console.log('SMS sent:', response.message_uuid);
res.sendSMS sent! Message ID: ${response.message_uuid});
} catch (error) {
console.error('Error sending SMS:', error);
res.status(500).sendFailed to send SMS: ${error.message});
}
}); Webhookエンドポイントの追加
誰かがあなたが以前購入したVonageのバーチャル番号にSMSを送信し、SMSメッセージがVonageに届くと、VonageはあなたのGoogle Cloud RunにPOSTリクエストを送信します。 /webhooks/inboundエンドポイントに POST リクエストを送信します。 200 OKで応答します。以下のように、この検証を使用するウェブフックエンドポイントを追加します。status webhook (/webhooks/status)は、配送レシートを受け取ります。メッセージが配信されたか失敗したかを知ることができます。
app.post('/webhooks/inbound', (req, res) => {
verifyJWT(req);
console.log('Inbound SMS received:');
console.log('From:', req.body.from);
console.log('Text:', req.body.text);
res.status(200).send('OK');
});
app.post('/webhooks/status', (req, res) => {
verifyJWT(req);
console.log('Status update:', req.body.status);
res.status(200).send('OK');
});JWT検証機能を追加し、着信リクエスト(メッセージやコールなど)がVonageからのものであるかどうかを検証します。
VONAGE_API_SIGNATURE_SECRET変数は、JWTクレームに含まれるAPIキーに関連付けられた署名秘密に対応するリクエストに署名するために使用される秘密です。署名の秘密は ダッシュボードの設定.
リクエストの確認 リクエストの確認.
const verifyJWT = (req) => {
// Verify if the incoming request came from Vonage
const jwtToken = req.headers.authorization.split(" ")[1];
if(!verifySignature(jwtToken, process.env.VONAGE_API_SIGNATURE_SECRET)) {
console.error("Signature does not match");
throw new Error("Not a Vonage API request");
}
console.log("JWT verified");
}vonage/jwt依存関係をインストールしてください。
npm install @vonage/jwt サーバーの起動
クラウドランは PORT環境変数を自動的に設定するので、利用可能であればそれを使用します。サーバーを起動するコードを追加します:
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.logServer running on port ${PORT});
}); 限定的なローカルテスト
ローカルでアプリを実行してエラーなく起動することを確認できますが、SMSメッセージはまだ送信できません。Vonage Messages APIは、リクエストを検証し、ステータスアップデートを送信するために、Webhook URLに到達する必要があります。これが Cloud Run に最初にデプロイする理由です。
アプリの実行を確認したい場合は、JavaScriptファイルを実行してください。
node index.jshttp://localhost:3000 を開くとフォームが表示されます。アプリはエラーなく起動するはずですが、メッセージの送信はWebhookをデプロイして設定するまで失敗します。
Google Cloud Runにデプロイする
アプリがローカルで動作するようになったので、Google Cloud Runにデプロイしてインターネットからアクセスできるようにし、Vonageからウェブフックを受け取れるようにしよう。
グーグル・クラウドの設定
Google Cloudアカウントをまだお持ちでない場合、 作成するを作成してください。
Google Cloud CLIをインストールする
をダウンロードしてインストールします。 Google Cloud CLIをダウンロードしてインストールする。次のサブセクションでは、macOSでの方法を紹介しますが、他のOSについては上記のリンクを参照してください。いくつかのエラーに遭遇したので、私自身が行った手順を紹介し、役立つかもしれないヒントを共有したいと思います。
macOSの場合
# Download the archive (Apple Silicon)
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-darwin-arm.tar.gz
# Extract it
tar -xzf google-cloud-cli-darwin-arm.tar.gz
# Run the install script
./google-cloud-sdk/install.shPythonのバージョンエラーがある場合: gcloud CLIにはPython 3.10以上が必要です。もし タイプエラーについて オペランドの型がサポートされていません。のオペランドがサポートされていないというTypeErrorが表示された場合、Pythonが古すぎます。以下のようにHomebrewで新しいバージョンをインストールし、gcloudを指定してください:
brew install python@3.12
export CLOUDSDK_PYTHON=$(brew --prefix python@3.12)/bin/python3.12
./google-cloud-sdk/install.shインストール・スクリプトが、PATHにgcloudを追加するかどうか尋ねてきます。yesを選択してください。その後、コマンドプロンプト/ターミナルまたはランを再起動します:
source ~/.zshrcここでgcloudを初期化する:
gcloud initブラウザウィンドウが開き、Googleアカウントにログインし、新しいGoogle Cloudプロジェクトを選択または作成します。
Google Cloudプロジェクトの作成
まだプロジェクトがない場合は、作成してください。プロジェクトIDはグローバルに一意でなければならないので、ランダムな文字を追加してください。
gcloud projects create vonage-sms-yourname --name="Vonage Messages API Demo"
gcloud config set project vonage-sms-yournameまた Googleクラウドコンソール.
Google Cloudの課金アカウントを有効にする
クラウドランでは課金を有効にする必要があります。請求ページ 課金ページにアクセスし、課金アカウントをプロジェクトにリンクします。
必要なGoogle Cloud APIを有効にする
Cloud Build APIとCloud Run APIを有効にします:
gcloud services enable cloudbuild.googleapis.com run.googleapis.com Google Cloud Runにデプロイする
本番アプリケーションでは Googleシークレットマネージャーを使うことを検討しましょう。このチュートリアルでは、環境変数を直接渡します。
あなたの"ファイルがプロジェクト・ディレクトリにあることを確認してください。ファイルがプロジェクト・ディレクトリにあることを確認してください。これはデプロイ時にソースコードにバンドルされます。
デプロイする:
gcloud run deploy vonage-sms \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars "VONAGE_APPLICATION_ID=your_app_id" \
--set-env-vars "VONAGE_NUMBER=444155551234" \
--set-env-vars "VONAGE_API_SIGNATURE_SECRET=your_signature_secret"最初のデプロイ:Artifact Registryのリポジトリを作成するプロンプトが表示されます。 cloud-run-source-deployという名前のArtifact Registryリポジトリを作成するプロンプトが表示されます。以下のように入力する。 yを入力して続行する。
最初のデプロイには2、3分かかる。完了すると、次のようなURLが表示される。 https://vonage-sms-abc123-uc.a.run.app.
Vonageウェブフックの更新
Cloud Run URLを取得したら、次のページに戻ります。 アプリケーションに戻りに戻り、ウェブフック URL を更新します:
インバウンドURL https://your-cloud-run-url/webhooks/inbound
ステータスURL https://your-cloud-run-url/webhooks/status
ページの右下にある「変更を保存」をクリックするのをお忘れなく。
試してみる
セットアップしてきたものをすべてテストし、走りを確認する時だ!
SMSを送信する
Cloud RunのURLをブラウザで開きます。 https://vonage-sms-abc123-uc.a.run.app).私たちが作成した SMS フォームが表示されるはずです。電話番号とメッセージを入力し、送信を押します。すべてが正しく設定されていれば、数秒以内にあなたの携帯電話に SMS が届きます。確認することができます 国別の機能と制限.
SMSを受信する
今度は反対方向をテストしてください。あなたの携帯電話から、あなたが購入し、作成したアプリケーションにリンクしたVonage番号にSMSを送信します。これは、私たちがセットアップしたインバウンド・ウェブフックをトリガーします。ログは2つの場所で確認できます:
コマンドラインから
gcloud run logs read vonage-sms --region us-central1 Vonage Dashboardから
Vonageアプリケーション にアクセスしてください。をクリックし、ログセクションをチェックしてメッセージアクティビティとウェブフックエラーを確認します。送信者の番号とテキストと共に受信メッセージが記録されているはずです。
結論
Google Cloud Run で Vonage Messages API を使用して SMS アプリケーションを構築し、デプロイしました。このアプリケーションはウェブフォームを通してメッセージを送信し、ウェブフックを通して受信メッセージを受け取ることができます。
ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。
登録する 開発者ニュースレター
フォローする X(旧ツイッター)最新情報
チュートリアルを見る YouTubeチャンネル
LinkedInの LinkedIn の Vonage デベロッパーページ
最新の開発者向けニュース、ヒント、イベント情報をお届けします。