Facebookメッセンジャーで製品情報を自動受信

このチュートリアルでは、Facebook Messengerを使ってユーザーに関連商品情報を自動的に提供する方法を紹介します。

この使用例では、ユーザーは会社のFacebookページを通じて会社に挨拶する。メッセージが自動的にユーザーに返信される。キーワードマッチングを利用することで、ユーザーは自分に合った製品やサービス情報を受け取ることができる。

注: このチュートリアルでは、すでにFacebookプロフィールとFacebookページを作成していることを前提としています。

ソースコード

このプロジェクトのソースコードはコミュニティで公開されている。 GitHubリポジトリ.

前提条件

  1. Vonageアカウントの作成
  2. ノードJSのインストール - Vonageコマンドラインインタフェース(CLI)を使用するために必要です。
  3. Vonage CLIをインストールする
  4. Webhookサーバーをローカルでテストする方法を知る
  5. Python3のインストール
  6. フラスコ設置

ステップ

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

  1. Vonageアプリケーションの作成
  2. VonageアプリケーションをFacebookページにリンクする
  3. ングロックを立ち上げ、稼働させる
  4. 基本アプリケーションを書く
  5. Facebookページと交流する
  6. Pythonを使ったFacebook Messengerメッセージ送信用の最小クライアント
  7. ユースケース再考
  8. インプリメンテーション

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

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

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

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

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

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

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

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

アプリケーションをFacebookページにリンクする

パート1:FacebookページをVonage APIアカウントに接続する。

FacebookページをVonage APIアカウントに接続すると、Vonageがインバウンドメッセージを処理し、Messages APIからメッセージを送信できるようになります。

  1. FacebookページをVonage APIアカウントにリンクするには、以下をご覧ください。 ダッシュボードにFacebookページをリンクする.

  2. ダッシュボードからFacebookアカウントにログインします。

  3. ドロップダウンリストからVonage APIアカウントに接続するFacebookページを選択します。

  4. 使用するAPIキーを選択します。

  5. クリック セットアップ完了.

この時点で、お客様のVonage APIアカウントとこのFacebookページはリンクされています。Vonage APIアカウントとFacebookページ間のリンクに有効期限はありませんが、場合によっては失効することがあります。有効期限が切れた後は、同じ手順で再リンクする必要があります。

パート2:FacebookページをVonage APIアプリケーションに接続する

FacebookページがVonage APIアカウントに接続されると、どのアプリケーションでも使用できるようになります。FacebookページをVonage APIアプリケーションに接続するには:

  1. に移動する。 アプリケーションページ.

  2. リストから、リンクしたいアプリケーションをクリックします。を使用してフィルタリングできます。 能力 を選択する。 messages これを簡単にするためだ。

  3. 次に リンクされたソーシャル・チャンネル タブ

  4. をクリックする。 リンク ボタンをクリックし、アプリケーションを接続するFacebookページの横にある プロバイダーフェイスブックメッセンジャー.

これで、Facebookページでユーザーからのメッセージを受信する準備が整いました。

注: 将来、別のアプリケーションをこのFacebookページにリンクさせたい場合は、パート2で説明した手順を、新しいアプリケーションのために繰り返すだけでよい。

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

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

ngrok http 9000

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

ngrok http 9000 -subdomain=your_domain

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

基本アプリケーションを書く

つまり、最も単純なケースでは、アプリケーションは以下のようになる:

from flask import Flask, request, jsonify
from pprint import pprint

app = Flask(__name__)

@app.route('/inbound', methods=['POST'])
def inbound_message():
    data = request.get_json()
    pprint(data)
    return ("200")

@app.route('/status', methods=['POST'])
def message_status():
    data = request.get_json()
    pprint(data)
    return ("200")

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

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

でローカルに実行する:

python3 app1.py

これでベース・アプリケーションは起動し、イベントを記録する準備が整いました。

Facebookページと交流する

これで基本アプリが起動したので、Facebookページにメッセージを送信し、メッセージが記録されていることを確認できます。Messengerを使ってFacebookページに基本的なメッセージを送信すると、以下のようなログが表示されます:

{'direction': 'inbound', 'from': {'id': '1234567890123456', 'type': 'messenger'}, 'message': {'content': {'text': 'Hello Mr. Cat', 'type': 'text'}}, 'message_uuid': 'da13a7b0-307c-4029-bbcd-ec2a391873de', 'timestamp': '2019-04-09T12:26:47.242Z', 'to': {'id': '543210987654321', 'type': 'messenger'}} 127.0.0.1 - - [09/Apr/2019 13:26:58] "POST /inbound HTTP/1.1" 200 -

ここには、あなたのアプリケーションをより便利なものにするための重要な情報があります。

フィールド 説明
from あなたのページにメッセージを送信した人のFacebook ID。
to あなたのページ(相手がメッセージを送信しているページ)のFacebook ID。
message 送信されるメッセージ。

