
シェア:
Alex Lakatos は Nexmo の JavaScript デベロッパーアドボケイトです。余暇には Mozilla で Tech Speaker や Reps Mentor としてボランティアをしている。オープンウェブでJavaScriptを開発する彼は、日々その限界を押し広げている。ロンドンでプログラミングをしていないときは、世界中を旅するのが好きなので、空港のラウンジでばったり会うこともある。
Node.jsとAzure FunctionsでSMSメッセージを送受信する方法
このブログ記事は 応用クラウドストーリーイニシアティブの一環です。
WebhookはAPIの世界ではますますポピュラーになってきており、Vonageでもかなりの数のAPIで使用している。そのため、私はかなりの数のWebhookを書くことになる。私はNode.jsのファンなので、以前はそのほとんどをExpressで書いていた。ウェブサーバーを立ち上げて、それをどこかにデプロイするのは面倒だったので、代替手段を探し始めました。Serverlessは良い選択肢の1つとして私のリサーチで何度も出てきたので、Azure Functionsを使ってみようと思った。 Azure FunctionsとNode.jsを使ってSMSメッセージを送受信しようと考えた。
SMSにはVonageの SMS APIを使えば、世界中どこでも大量のSMSを送受信できる。バーチャル電話番号を取得したら、APIを使って送信メッセージ("送信")と受信メッセージ("受信")を管理できる。
この記事では、以下の方法で SMS メッセージを送受信する方法を学びます。 Node.jsとと Azure Functions アプリ.
このチュートリアルのコードは GitHub.
前提条件
始める前に、あなたが持っていることを確認してください:
について Azureアカウント
Node.jsマシンにインストールされている
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Azure Functionsアプリのセットアップ
Azure Functions Appをセットアップする方法はいくつかある。私は Azure ポータル.
Create Azure Functions App
名前は send-receive-smsと名付け、新しいリソースを作成し、ランタイムとしてNode.jsを選択した。デプロイメント、リージョン、プランに関してはデフォルトを選択した。
デプロイが完了したら(通常2分程度)、新しく作成されたリソースに移動し、最初の関数を作成することができます。ウィザードがこのプロセスを手助けしてくれます。 VSコードを開発環境として選択し、デプロイ方法として "Direct publish "を選択した。これで、VS Code for Azureのセットアップ方法が表示された。
Create Azure Function quickstart
セットアップが終わったら、最初の関数、HTTPトリガーを作った。私はこれを inboundしかし、好きな名前を使うことができる。Function "には関数ベースのAPIキーが必要で、"Admin "にはAzureのマスターAPIキーが必要で、"Anonymous "にはAPIキーは必要ない。私は "Anonymous "をセキュリティ・メカニズムとして選択した。これで、デフォルトのテンプレートで新しいファイルが作成された。
Create Azure Function template
SMSメッセージを受信する
Webhook関数を作成する
と一致するように関数の内容を置き換えた。 SMSを受信するコードスニペットのコードスニペットと同じです。これはリクエストのボディとクエリパラメータを組み合わせ、コンソールにログを記録します。これは、VonageプラットフォームでSMSメッセージを受信するために使用できるシンプルなWebhookです。
module.exports = async function(context, req) {
const params = Object.assign(req.query, req.body);
if (params.text) {
context.log("SMS received", params);
}
context.res = {};
}; デプロイ機能
VonageはパブリックURLにアクセスできる必要があるため、Azureを使って関数をデプロイした。これはVS Codeでできる。デプロイが完了すると、関数のライブURLが返ってくる。 https://send-receive-sms.azurewebsites.net/api/inbound.
Deploy Azure Function
インバウンドURLの設定
VonageプラットフォームでSMSメッセージを受信するには、Vonage番号を所有している必要があります。お持ちでない場合は Vonageダッシュボード:
Buy Vonage Phone Number
Vonageの電話番号がSMSメッセージを受信すると、VonageはそのメッセージをNexmoダッシュボードで指定したWebhookに渡します。ここではAzure Functionを受信Webhookとして使用します。WebhookのURLを設定するには、Nexmoダッシュボードの電話番号の横にある小さな歯車のアイコンに進みます。 Nexmoダッシュボードの電話番号の横にある小さな歯車のアイコンからをクリックし、"Inbound Webhook URL "フィールドにAzureファンクションのデプロイ後に取得したURLを入力します。 https://send-receive-sms.azurewebsites.net/api/inbound).
Set Inbound Webhook URL on the Vonage Dashboard
携帯電話からVonageの電話番号にSMSを送ると、Azureのファンクションログに表示されるので、動作テストができます。
null
SMSメッセージの送信
SMSメッセージのログを取るだけでなく、SMSメッセージにも反応するようにしたい。
SMSメッセージの送信にVonage Node.js SDKを使うので、Azure関数にインストールする必要がある。関数のトップレベルのフォルダには package.jsonファイルがあります。そのため、ターミナルでそのフォルダに移動して npm install nexmoを使用すると、Azureファンクション内のVonage SDKにアクセスできるようになります。
また、Vonage SDKを初期化し、SMSメッセージを絵文字に変換し、SMSとして元の送信者に送り返す関数も更新しました。
module.exports = async function(context, req) {
const Nexmo = require("nexmo");
const nexmo = new Nexmo({
apiKey: process.env["NEXMO_API_KEY"],
apiSecret: process.env["NEXMO_API_SECRET"]
});
const params = Object.assign(req.query, req.body);
if (params.text) {
var response = [];
// transform inbound SMS into emojis
for (let i = 0; i < params.text.length; i++) {
const emoji = String.fromCodePoint(127715 + params.text.charCodeAt(i));
response.push(emoji);
}
// send SMS back with emojis
nexmo.message.sendSms(
params.to,
params.msisdn,
response.join(""),
{
type: "unicode"
},
(err, responseData) => {
if (err) {
context.log(err);
} else {
if (responseData.messages[0]["status"] === "0") {
context.log("Message sent successfully.");
} else {
context.log(
`Message failed with error: ${responseData.messages[0]["error-text"]}`
);
}
}
}
);
}
context.res = {};
};
私のコードがVonage SDKを初期化していることにお気づきだろう。 process.env["NEXMO_API_KEY"]そして process.env["NEXMO_API_SECRET"].Azure Function AppにはApplicationの設定があり、そこに私の NEXMO_API_KEYと NEXMO_API_SECRETを追加し、ローカルマシンからデプロイするたびに更新しています。同様に、これらの値を実際のAPIキーとシークレットに置き換えることもできます。これらの値は、Vonage Dashboardの "Getting Started "ページにあります。 Vonageダッシュボード.
Add Application Settings in Azure
SMSを送信するためのSDKメソッド、 nexmo.message.sendSms()は、送信者ID、受信者の電話番号、テキストメッセージ、オプションをパラメータとして受け取ります。オプションに {type: "unicode"}をオプションに追加しています。また、APIリクエストが完了したときに呼び出されるコールバックも受け取ります。
レスポンス・データには、送信されたすべてのメッセージの配列と、そのステータスに関する情報が含まれる。たいていの場合、その配列の要素は1つですが、SMSが160文字より長かった場合は、マルチパートのSMSに分割され、その配列には送信された各パートのデータが含まれます。メッセージのステータスが 0 ならば SMS は正常に送信されたことになり、そうでなければメッセージのエラーデータはメッセージの error-textプロパティにあります。
私のテキストには絵文字が入っているので、オプション・オブジェクトでタイプ unicodeとしてネットワークに送信されます。 ?.
試してみる
携帯電話からVonage番号にSMSメッセージを送信します。テキスト文字を絵文字に変換したSMSメッセージが返ってくるはずです。もし Hello World!をSMSで送信すると、🌷🍈🌃🍈🍗🍗🍈🍕🍈🌑が返ってくるはずです。
Received SMS message with Vonage
VonageAPI、Azure Functions、Node.jsを使ってSMSメッセージを送受信する方法を学んでいただけたと思います。



