Dispatch APIを使用したマルチユーザー、マルチチャネルのフェイルオーバー

このチュートリアルでは、自動フェイルオーバーを使用してユーザーのリストにメッセージを送信する方法を紹介します。

このアイデアは、ユーザーのリストがあり、各ユーザーが2つ以上の指定チャンネルを持っていて、最後の1つが最終的なフォールバックチャンネルになるというものです。各ユーザーの指定チャンネルで、優先順位リストの最初のユーザーにメッセー ジの送信が試みられる。各チャネルは、適切なフェイルオーバー条件とともに順番に処理される。

あるユーザーによるメッセージの読み取りがすべて失敗した場合、処理は優先順位リストの次のユーザーに移る。

例として、メインサーバーが故障し、待機しているシステム管理者のリストに通知したいとします。各管理者は連絡可能なチャンネルをいくつか持っているかもしれない。少なくとも一人の管理者が重要なメッセージを読むまで、ユーザーのリストは処理されるだろう。

シナリオ例

このユースケースを理解する最善の方法は、サンプルのコンフィギュレーション・ファイルを見てみることだろう、 sample.json:

{
    "APP": {
        "APP_ID": "abcd1234-8238-42d0-a03a-abcd1234...",
        "PRIVATE_KEY": "private.key"
    },
    "FROM": {
        "MESSENGER": "COMPANY MESSENGER ID",
        "VIBER": "COMPANY VIBER ID",
        "WHATSAPP": "COMPANY WHATSAPP NUMBER",
        "SMS": "COMPANY SMS NAME/NUMBER"
    },
    "USERS": [
        {
            "name": "Tony",
            "channels": [
                {
                    "type": "messenger",
                    "id_num": "USER MESSENGER ID"
                },
                {
                    "type": "sms",
                    "id_num": "USER PHONE NUMBER"
                }
            ]
        },
        {
            "name": "Michael",
            "channels": [
                {
                    "type": "viber_service_msg",
                    "id_num": "USER PHONE NUMBER"
                },
                {
                    "type": "whatsapp",
                    "id_num": "USER PHONE NUMBER"
                },
                {
                    "type": "sms",
                    "id_num": "USER PHONE NUMBER"
                }
            ]
        }
    ]
}

この設定ファイルの最も重要な部分は USERS セクションをご覧ください。ここにはユーザーの優先順位リストがあります。この場合、アプリケーションは Tony にメッセー ジを送ろうとし、Tony が期限内に指定されたチャネルのどれかでメッセージを読めな かった場合、Michael に対してこのプロセスが繰り返されます。

注: の各チャンネルのフェイルオーバー条件。 read 有効期限は 600 は現在、アプリケーションにハードコードされているが、コンフィギュレーション・ファイル ( ケース3 を参照)。

なお、以下の条件がある:

  • ユーザーは少なくとも2つのチャンネルを持っていなければならない。
  • 少なくとも2つのチャンネルがあれば、ユーザーはいくつでもチャンネルとタイプを混ぜることができます。例えば、ユーザーは3つのSMS番号とメッセンジャーIDを持つことができます。
  • ユーザに指定された最後のチャネルは、最終的なフォールバックチャネルとみなされる。これは、ワークフローモデルにおいてフェイルオーバー条件が関連付けられていないため、わずかに異なる方法で処理される。これが失敗した場合、リストの次のユーザーが処理される。
  • 最終的なフォールバック・チャンネルはSMSである必要はないが、通常はそうなるだろう。
  • ワークフローはユーザーごとに作成されますが、ユーザーごとに固有のワークフローを指定することができます。
  • ワークフローは、コンフィギュレーション・ファイルにリストされた順番で各ユーザーに適用されます。
  • あるチャンネルから次のチャンネルへのフェイルオーバーは自動的に行われ、Dispatch APIによって透過的に処理される。

ソースコード

このプロジェクトのPythonソースコードはコミュニティで入手可能です。 GitHubリポジトリ.実際には3つのユースケースがコードベースに含まれていますが、このチュートリアルで説明するのは以下のことだけです。 case-2.のコード case-2 具体的には これ.2つのファイルがあります - サンプル設定ファイル、 sample.json そしてアプリケーション、 app.py.

