Messages APIを使用した複数チャネルへのリアルタイムデータ供給
このチュートリアルでは、Messages API を使用して複数のチャネルにリアルタイムでデータを送信する方法を紹介します。このチュートリアルでは、サポートされているすべてのチャネルにデータを送信する方法を示します。すべてのチャンネルをテストするための情報も提供しています。Facebook Messenger を使ったテストに興味がある場合は、次の手順を実行することをお勧めします。 このチュートリアル このチュートリアルにはFacebook特有の情報が多く含まれています。WhatsAppとViberをテストするには、これらのプロバイダーのビジネスアカウントが必要です。
シナリオ例
このチュートリアルでは、ユーザーが選択したチャンネルでリアルタイム株価を送信する方法を説明します。ユーザーは、自分の好きなチャネルでデータを受信するために登録することができます。例えば、SMSを使って携帯電話で株価を受信したり、Facebookメッセンジャーで受信することができます。WhatsAppとViberもサポートされている。Facebookメッセンジャー、WhatsApp、SMSのユーザーは、特定の銘柄に関心を持つことを登録できる。ただし、Viberは企業へのインバウンドメッセージをサポートしていないため、ユーザーがデータを受信するには、ウェブサイト経由でメッセージを受信登録する必要がある。また、WhatsAppの場合、さらに複雑な問題がある。 MTM ユーザがメッセージの受信に同意する前に。
このチュートリアルではシミュレーション株価のみを使用することに注意してください。
ソースコード
このプロジェクトのPythonソースコードはVonage Communityにあります。 GitHubリポジトリ.特に興味深いのは、単一のメソッド呼び出しでサポートされているチャネルにメッセージを送信する便利な方法を提供する汎用クライアントです。WhatsApp、SMS、Messengerの受信メッセージを処理するPythonコードも紹介します。
前提条件
- Vonageアカウントの作成
- ノードJSのインストール - Vonageコマンドラインインタフェース(CLI)を使用するために必要です。
- Vonage CLIをインストールする
- Webhookサーバーをローカルでテストする方法を知る
- Python3のインストール
- フラスコ設置
- Facebook、Viber、WhatsAppなど、サポートしたいチャンネルのアカウントを持っていること。
また、以下の概要トピックを確認することも有用であろう:
このユースケースをFacebook Messengerでテストする場合は、次の手順で作業することをお勧めします。 このチュートリアル 第一に
ステップ
前提条件を満たした後のステップは以下の通り:
- Vonageアプリケーションの作成
- ングロックを立ち上げ、稼働させる
- ダッシュボードでSMSウェブフックを設定する
- 基本アプリケーションを書く
- SMSを送信する
- 汎用クライアントコードを見直す
- ユースケース再考
- アプリのテスト
Vonageで同じ結果を得るには様々な方法があります。例えば、ダッシュボードではなくコマンドラインを使ってアプリケーションを作成する方法です。他のチュートリアルでは他の方法を紹介しています。
Vonageアプリケーションの作成
まだそうしていない場合は、プロジェクト用に新しいディレクトリを作成してください。 real-time-app.このディレクトリに移動する。
CLIを使用してVonageアプリケーションを作成します:
生成されたアプリケーションIDをメモしてください。また ダッシュボード.
このコマンドは秘密鍵も作成する、 real_time_app.key を更新/作成します。 vonage_app.json.
このコマンドはまた、あなたのアプリとVonageの間のすべての相互作用が行われる2つのウェブフックを設定します。これらのURLからVonageにアクセスできるサーバーが稼動している必要があります。
ングロックを立ち上げ、稼働させる
ローカルでテストするために Ngrok が起動していることを確認してください。Ngrok を起動するには、次のようにタイプする:
一時的なNgrok URLを生成するには。有料会員であれば、次のように入力します:
この場合、Ngrok は Vonage アプリケーションを作成したときに指定した Vonage ウェブフックを次のように流用します。 localhost:9000.
ダッシュボードでSMSウェブフックを設定する
ダッシュボードで アカウント設定.ここでアカウントレベルのSMSウェブフックを設定できます:
| ウェブフック | URL |
|---|---|
| 領収書 | https://abcd1234.ngrok.io/webhooks/delivery-receipt |
| インバウンドSMS | https://abcd1234.ngrok.io/webhooks/inbound-sms |
ウェブフックURLの "abcd1234 "をあなた自身の情報に置き換える必要があることに注意してください。有料 Ngrok アカウントをお持ちの場合は、カスタムドメインにすることができます。
注: 現在、MessagesとDispatchアプリケーションは、インバウンドSMSではなく、アウトバウンドSMSのみをサポートしているため、このステップを実行する必要があります。このため、アカウントレベルのSMSウェブフックを使ってインバウンドSMSをサポートしますが、アウトバウンドSMSの送信にはMessages APIを使うことになります。
基本アプリケーションを書く
最も単純なケースでは、アプリケーションは受信メッセージ情報をログアウトし、配送レシ ピティとメッセージステータスのデータもログアウトします。これは以下のようになります:
from flask import Flask, request, jsonify
from pprint import pprint
app = Flask(__name__)
@app.route('/webhooks/inbound', methods=['POST'])
def inbound_message():
print ("** inbound_message **")
data = request.get_json()
pprint(data)
return ("inbound_message", 200)
@app.route('/webhooks/status', methods=['POST'])
def message_status():
print ("** message_status **")
data = request.get_json()
pprint(data)
return ("message_status", 200)
@app.route('/webhooks/inbound-sms', methods=['POST'])
def inbound_sms():
print ("** inbound_sms **")
values = request.values
pprint(values)
return ("inbound_sms", 200)
@app.route('/webhooks/delivery-receipt', methods=['POST'])
def delivery_receipt():
print ("** delivery_receipt **")
data = request.get_json()
pprint(data)
return ("delivery_receipt", 200)
if __name__ == '__main__':
app.run(host="localhost", port=9000)
という名前のファイルにこのコードを追加する。 app1.py そしてそれを保存する。
でローカルに実行する:
SMSを送信する
これで基本アプリケーションが起動し、イベントを記録する準備ができました。この基本アプリケーションをテストするには、VoiceアプリケーションにリンクされているVonage番号にSMSを送信します。ボイス・アプリケーションをお持ちでない場合、またどのように作成すればよいかわからない場合は、以下をご参照ください。 本情報.この追加ステップを踏む必要がある理由は、Messages and Dispatch APIは現在インバウンドSMSをサポートしておらず、アウトバウンドSMSのみをサポートしているため、インバウンドSMS通知を受け取るにはアカウントレベルのWebhookを使用する必要があるからです。
SMSを送信したときに生成されるトレース情報を調べると、以下のようなものが表示される:
一般クライアント
現在 Vonage は Python Server SDK で Messages API と Dispatch API を公式にはサポートしていませんが、REST API はサポートされています (ベータ版)。 Pythonコードを提供 を再利用可能なクラスとしてプロジェクトに組み込むことができます。このクラスは、Messages API を使って、サポートされているチャンネルにメッセージを送信することができます。コードをざっと見てみる価値はあるだろう:
def send_message (self, channel_type, sender, recipient, msg):
if channel_type == 'messenger':
from_field = "id"
to_field = "id"
elif channel_type == 'whatsapp' or channel_type == "sms":
from_field = "number"
to_field = "number"
elif channel_type == 'viber_service_msg':
from_field = "id"
to_field = "number"
data_body = json.dumps({
"from": {
"type": channel_type,
from_field: sender
},
"to": {
"type": channel_type,
to_field: recipient
},
"message": {
"content": {
"type": "text",
"text": msg
}
}
})
...
これは、チャネルの種類に応じてボディが作成されるからだ。例えば、FacebookはIDを使用しますが、WhatsAppとSMSは番号のみを使用します。ViberはIDと番号を使います。コードは次に、Messages APIを使ってメッセージを送信します。これがユースケースの基本で、ユーザーのサインアップを可能にするためにいくつかのビットが追加されています。
ユースケース再考
アプリケーションをより効果的に構築するために、このユースケースをより詳しく調べてみましょう。
インバウンドメッセージをサポートしているチャンネル(Messenger、WhatsApp、SMS)では、ユーザーがサインアップするためにメッセージを送信することができます。Viberの場合は、ウェブアプリの別の部分から行う必要があります。通常、ユーザーがリアルタイムのフィードにサインアップできるフォームを提供します。
ユーザーが "Hi "のようなインバウンドメッセージを送ると、アプリはヘルプメッセージで応答する。私たちの場合は、「MSFTまたはGOOGLを含むメッセージを送ってリアルタイム・データを入手してください」です。この登録は、どのフィードに登録したかを確認する別のメッセージによって確認される。
その後、選択した銘柄シンボルのリアルタイムの価格を受信します。さらに別のチャンネルに登録したい場合は、ご自由にどうぞ。また、株式シンボルを変更したい場合は、新しいシンボルをメッセージで送信してください。
これを実装するコアコードは、関数 proc_inbound_msg で app_funcs.py.
WhatsAppの場合、次のステップを追加する必要があります。 MTMメッセージ ユーザがデータを受信するためにサインアップする前に、ユーザへ。簡単のため、これは 別のコード.
アプリのテスト
でアプリを実行できる:
どこ APP_ID はメッセージ・アプリケーションのVonageアプリケーションIDです。
ショートメール
SMSでテストするには、前と同じようにSMSを送信してください。ヘルプメッセージが表示されます。以下のどちらかの銘柄記号でメッセージを送り返してください。 MSFT または GOOGL.その後、定期的に(シミュレートされた)価格アップデートが届きます。現在のところ、このメッセージの受信を停止するにはアプリを終了する必要があります。 このチュートリアル.
フェイスブックメッセンジャー
Facebook Messengerでテストするには、いくつかの追加ステップが必要です。これらについては このチュートリアルそのため、その情報はここでは再現されていない。
バイバー
これをテストするには、有効な Viber ビジネスアカウントが必要です。Web アプリの一部で、ユーザーに以下を要求します。 は電話番号とシンボルマークを提供する。 ユーザーが興味を持っているその後、ユーザーには最初のメッセージが送られ、受信するか拒否するかを選択することができる。A 小テストプログラム は、Viber で汎用クライアントをテストするデモのために提供されています。
WhatsAppを完全にテストするには追加ステップが必要です。ユーザーがメッセージを受信する前にWhatsApp MTM(テンプレート)を送信する必要があります。このチュートリアルではそのためのコードは説明していませんが、サンプルコードがあります。 これ.WhatsAppメッセージの送信には、このチュートリアルの汎用クライアントを使用します。
概要
このチュートリアルでは、Messages APIがサポートする任意のチャネルで、ユーザーがリアルタイムデータを受信できるユースケースを見てきました。