ライブ・チャットへの顧客情報の受渡し

会話ロギングが有効な場合は、チャット履歴全体が自動的に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オブジェクトを使用して、次のチャット顧客情報を収集できます:

ヒント:

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セクションに記述されているEMailAddressFirstNameおよび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> 

InterfaceIDrnccm: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になります。単純フィールド名はすべて小文字です(たとえば、Namenameになります)。

標準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オブジェクトは、namedataTypeおよび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です)。

カスタム・プロパティ・オブジェクトのアセンブル

カスタム・プロパティ・オブジェクトの作成に使用できるアプローチは多数あります。次のステップでは、プロパティ・グループごとに個別の変数を作成し、それらをマップに統合して、これを行う方法を示します。

  1. カスタム・プロパティ・オブジェクトに含めるパートの変数を宣言します:
    • カスタム・プロパティにインシデントIDを含める場合は、インシデントIDのタイプIntegerの変数を定義します。この例では、これをcustomerTicketIdと呼びます。
    • カスタム・プロパティにcustomerInformationプロパティを含める場合は、List型の変数を定義して、これらのプロパティを保持します。この例では、これをcustInfoと呼びます。
    • カスタム・プロパティにcustomFieldsプロパティのいずれかを含める場合は、Map型の変数を定義して、これらのプロパティを保持します。この例では、これをcustFieldsと呼びます。

    フロー変数を宣言するには、フロー・デザイナ・ページで特定のフローを選択し、「構成」タブをクリックして、「変数の追加」をクリックします。

  2. 「変数の設定」コンポーネントで、作成した変数に値を割り当てます。
    • 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"
        }
      ]
  3. 変数の設定コンポーネントを使用して、前のステップの変数を1つのマップ変数に統合します。

    たとえば、変数にliveChatInfoという名前を付けて、次の値を指定できます。

    {
      "incidentId" : "${customerTicketId}",
      "customerInformation" : "${custInfo.value}",
      "customFields" : "${custFields.value}"
    }
  4. フローのエージェント開始コンポーネントで、「カスタム・プロパティ」プロパティの値を、統合マップ変数の値(${liveChatInfo.value}など)に設定します。