前提条件

  1. Vonageアカウントの作成
  2. ノードJSのインストール - Vonageコマンドラインインタフェース(CLI)を使用するために必要です。
  3. Vonage CLIをインストールする
  4. Webhookサーバーをローカルでテストする方法を知る
  5. Python3のインストール
  6. フラスコ設置
  7. Facebook、Viber、WhatsAppなど、サポートしたいチャンネルのアカウントを持っていること。

また、以下の概要トピックを確認することも有用であろう:

このユースケースをFacebook Messengerでテストする場合は、次の手順で作業することをお勧めします。 このチュートリアル 第一に

ステップ

前提条件を満たした後のステップは以下の通り:

  1. Vonageアプリケーションの作成
  2. ングロックを立ち上げ、稼働させる
  3. ウェブフックサーバーを実行する
  4. アプリケーションコードを見直す
  5. アプリをテストする

Vonageで同じ結果を得るには様々な方法があります。例えば、ダッシュボードではなくコマンドラインを使ってアプリケーションを作成する方法です。他のチュートリアルでは他の方法を紹介しています。

Vonageアプリケーションの作成

まだそうしていない場合は、プロジェクト用に新しいディレクトリを作成してください。 multi-user-dispatch.このディレクトリに移動する。

CLIを使用してVonageアプリケーションを作成します:

vonage apps:create "Multi-user Dispatch App" --messages_inbound_url=https://abcd1234.ngrok.io/inbound --messages_status_url=https://abcd1234.ngrok.io/status

生成されたアプリケーションIDをメモしてください。また ダッシュボード.

このコマンドは秘密鍵も作成する、 multi_user_dispatch_app.key を更新/作成します。 vonage_app.json.

このコマンドはまた、あなたのアプリとVonageの間のすべての相互作用が行われる2つのウェブフックを設定します。以下のURLでVonageがアクセスできるサーバーを起動する必要があります。

ングロックを立ち上げ、稼働させる

ローカルでテストするために Ngrok が起動していることを確認してください。Ngrok を起動するには、次のようにタイプする:

ngrok http 9000

一時的なNgrok URLを生成するには。有料会員であれば、次のように入力します:

ngrok http 9000 -subdomain=your_domain

注: この場合、Ngrok は Vonage アプリケーションを作成したときに指定した Vonage ウェブフックを次のように転送します。 localhost:9000.

ウェブフックサーバーを実行する

Webhookサーバーを立ち上げて実行し、Webhookが認識され、送信されたメッセージの詳細が記録されるようにする必要があります。ウェブフック・サーバーは以下のようなものです:

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)

if __name__ == '__main__':
    app.run(host="localhost", port=9000)

という名前のファイルにこのコードを追加する。 server.py そしてそれを保存する。

でローカルに実行する:

python3 server.py

アプリケーションコードを見直す

便宜上、コードは1つのファイルにまとめられている。 app.py.これとJSON設定ファイルだけだ、 config.jsonをコピーすることで作成できる。 sample.json.

最も重要なことは、コンフィギュレーション・ファイルが、優先順位順にコンタクトするユーザーのリストと、その指定チャンネルを保存することである。この実装では、各ユーザーは少なくとも2つのチャンネルを持っている必要がありますが、ユーザーごとにチャンネルの任意の便利な組み合わせがあります。例えば、あるユーザーは3つのSMS番号を持っていて、別のユーザーはMessenger IDとViberとさらに2つのSMS番号を持っているかもしれない。

各ユーザーの最後に表示されたチャンネルは、他のユーザーに切り替える前の最終的なフォールバックとして扱われる。各ユーザに対して、各チャンネルは Dispatch API を使ってメッセージを送信します。 自動 600秒以内にメッセージが読み取られなければ、次のチャンネルにフェイルオーバーする。

