Facebook Messenger
-
Facebook開発者アカウント
-
Facebookページ
-
Facebookアプリケーション
-
ページ・アクセス・トークン
-
アプリケーション・シークレットID
-
WebフックURL
-
検証トークン
Facebook Messengerでデジタル・アシスタント(またはスタンドアロン・スキル)を実行するには、最初にFacebookページおよびFacebookアプリケーションを設定する必要があります。この詳細は、Facebook Messagingプラットフォームのドキュメントを参照してください。
簡単に言うと、その仕組みは次のとおりです。Facebookページは、デジタル・アシスタントをホストします。ユーザーがデスクトップ・ブラウザでチャット・ウィンドウを使用している場合は、このページを介してデジタル・アシスタントとチャットします。ユーザーがモバイル・デバイスを使用している場合は、Facebook Messenger自体を介して直接デジタル・アシスタントと対話します。このシナリオでは、デジタル・アシスタントは、Facebookアプリケーションによって、Facebook Messengerが処理するメッセージを取得できます。
Facebook Messengerチャネルを作成するには、Oracle Digital AssistantとFacebook Messengerの両方によって生成されるアーティファクトが必要です。
Oracle Digital Assistantからは、次のものが必要です:
- デジタル・アシスタントをFacebook Messengerに接続するWebフックURL
- Facebook Messengerがデジタル・アシスタントを識別できるようにする検証トークン
Facebook Messengerからは、次のものが必要です:
- ページ・アクセス・トークン
- アプリケーション・シークレットID
これらのアーティファクトをデジタル・アシスタントとFacebook Messengerの間で転送する必要があるため、チャネルを構成するときにこれら2つのプラットフォームを切り替える必要があります。
ステップ1: Facebook Messengerの設定
Facebook Messengerでアプリケーション・シークレットおよびページ・アクセス・トークンを生成します。
-
Facebook開発者のアカウントにログインします。
-
ボットをホストするFacebookページを作成します。ページに追加する説明、イメージおよびカバー・ページにより、そのユーザーはボットを識別します。
-
次に、このページにリンクするFacebookアプリケーションを作成します。これはメッセンジャ・アプリケーションであるため、「Apps for Messenger」を選択して、「Create App ID」をクリックします。
図の設定の説明-fbapp.pngこのダイアログで「Apps for Messenger」オプションを選択しなかった場合(テスト・アプリケーションを作成している場合)は、左側のナビゲーション・バーで「Add Product」をクリックし、「Product Setup」ページから「Messenger」を選択して「Get Started」をクリックします。
図add-product.pngの説明 - Facebookアプリケーションの「Dashboard」ページで、アプリケーション・シークレットをコピーして、使用中のシステムの任意の場所に貼り付けます。
図facebook-dashboard.pngの説明Facebookチャネルの構成を完了するには、アプリケーション・シークレットが必要です。
-
アプリケーションのダッシュボードで、Facebookページを選択して、ページ・アクセス・トークンを生成します。
図page-access-token.pngの説明 - このアクセス・トークンをコピーして、任意の場所に貼り付けます。
このトークン(FacebookアプリケーションがFacebookのMessaging APIにアクセスできるようにする)を使用して、デジタル・アシスタントでチャネル定義を完了します。
Facebook User Profile APIを変更するには、2018年7月26日より前または後に作成したFacebookアプリケーションの場合は、特定のユーザー・プロファイル・フィールドに対する権限をリクエストする必要があります。次の権限がない場合は、ユーザー名がランダムな数値文字列として移入されます。
-
pages_messaging
-
pages_user_locale
-
pages_user_timezone
ステップ2: デジタル・アシスタントでのチャネルの作成
- デジタル・アシスタントで、左側のメニューの「チャネル」をクリックして、「ユーザー」を選択します。
-
次に、「チャネルの追加」をクリックして、「チャネルの作成」ダイアログを開きます。
-
チャネルの名前を指定します。
-
チャネル・タイプとしてFacebook Messengerを選択します。
図create-channel-dialog-started.pngの説明 -
「ページ・アクセス・トークン」フィールドに、Facebook Messengerの設定手順で生成したページ・アクセス・トークンを貼り付けます。
-
「App Secret」フィールドに、Facebook Messengerの設定手順でコピーしたアプリケーション・シークレットを貼り付けます。
-
「作成」をクリックします。
-
「チャネル」ページで、「検証トークン」と「WebフックURL」の両方をコピーして、使用中のシステムの任意の場所に貼り付けます。FacebookのWebフックを構成するには、これらが必要です。
図fb-channel-complete.pngの説明
ステップ3: Facebook MessengerのWebフックの構成
-
Facebook Messengerで、Webフックに対して最初に作成したプロジェクトを選択していることを確認します。
-
「Messenger」をクリックして、「設定」を選択します。
図fb-navbar.pngの説明 -
「Subscribe to Events」をクリックして、「New Page Subscription」ダイアログを開きます。
-
デジタル・アシスタントの「チャネル」ページから取得したWebフックURLをコピーして、「New Page Subscription」ダイアログの「CallBack URL」フィールドに貼り付けます。
-
デジタル・アシスタントによって生成された検証トークンをコピーして、「Verify Token」フィールドに貼り付けます。
-
「Subscription」フィールドで、「messages」および「messaging_postbacks」コールバック・イベントを選択します。
messages
イベントは、誰かが自分のFacebookページにメッセージを送信するたびにトリガーされます。 - 「Verify and Save」をクリックします。
-
このページをサブスクライブします:
-
Messengerの設定の「Webhooks」セクションで、デジタル・アシスタント(またはスタンドアロン・スキル)のFacebookページを選択します。
-
「Subscribe」をクリックします。
ヒント:
最初に「Unsubscribe」、次に「Subscribe」をクリックして、Webフックをバウンスする必要がある場合があります。 -
ステップ4: Facebookチャネルの有効化
構成が完了したら、Facebookチャネルをアクティブ化できます。
- デジタル・アシスタントで、このチャネルを選択して、「チャネル有効」コントロールをオンに切り替えます。
-
をクリックし、チャネルに関連付けるデジタル・アシスタントまたはスキルを選択します。
これで、このチャネルを介してボットをテストできるようになりました。
ステップ5: Facebook Messengerでのボットのテスト
Facebookチャネルおよびメッセージングの構成が完了したら、ご使用の電話でFacebookページ、Facebook Messenger (https://www.messenger.com/
)およびFacebook Messengerアプリケーション()を使用してボットをテストできます。検索でボットを見つけたら、いつでもチャットを開始できます。ダイアログ・フローに対する変更をリアルタイムで確認できます。
図test-bot.pngの説明
固定メニュー
Facebook Messengerでは、「Message」フィールドの横に固定メニューを作成できます。この機能の詳細は、https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu/を参照してください。
Order PizzaおよびOrder Pastaの固定メニュー・アイテムを表示する例を次に示します:
固定メニュー・アイテムの作成
デジタル・アシスタントまたはスタンドアロン・スキルにFacebookの固定メニュー・アイテムを追加するには、次の手順を実行します:
- すべての前提条件(開始ボタンを含む)が設定されていることを確認します。
これらの前提条件は、https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu/#requirementsにリストされています
- Facebookの固定メニューの
call_to_actions
配列に各メニュー・アイテムのアクションを追加します(https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu/#set_menuを参照)。 - 固定メニュー・アイテムを設定するには、Messenger Platform APIへのPOSTコールを使用します。
リクエストURIは、
https://graph.facebook.com/v2.6/me/messenger_profile?access_token=<PAGE_ACCESS_TOKEN>
です。<PAGE_ACCESS_TOKEN>
は、Facebookアプリケーションのページ・アクセス・トークンです。
デジタル・アシスタントの固定メニュー・アイテム
デジタル・アシスタントにFacebookの固定メニュー・アイテムを追加する、Messenger Platform APIへのPOSTのフォーマットを次に示します:
{
"persistent_menu":[
{
"locale":"default",
"composer_input_disabled": false,
"call_to_actions":[
{
"title":"menu item display name",
"type":"postback",
"payload":"{\"action\":\"system.textReceived\",\"variables\": {\"system.text\": \"utterance that contains the skill's invocation name\"}}"
}
]
}
]
}
ペイロードには、Facebook Messengerからデジタル・アシスタントにsystem.text
変数を介して発話を渡すsystem.textReceived
アクションを使用します。その発話には、適切なルーティングを確実に行うために、ターゲット・スキルの起動名(つまり、明示的な起動)を含める必要があります。
Facebook Messengerでスキルの2つの固定メニュー・アイテム(Order PizzaおよびOrder Pasta)を作成する例を次に示します:
{
"persistent_menu":[
{
"locale":"default",
"composer_input_disabled": false,
"call_to_actions":[
{
"title":"Order Pizza",
"type":"postback",
"payload":"{\"action\":\"system.textReceived\",\"variables\": {\"system.text\": \"Order pizza from Pizza Joe \"}"
},
{
"title":"Order Pasta",
"type":"postback",
"payload":"{\"action\":\"system.textReceived\",\"variables\": {\"system.text\": \"Order pasta from Pizza Joe \"}"
}
]
}
]
}
スタンドアロン・スキルの固定メニュー・アイテム
スタンドアロン・スキルにFacebookの固定メニュー・アイテムを追加する、Messenger Platform APIへのPOSTのフォーマットを次に示します:
{
"persistent_menu":[
{
"locale":"default",
"composer_input_disabled": false,
"call_to_actions":[
{
"title":"menu item display name",
"type":"postback",
"payload":"{\"action\":\"action name\",\"variables\": {}"
}
]
}
]
}
ペイロードは、スキルのダイアログ・フローでトリガーするフローにマップされるイベントの名前です。
次に、そのヘルプ・アクションをFacebookの固定メニューで参照します。
{
"persistent_menu":[
{
"locale":"default",
"composer_input_disabled": false,
"call_to_actions":[
{
"title":"Help",
"type":"postback",
"payload":"{\"action\":\"help\",\"variables\": {}"
}
]
}
]
}
サポートされている機能
デジタル・アシスタントのFacebook Messengerチャネルでは、次の機能がサポートされています:
- テキスト(送信と受信の両方)
- イメージ(送信と受信の両方)
- ファイル(送信と受信の両方)
- 絵文字(送信と受信の両方)
- ロケーション(ただし非推奨) (送信と受信の両方)
- リンク
- ポストバック
- ロケーション・リクエスト
- カスタム・プロパティ
- カルーセル・コンポーネント
- リスト・コンポーネント
異なる書式設定機能および構文を使用してスキルを複数のチャネルにターゲット指定する場合は、メッセージで基本的なHTMLマークアップを使用できます。そうすると、メッセージがチャネルに送信されると、そのマークアップがFacebook Messengerのマークダウン形式に自動的に変換されます。これは、Facebook Messengerに加えて、スキルを他のチャネルにターゲティングする場合に特に役立ちます。チャネルでのリッチ・テキスト形式を参照してください。
メッセージの制約
デジタル・アシスタントのFacebook Messengerチャネルには、次のようなメッセージの制約があります:
- テキスト・メッセージ
- テキスト・メッセージの最大長: 640文字。長さが640を超えると、テキストは複数のメッセージに分割されます。
- テキスト・アクション・ラベルの最大長: 20文字
- 許可されるテキスト・アクションのタイプ: ポストバック、コール、URL
- テキスト・アクションの最大数: 3。テキスト・アクションがこれよりも多い場合、メッセージは複数の水平カードに変換されて、各カードで同じテキストがタイトルとして使用され、各カードに最大3つのアクションが含まれます。
- 水平カード
- タイトルの最大長: 80文字
- 説明の最大長: 80文字
- カード・アクション・ラベルの最大長: 20文字
- カードの最大数: 10
- カード・アクションの最大数: 3。カード・アクションの数が3を超える場合、残りのカード・アクションをレンダリングするためにカードが複製されます。
- カード・アクションの最小数: 0
- カード・リスト・アクションの最大数: 0
- 説明、イメージまたはアクションが少なくとも1つ必要かどうか: はい
- 許可されるカード・アクションのタイプ: ポストバック、コール、URL、共有
- 許可されるカード・リスト・アクションのタイプ: なし
- 垂直カード
- サポート対象外
- アタッチメント・メッセージ
- サポートの有無: はい
- アタッチメント・アクションが許可されるかどうか: いいえ
- アクション・ボタン
- グローバル・アクション・ラベルの最大長: 20文字
- グローバル・アクションの最大数: 11
- 許可されるグローバル・アクションのタイプ: ポストバック
Facebook Messengerチャネルの拡張機能
Facebookメッセンジャ・チャネルの場合、Facebookに固有の機能で共通レスポンス・コンポーネントの機能を拡張できます。
拡張機能にアクセスするには、共通レスポンス・コンポーネントのメタデータのchannelCustomProperties
要素を使用し、適切なプロパティを設定します。コードのフォーマットは次のとおりです:
...
channelCustomProperties:
- channel: "facebook"
properties:
PROPERTY_NAME: "PROPERTY_VALUE"
...
Facebook Messengerチャネルで使用可能なカスタム・プロパティを次に示します:
プロパティ名 | 許可される値 | 適用対象 | 説明 |
---|---|---|---|
top_element_style |
|
次の属性を持つレスポンス・アイテム:
|
最初のカードのイメージがレンダリングされる方法を決定します。詳細は、https://developers.facebook.com/docs/messenger-platform/send-messages/template/list/#cover_imageを参照してください。
指定しない場合、Oracle Digital Assistantではこのプロパティは |
image_aspect_ratio |
|
次の属性を持つレスポンス・アイテム:
|
イメージのレンダリングに使用されるアスペクト比。デフォルトはhorizontal (1.91:1)です。square はアスペクト比を1:1に設定します。https://developers.facebook.com/docs/messenger-platform/reference/template/generic#attachmentを参照してください |
sharable |
|
タイプがcards のレスポンス・アイテム。
|
true に設定すると、Messengerのネイティブの共有ボタンがテンプレート・メッセージに対して有効になります。デフォルトはfalse です。https://developers.facebook.com/docs/messenger-platform/reference/template/generic#attachmentを参照してください |
webview_height_ratio |
|
次のいずれかになります:
|
URLボタンがタップされたとき、またはurlプロパティが指定されているカードの高さがタップされたときに開かれるWebビューの高さ。https://developers.facebook.com/docs/messenger-platform/reference/buttons/url#propertiesを参照してください |
messenger_extensions |
|
次のいずれかになります:
|
Messengerの拡張機能を使用すると、Webビューで追加した機能をアクセス可能にすることによって、WebビューのエクスペリエンスとMessengerのエクスペリエンスを緊密に統合できます。https://developers.facebook.com/docs/messenger-platform/reference/messenger-extensions-sdkを参照してください |
fallback_url |
有効なURL | 次のいずれかになります:
|
Messengerの拡張機能をサポートしていないクライアントで使用するURL。これが定義されていない場合は、url がフォールバックとして使用されます。これは、messenger_extensions がtrueの場合にのみ指定できます。https://developers.facebook.com/docs/messenger-platform/reference/buttons/url#propertiesを参照してください |
webview_share_button |
|
次のいずれかになります:
|
hide に設定すると、Webビューの共有ボタンが無効になります(機密情報の場合)。これは、開発者が拡張機能を使用して開始した共有には影響しません。
|
share_contents |
Facebook Messenger Send APIで使用されるフォーマットに従います |
|
共有する受信者に表示するメッセージ(このボタンがアタッチされているメッセージと異なる場合)。https://developers.facebook.com/docs/messenger-platform/reference/buttons/share#propertiesを参照してください |
レスポンス・アイテム・レベル(top_element_style
)とカード・レベル(webview_height_ratio
およびfallback_url
)で定義されたカスタム・プロパティの例を次に示します:
responseItems:
- type: "cards"
cardLayout: "vertical"
cards:
- title: "${pizzas.name}"
description: "${pizzas.description}"
imageUrl: "${pizzas.image}"
url: "${pizzas.moreInfo}"
iteratorVariable: "pizzas"
channelCustomProperties:
- channel: "facebook"
properties:
webview_height_ratio: "compact"
fallback_url: "http://www.oracle.com"
channelCustomProperties:
- channel: "facebook"
properties:
top_element_style: "large"
...
channelCustomProperties
の全般的な情報は、チャネル固有の拡張機能を参照してください。