ライブ・チャットへの顧客情報の受渡し
会話ロギングが有効な場合は、チャット履歴全体が自動的にOracle B2C Serviceに渡されます。チャット履歴に加えて、特定の顧客情報を送信することもできます。
- インシデントID
- チャット顧客情報:スキルでは次のチャット顧客情報をOracle B2C Serviceに渡すことができます。
- 電子メール・アドレス
- 名前
- 姓
- 接続
- 組織
- カテゴリ
- 製品
スキルではプロファイル値を使用してこれらのチャット顧客フィールドを自動的に移入および送信します。次の値を設定するために何かをする必要はありません:
- 電子メール・アドレス
- 名前
- 姓
- インシデント・カスタム・フィールド:インシデント・タイプのOracle B2C Serviceカスタム・フィールドの値を渡できます。
カスタム・フィールドについて学習するには、Oracle B2C Serviceの使用のカスタム・フィールドの概要を参照してください。
20.1より前に作成されたエージェント統合チャネルを使用している場合、またはチャネルで19Aより前のOracle B2C Serviceインスタンスに接続する場合は、インタフェース情報を渡すこともできます。バージョン20.1以上で作成され、Oracle B2C Service 19A以上に接続するチャネルでは、チャネルのURLにインタフェースIDを含めます。
ライブ・エージェントに顧客情報を送信するには、エージェント統合コンポーネントの「カスタム・プロパティ」プロパティでマップを渡します。マップの最上位構造を次に示します:
incidentID: # type int
customerInformation: # chat customer information object
customFields: # incident custom fields object
${mapVariableName.value}
顧客情報を送信ライブ・エージェントにアセンブルする例は、カスタム・プロパティ・オブジェクトのアセンブルを参照してください。
incidentIDプロパティ
ライブ・エージェントにインシデントIDを渡すには、「カスタム・プロパティ」マップにincidentID
プロパティを追加します。
ヒント:
既存のインシデントにチャット・リクエストを関連付ける場合は、次の例のようにRESTリクエストを送信することで、カスタム・コンポーネントを作成してincidentId
を取得できます。このRESTリクエストは、一致する電子メール・アドレスを持つ連絡先に対する最新のインシデントを取得します。https://<URL>/services/rest/connect/latest/incidents?q=primaryContact.ParentContact.Emails.EmailList.Address like 'email@gmail.com'&orderBy=createdTime:desc&limit=1
レスポンス本文には、インシデントIDを含むhref
リンクがあります:
{
"items": [
{
"id": 26302,
"lookupName": "200116-000003",
"createdTime": "2020-01-16T13:08:25.000Z",
"updatedTime": "2020-01-16T20:25:21.000Z",
"links": [
{
"rel": "canonical",
"href": "https://<URL>/services/rest/connect/v1.4/incidents/26302"
}
]
}
],
カスタム・コンポーネントについて学習するには、バックエンド統合を参照してください。Oracle B2C Service REST APIの詳細は、Oracle B2C ServiceのREST APIを参照してください。
標準customerInformationオブジェクト
この項では、バージョン20.01以降で作成され、Oracle B2C Serviceバージョン19A以降に接続するエージェント統合チャネルを使用するスキル用のcustomerInformation
オブジェクトについて説明します。
「カスタム・プロパティ」マップでcustomerInformation
オブジェクトを使用して、次のチャット顧客情報を収集できます:
- incidentID:
int
。 -
eMailAddress:
string
。最大80文字スキルは、対応する.profile
プロパティ(ユーザー・コンテキストのプロファイル・スコープ変数を参照)を自動的に設定し、Oracle B2C Serviceに渡します。 -
firstName:
string
。最大80文字スキルは、対応する.profile
プロパティ(ユーザー・コンテキストのプロファイル・スコープ変数を参照)を自動的に設定し、Oracle B2C Serviceに渡します。 -
lastName:
string
。最大80文字スキルは、対応する.profile
プロパティ(ユーザー・コンテキストのプロファイル・スコープ変数を参照)を自動的に設定し、Oracle B2C Serviceに渡します。 -
contactID:
id
サブプロパティでint
型の値を渡します。 -
organizationID:
id
サブプロパティでint
型の値を渡します。 -
productID:
id
サブプロパティでint
型の値を渡します。 -
categoryID:
id
サブプロパティでint
型の値を渡します。
ヒント:
Oracle B2C Service REST APIを使用すると、顧客情報フィールドの有効な値を表示できます。たとえば、このGETリクエストでは、カテゴリがリストされます:curl --request GET \
--url https://<sitename.domain>/services/rest/connect/latest/serviceCategories \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'
レガシーcustomerInformationオブジェクト
この項では、20.01より前に作成されたエージェント統合チャネルか、19Aより前のOracle B2C Serviceインスタンスに接続するチャネルを使用するスキル用のcustomerInformation
オブジェクトについて説明します。
カスタム・プロパティ・マップでcustomerInformation
オブジェクトを使用して、インタフェースID、連絡先ID、カテゴリIDなどのチャット顧客情報を渡します。customerInformation
オブジェクトには、http://<sitename.domain>/services/soap/connect/chat_soap?wsdl=server
にあるOracle B2C Service WSDLのChat Customer Information
セクションで定義されているフィールドを含めることができます。
オブジェクトでは、名前の最初の文字を小文字に変更し、単純なフィールドの名前をすべて小文字に変更します。
interfaceID
オブジェクトを渡さない場合、スキルではデフォルトのid:{id: 1}
が使用されます。インタフェースがチャット対応でない場合、開始ハンドシェイクは失敗します。My ServicesからアクセスするOracle B2C Service構成アシスタントを使用して、インタフェースがチャットに対応しているかどうかを確認できます。
WSDLのChat Customer Informationセクションに記述されているEMailAddress
、FirstName
およびLastName
フィールドを定義できますが、スキルにより、これらの値は対応する.profile
プロパティ(ユーザー・コンテキストのプロファイル・スコープ変数を参照)から自動的に設定されます。
ヒント:
Oracle B2C Service REST APIを使用すると、顧客情報フィールドの有効な値を表示できます。たとえば、次のGETリクエストでは、インタフェースIDと名前がリストされます:curl --request GET \
--url https://<sitename.domain>/services/rest/connect/latest/siteInterfaces \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'
次のGETリクエストでは、カテゴリがリストされます:
curl --request GET \
--url https://<sitename.domain>/services/rest/connect/latest/serviceCategories \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'
前述のとおり、customerInformation
マップ構造は、次のアドレスのWSDLに示されているChat Customer Information
構造に準拠している必要があります:
http://<sitename.domain>/services/soap/connect/chat_soap?wsdl=server
WSDLからの抜粋を次に示します:
<!-- ============================== -->
<!-- Chat Customer Information -->
<!-- ============================== -->
<xs:complexType name="ChatCustomerInformation">
<xs:sequence>
<xs:element name="EMailAddress" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="FirstName" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LastName" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="InterfaceID" type="rnccm:NamedID" minOccurs="1" maxOccurs="1"/>
<xs:element name="ContactID" type="rnccm:ID" minOccurs="0" maxOccurs="1" />
<xs:element name="OrganizationID" type="rnccm:ID" minOccurs="0" maxOccurs="1" />
<xs:element name="Question" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ProductID" type="rnccm:ID" minOccurs="0" maxOccurs="1"/>
<xs:element name="CategoryID" type="rnccm:ID" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
一部のオブジェクトはrnccm:ID
型であり、次の抜粋で定義されています。オブジェクトにlong型のid
フィールドが含まれることに注意してください。
<xs:element name="ID" type="ID"/>
<xs:complexType name="ID">
<xs:attribute name="id" type="xs:long" use="optional"/>
</xs:complexType>
InterfaceID
はrnccm:NamedID
型です。このオブジェクトにはID (long)、Name (string)または両方が含まれることに注意してください。
<xs:element name="NamedID" type="NamedID"/>
<xs:complexType name="NamedID">
<xs:sequence>
<xs:element name="ID" type="ID" minOccurs="0" maxOccurs="1"/>
<xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
大文字化けは、WSDLとカスタム・プロパティ・マップで異なります。マップでは、オブジェクト名の最初の文字は小文字です(Pascalの場合)。たとえば、WSDLのProductID
は、マップ・オブジェクトのproductID
になります。単純フィールド名はすべて小文字です(たとえば、Name
がname
になります)。
標準customFieldsオブジェクト
この項では、バージョン20.01以降で作成され、Oracle B2C Serviceバージョン19A以降に接続するエージェント統合チャネルを使用するスキル用のcustomFields
オブジェクトについて説明します。
「カスタム・プロパティ」マップでcustomFields
オブジェクトを使用して、インシデント・タイプのOracle B2C Serviceカスタム・フィールドの値を渡します。
customFields
オブジェクトは、次のプロパティを含むマップの配列です。
-
シンプル・フィールド:
-
name:
c$
が先頭に付いたフィールドの列名(小文字)。 -
type:
許容される値は、BOOLEAN、DATE、DATETIME、INTEGER、LONG、STRINGおよびDECIMALです。 -
value:
フィールドの値。
-
-
メニュー・フィールド:
-
name:
c$
が先頭に付いたフィールドの列名(小文字)。 -
value:
フィールドのIDまたはメニュー・アイテムのテキストに値を設定できます。このオブジェクトにはtype
プロパティがないことに注意してください。ヒント:
メニュー・アイテムのIDを見つけるには、Oracle B2C Serviceデスクトップ・サービス・コンソールからカスタム・フィールドの詳細ページを開きます。メニュー・アイテムの上にカーソルを置き、数秒待機します。ツールチップが表示され、そのアイテムのIDが表示されます。
-
オブジェクトの値の例を次に示します。
[
{
"name" : "c$text_field",
"type" : "STRING",
"value" : "SILVER"
},
{
"name" : "c$text_area",
"type" : "STRING",
"value" : "My package arrived but there were no contents in the box. Just bubble wrap."
},
{
"name" : "c$integer",
"type" : "INTEGER",
"value" : 21
},
{
"name" : "c$yes_no",
"type" : "BOOLEAN",
"value": 1
},
{
"name" : "c$date_field",
"type" : "DATE",
"value" : "2020-02-04T00:00:00+00:00"
},
{
"name" : "c$date_time",
"type" : "DATETIME",
"value" : "2020-02-04T21:24:18+00:00"
},
{
"name" : "c$menu",
"value" : "12"
}
]
ヒント:
次のGETリクエストを送信できます。このリクエストは、RightNowオブジェクト問合せ(ROQL)を使用して、列名のリストを取得します:curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.*%20from%20Incidents \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'
カスタム・フィールドの有効な値を取得するには、次のようにRightNowオブジェクト問合せ(ROQL)を使用するGETリクエストを送信します:
curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.skillType%20from%20Incidents%20where%20CustomFields.c.skillType%20IS%20NOT%20NULL \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'
レガシーcustomFieldsオブジェクト
この項では、20.01より前のエージェント統合チャネルか、19Aより前のOracle B2C Serviceインスタンスに接続するチャネルを使用するスキル用のcustomFields
オブジェクトについて説明します。
「カスタム・プロパティ」マップでcustomFields
オブジェクトを使用して、インシデント・タイプのOracle B2C Serviceカスタム・フィールドの値を渡します。
customFields
オブジェクトは、name
、dataType
およびdataValue
プロパティを含むマップの配列です。name
プロパティの値は、c$
が先頭に付いたフィールドの小文字の列名です。
オブジェクトの値の例を次に示します。
[
{
"name" : "c$da_text_field",
"dataType" : "STRING",
"dataValue" : {
"stringValue": "SILVER"
}
},
{
"name" : "c$da_text_area",
"dataType" : "STRING",
"dataValue" : {
"stringValue": "This is a very long string that is more than 32 characters."
}
},
{
"name" : "c$da_integer",
"dataType" : "INTEGER",
"dataValue" : {
"integerValue" :21
}
},
{
"name" : "c$da_menu",
"dataType" : "NAMED_ID",
"dataValue" : {
"namedIDValue": {
"name" : "Item 1"
}
}
},
{
"name" : "c$da_is_from_skill",
"dataType" : "BOOLEAN",
"dataValue" : {
"booleanValue" : true
}
},
{
"name" : "c$da_date",
"dataType" : "DATE",
"dataValue" : {
"dateValue" : "2019-10-26"
}
},
{
"name" : "c$da_datetime",
"dataType" : "DATETIME",
"dataValue" : {
"dateTimeValue" : "2019-10-26T21:32:52"
}
}
]
ヒント:
次のGETリクエストを送信できます。このリクエストは、RightNowオブジェクト問合せ(ROQL)を使用して、列名のリストを取得します:curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.*%20from%20Incidents \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'
カスタム・フィールドの有効な値を取得するには、次のようにRightNowオブジェクト問合せ(ROQL)を使用するGETリクエストを送信します:
curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.skillType%20from%20Incidents%20where%20CustomFields.c.skillType%20IS%20NOT%20NULL \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'
http://<sitename.domain>/services/soap/connect/chat_soap?wsdl=server
にあるOracle B2C Service WSDLのGenericField
定義では、dataType
構造とdataValue
構造が記述されています:
<xs:element name="GenericField" type="GenericField"/>
<xs:complexType name="GenericField">
<xs:sequence>
<xs:element name="DataValue" type="DataValue" minOccurs="1" maxOccurs="1" nillable="true"/>
</xs:sequence>
<xs:attribute name="dataType" type="DataTypeEnum" use="optional"/>
<xs:attribute name="name" type="xs:string" use="required"/>
customerInformation
フィールドと同様に、カスタム・プロパティ・マップの対応するものにも同じケースが適用されます(たとえば、WSDLのDataValue
はマップではdataValue
です)。
カスタム・プロパティ・オブジェクトのアセンブル
カスタム・プロパティ・オブジェクトの作成に使用できるアプローチは多数あります。次のステップでは、プロパティ・グループごとに個別の変数を作成し、それらをマップに統合して、これを行う方法を示します。
- カスタム・プロパティ・オブジェクトに含めるパートの変数を宣言します:
- カスタム・プロパティにインシデントIDを含める場合は、インシデントIDのタイプ
Integer
の変数を定義します。この例では、これをcustomerTicketId
と呼びます。 - カスタム・プロパティに
customerInformation
プロパティを含める場合は、List
型の変数を定義して、これらのプロパティを保持します。この例では、これをcustInfo
と呼びます。 - カスタム・プロパティに
customFields
プロパティのいずれかを含める場合は、Map
型の変数を定義して、これらのプロパティを保持します。この例では、これをcustFields
と呼びます。
フロー変数を宣言するには、フロー・デザイナ・ページで特定のフローを選択し、「構成」タブをクリックして、「変数の追加」をクリックします。
- カスタム・プロパティにインシデントIDを含める場合は、インシデントIDのタイプ
- 「変数の設定」コンポーネントで、作成した変数に値を割り当てます。
customerTicketId
には、整数に解決される値または式を使用します。custInfo
には、次のようなJSONマップとして値を指定します:{ "contactID" : { "id" : "${contactId}" }, "organizationID" : { "id" : "${organizationId}" }, "productID" : { "id" : "${productId}" }, "categoryID" : { "id" : "${categoryId}" } }
custFields
には、次のようなオブジェクトのJSON配列として値を指定します:[ { "name" : "c$text_field", "type" : "STRING", "value" : "SILVER" }, { "name" : "c$text_area", "type" : "STRING", "value" : "My package arrived but there were no contents in the box. Just bubble wrap." }, { "name" : "c$integer", "type" : "INTEGER", "value" : 21 }, { "name" : "c$yes_no", "type" : "BOOLEAN", "value": 1 }, { "name" : "c$date_field", "type" : "DATE", "value" : "2020-02-04T00:00:00+00:00" }, { "name" : "c$date_time", "type" : "DATETIME", "value" : "2020-02-04T21:24:18+00:00" }, { "name" : "c$date_time", "type" : "DATETIME", "value" : "2020-02-04T21:24:18+00:00" }, { "name" : "c$menu", "value" : "12" } ]
- 変数の設定コンポーネントを使用して、前のステップの変数を1つのマップ変数に統合します。
たとえば、変数に
liveChatInfo
という名前を付けて、次の値を指定できます。{ "incidentId" : "${customerTicketId}", "customerInformation" : "${custInfo.value}", "customFields" : "${custFields.value}" }
- フローのエージェント開始コンポーネントで、「カスタム・プロパティ」プロパティの値を、統合マップ変数の値(
${liveChatInfo.value}
など)に設定します。