アプリケーションコードの最初の部分、 app.pyを実行し、設定ファイルを読み込んで重要な変数とデータ構造をロードします。貴社は、Dispatch APIがサポートする4つのチャンネルすべてをサポートすることを前提としています、 messenger, viber_service_msg, whatsapp そして smsしかし、ターゲット・ユーザーには好みのチャンネルのみを割り当てることができる。例えば、SMSでしかコンタクトできないユーザーもいるかもしれない。

ヘルパー機能がある、 set_field_typesいくつかのチャンネルが numbers を使用している。 idsとViberの両方を使用している。 ids そして numbers.

このユースケースの主な機能は build_user_workflow 関数を使用する。このコードは以下のようなワークフローを構築する:

{
    "template": "failover",
    "workflow": [
        {
            "from": {
                "type": "messenger",
                "id": "from_messenger"
            },
            "to": {
                "type": "messenger",
                "id": "user_id_num"
            },
            "message": {
                "content": {
                    "type": "text",
                    "text": "This is a Facebook Messenger message sent using the Dispatch API"
                }
            },
            "failover": {
                "expiry_time": "600",
                "condition_status": "read"
            }
        },
        {
            "from": {
                "type": "viber_service_msg",
                "id": "from_viber"
            },
            "to": {
                "type": "viber_service_msg",
                "number": "user_id_num"
            },
            "message": {
                "content": {
                    "type": "text",
                    "text": "This is a Viber Service Message sent using the Dispatch API"
                }
            },
            "failover": {
                "expiry_time": "600",
                "condition_status": "read"
            }
        },
        {
            "from": {
                "type": "sms",
                "number": "from_sms"
            },
            "to": {
                "type": "sms",
                "number": "user_id_num"
            },
            "message": {
                "content": {
                    "type": "text",
                    "text": "This is an SMS sent using the Dispatch API"
                }
            }
        }
    ]
}

機能 build_user_workflow また、設定ファイルから読み込まれた値がワークフローに埋め込まれていることを確認する。

ということにお気づきだろう。 expiry_time そして condition_status はワークフローにハードコードされている。 build_user_workflow.これはコードをできるだけわかりやすくするためですが、チャンネルごとにこれらのパラメータを設定ファイルに追加することもできます。この場合、ユーザーによっては300秒の有効期限を持つチャンネルがあるかもしれません。 read または delivered をチャンネルごとに設定することができます。これは ケース3 しかし、このチュートリアルでは、修正されたサンプル設定ファイルとともに、すべてのコードが与えられているので、これ以上説明しません。

ワークフローが構築されたら Dispatch API を送信する:

r = requests.post('https://api.nexmo.com/v0.1/dispatch', headers=headers, data=workflow)

JWTは、APIコールを認証するために生成される。そのため app_id そして private_key の値は、Vonage アプリケーションを作成したときのものです。これらを設定ファイルに追加する必要があります。

アプリをテストする

コピー sample.json への config.json.

に適切な値が設定されていることを確認してください。 config.json などのパラメータについて app_id, private_key およびサポートされているさまざまなチャンネルの詳細を確認してください。あなたがどのようにテストしたいかに従ってユーザーリストを設定していることを確認してください。

ヒント この時点で、変更した設定ファイルを JSONリンター.

でアプリを実行できる:

python3 app.py

アプリケーションはコンフィギュレーション・ファイルを処理し、メッセージが読まれるまで、各ユーザーに順番にコンタクトする。

ショートメール

このチュートリアルのテストには、SMSを受信できる携帯電話ならどれでも使用できます。

フェイスブックメッセンジャー

Facebook Messengerでテストするには、いくつかの追加ステップが必要です。これらについては このチュートリアルそのため、その情報はここでは再現されていない。

バイバー

このチュートリアルを Viber でテストするには、Viber サービス メッセージ ID が必要です。

WhatsApp

このチュートリアルをWhatsAppで試すにはWhatsAppビジネスアカウントが必要です。また、対象ユーザーが御社からのメッセージを受信する前にMTMを送信する必要があります。

概要

このチュートリアルでは、各ユーザが複数のチャンネルを持つユーザのリストにメッセー ジを送ろうとするユースケースを見てきました。メッセージが読まれると、アプリケーションは終了します。

その他のリソース