メッセージがJSONオブジェクトであることがわかる。このオブジェクトからメッセージ・テキストを取り出すことができます。

自分のページのFacebook ID(知らないかもしれない)と、メッセージを送ってきたユーザーのFacebook IDの両方を記録しておくと便利です。FacebookIDは、アプリケーションが複数のFacebookページを扱う場合に特に役立ちます。

Pythonを使ったFacebook Messengerメッセージ送信用の最小クライアント

現在のところ、Vonage は Python Server SDK で Messages API と Dispatch API を公式にはサポートしていません。 Pythonコードを提供 を再利用可能なクラスとしてプロジェクトに追加します。コードは提供されているので、このチュートリアルではこれ以上取り上げません。

ユースケース再考

アプリケーションをより効果的に構築するために、このユースケースをより詳しく調べてみましょう。

あるユーザーがメッセンジャーであなたのFacebookページに「こんにちは」などのメッセージを送ったとします。しかし、時差の関係で、あなたはそのメッセージに返信することができません。一方、有益な情報を自動的に返信することができれば最高です。例えば、「こんにちは」というメッセージに対して、「T's Cat Suppliesへようこそ。こちらが主な商品カテゴリーです:おもちゃ、フード、薬、ブリング"

Pythonの次のような構文を使用する。 if keyword in msg キーワードを検出し、それに基づいて資料を送信することができます。例えば、あるユーザーが「戦車の整理をお願いします」というようなメッセージを送ってきたとします。 tank をクリックし、タンク洗浄サービスに関する情報を送信してください。あるいは、「パイプラインを吊り上げるのにクレーンが必要なんだけど」というようなメッセージを受け取った場合。クレーンのレンタルサービスに関する情報を送ることができます。キーワードが検出されない場合は、ユーザーに一般的なメッセージを送信して方向性を示すのが簡単です。

この自動応答機能は、企業によっては何百もの製品やサービスを持っているので便利だ。

もうひとつ便利な機能は、自動応答をオフに切り替える機能で、おそらく人間に直接対応できるだろう。次のようなコマンドを組み込むことができる。 auto: off そして auto: on あなたの顧客があなたのFacebookページとどのように相互作用するかをコントロールすることができます。

以下のセクションでは、このユースケースの実装方法を説明する。

インプリメンテーション

このユースケースを実装するのに便利なデータ構造のひとつがPython辞書です。ここに例があります:

cats_dict = {
    'other': 'Our products: toys, food, meds, and bling',
    'toys': 'More info on cat toys here https://bit.ly/abc',
    'food': 'More info on cat food here https://bit.ly/def',
    'meds': 'More info on cat meds here https://bit.ly/ghi',
    'bling': 'More info on cat bling here https://bit.ly/jkl'
}

このことを理解するために、次のコードを見てみよう:

class ProductMatcher:

    auto_mode = True

    cats_dict = {
        'other': 'Our products: toys, food, meds, and bling',
        'toys': 'More info on cat toys here https://bit.ly/abc',
        'food': 'More info on cat food here https://bit.ly/def',
        'meds': 'More info on cat meds here https://bit.ly/ghi',
        'bling': 'More info on cat bling here https://bit.ly/jkl'
    }

...

    def product_matcher(self, fb_sender, user, msg):
        product = 'other'
        msg = msg.lower().strip()
        if self.auto_mode:
            if "auto: off" in msg:
                self.auto_mode = False
                self.fbm.send_message(fb_sender, user, "Auto mode is off")
                return
            for k in self.cats_dict.keys():
                if k in msg:
                    product = k
                    break
            self.fbm.send_message(fb_sender, user, self.cats_dict[product])
        if "auto: on" in msg:
                self.auto_mode = True
                self.fbm.send_message(fb_sender, user, "Auto mode is on")
        return product

ユーザーがメッセンジャーでメッセージを送り、応答する人間がいない場合、メニューがユーザーに送り返される。ユーザーのメッセージから商品が抽出され、適切なメッセージが送信される。このコードは特殊なアプローチをとっているが、可能性を示していることを期待したい。

本物の人間と話したいのに、これではユーザーにとって迷惑ではないか、と思うかもしれない。しかし、いったんオンラインになってメッセージを受け取れるようになれば、自動応答を無効にすることができる。このコードでは、ユーザーは以下のコマンドを使うことができる。 auto: off そして auto: on を使用して相互作用を制御する。これもチャンネル・マネジャーがコントロールできる。

上記のコードでは、ユーザーが興味を持っている商品も返されます。これは、例えばユーザーとその商品の選択をデータベースに記録したい場合に使用できます。また、データベースでユーザーを検索して、そのユーザーが新規の顧客なのか、それとも以前にもその会社と取引があったのかを調べることもできます。

概要

このチュートリアルでは、ユーザーがFacebook Messengerを通じて自動的に商品情報を受け取るユースケースを見てきました。これはキーワードのマッチングに基づいています。ユーザーは、必要に応じて自動応答モードを切り替えることもできました。

その他のリソース