Webフック
使用するメッセージング・チャネルがOracle Digital Assistantでデフォルトでサポートされていない場合は、Webフックを使用してそのチャネルを手動で統合できます。
-
Webフックを使用してユーザー・デバイスとデジタル・アシスタント(またはスキル)の間でメッセージをリレーする、パブリックにアクセス可能なHTTPメッセージング・サーバー。
次のものとともにこのWebフックを実装します:
-
サーバーがデジタル・アシスタントからメッセージを受信できるようにするPOSTコール。
-
サーバーからデジタル・アシスタントにメッセージを送信できるようにするPOSTコール。
-
-
デジタル・アシスタントのメッセージを受信するWebフック・コールのURI (メッセージの送信先をデジタル・アシスタントが認識するため)。
-
「チャネルの作成」ダイアログを完了した後にデジタル・アシスタント用に生成されるWebフックURL (メッセージ・サーバーがデジタル・アシスタントにアクセスできるようにするため)。
-
サーバーを設定します。
-
デジタル・アシスタントからメッセージを受信するには、サーバーでPOSTコールを公開します。
-
「チャネルの作成」ダイアログで名前を入力し、次に:
-
チャネル・タイプとして「Webフック」を選択します。
-
「プラットフォーム・バージョン」を「1.1 (会話モデル)」に設定します。
-
「送信WebフックURI」フィールドにこのPOSTコールのURIを入力して、デジタル・アシスタントのメッセージの受信者としてサーバーを登録します。
-
必要に応じて、セッションの有効期限を入力し、「チャネル有効」をオンに切り替えます。
図create-webhook-channel.pngの説明 -
-
「作成」をクリックします。
デジタル・アシスタントは、デジタル・アシスタントのWebフックURLと、メッセージを暗号化するための秘密キーを生成します。WebフックURLは、メッセージング・サーバーがデジタル・アシスタントにメッセージを返送するために必要なポインタであるため、手元に用意しておいてください。
図webhook-channel-config.pngの説明 -
サーバーで、WebフックURLを使用してデジタル・アシスタントにメッセージを送信する、2つ目のPOST APIを公開します。
-
「チャネル有効」オプションをオンに切り替えます。
デジタル・アシスタントのNode.js SDKを使用して、デジタル・アシスタントとの間のメッセージの送信を設定できます。
インバウンド・メッセージ
Oracle Digital AssistantのNode.js SDKのWebhookClient
ライブラリにより、Webフック・チャネルでのメッセージの送信および受信の設定が簡単になります。SDKを使用していない場合は、インバウンド・メッセージの作成について理解しておく必要のあることを次に示します。
デジタル・アシスタント(またはスキル)にメッセージを送信するコールには、次のものが必要です:
-
ペイロードのSHA256の値を含む
X-Hub-Signature
ヘッダー。このコールには、秘密キーをキーとして使用してこのハッシュを作成する関数が含まれています。const body = Buffer.from(JSON.stringify(messageToBot), 'utf8'); const headers = {}; headers['Content-Type'] = 'application/json; charset=utf-8'; headers['X-Hub-Signature'] = buildSignatureHeader(body, channelSecretKey); ... function buildSignatureHeader(buf, channelSecretKey) { return 'sha256=' + buildSignature(buf, channelSecretKey); } function buildSignature(buf, channelSecretKey) { const hmac = crypto.createHmac('sha256', Buffer.from(channelSecretKey, 'utf8')); hmac.update(buf); return hmac.digest('hex'); }
BOT_WEBHOOK_URL
およびBOT_WEBHOOK_SECRET
はノード・サーバーで設定する環境変数です。これらの環境変数を使用すると、機密情報をWebフック内で直接ハードコーディングすることを回避できます -
userId
、profile
およびmessagePayload
プロパティを含むJSONオブジェクト:{ "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317", "profile": { "firstName": "Bob", "lastName": "Franklin", "age": 45 }, "messagePayload": {....} }
プロパティ 説明 タイプ 必須? userId
ユーザーの一意の識別子。このIDはコール元に固有です。 文字列 はい profile
firstName
やLastName
など、ユーザーを表すプロパティ。JSONオブジェクト いいえ messagePayload
messagePayload
には、text
、postback
、attachment
およびlocation
を指定できます。JSONオブジェクト はい ノート
スキルまたはデジタル・アシスタントでユーザー言語を検出する必要がある場合は、Webフック・メッセージでprofile.locale
およびprofile.languageTag
がnullに設定されていることを確認してください。
ペイロードの例: インバウンド・メッセージ
メッセージ・タイプ | ペイロードの例 |
---|---|
text |
|
postback |
|
attachment |
|
location |
|
アウトバウンド・メッセージ
Oracle Digital AssistantのNode.js SDKのWebhookClient
ライブラリにより、Webフック・チャネルでのメッセージの送信および受信の設定が簡単になります。SDKを使用していない場合は、アウトバウンド・メッセージの作成について理解しておく必要のあることを次に示します。
デジタル・アシスタントに必要なJSONフォーマットのコールを、認可ヘッダーとともに公開する必要があります。
-
秘密キーをキーとして使用して計算されたペイロードのSHA256の値を含む
X-Hub-Signature
ヘッダー。ノート
デジタル・アシスタントでは、X-Hub-Signature
ヘッダーを使用して、受信者がデジタル・アシスタントを送信者として認証し、ペイロードの整合性を検証できるようにします。 -
JSONペイロード(
userID
、インバウンド・メッセージによって指定された一意の識別子、type
(text
、attachment
およびcard
になります)を含む)。次の例に示すように、text
およびcard
レスポンス・タイプの両方にアクションを関連付けることができます。いずれのレスポンス・タイプにも、グローバル・アクションを含めることができます。レスポンス・タイプ ペイロードの例 text
{ "userId":"22343248763458761287 "messagePayload": { "type": "text", "text": "Hello, how are you?" } }
次のスニペットは、text
のレスポンスとアクションを示しています:{ "userId":"22343248763458761287 "messagePayload": { "type": "text", "text": "What do you want to do?", "actions": [ { "type": "postback", "label": "Order Pizza", "postback": { "state": "askAction", "action": "orderPizza" } }, { "type": "postback", "label": "Cancel A Previous Order", "postback": { "state": "askAction", "action": "cancelOrder" } ] } }
card
... { "type": "card", "layout": "horiztonal", "cards": [ { "title": "Hawaiian Pizza", "description": "Ham and pineapple on thin crust", "actions": [ { "type": "postback", "label": "Order Small", "postback": { "state": "GetOrder", "variables": { "pizzaType": "hawaiian", "pizzaCrust": "thin", "pizzaSize": "small" } } }, { "type": "postback", "label": "Order Large", "postback": { "state": "GetOrder", "variables": { "pizzaType": "hawaiian", "pizzaCrust": "thin", "pizzaSize": "large" } } } ] }, { "title": "Cheese Pizza", "description": "Cheese pizza (i.e. pizza with NO toppings) on thick crust", "actions": [ { "type": "postback", "label": "Order Small", "postback": { "state": "GetOrder", "variables": { "pizzaType": "cheese", "pizzaCrust": "thick", "pizzaSize": "small" } } }, { "type": "postback", "label": "Order Large", "postback": { "state": "GetOrder", "variables": { "pizzaType": "cheese", "pizzaCrust": "thick", "pizzaSize": "large" } } } ] } ], "globalActions": [ { "type": "call", "label": "Call for Help", "phoneNumber": "123456789" } ] }
attachment
attachmentのレスポンス・タイプは、image、audio fileまたはvideoになります: ... { "type": "attachment", "attachment": { "type": "video", "url": "https://www.youtube.com/watch?v=CMNry4PE93Y" } }