MAXPOSTメッセージの統合
IFrame統合にPOSTメッセージを使用
高度なデスクトップベースの統合を容易にするために、MAX(My Agent eXperience)エージェントクライアントは、カスタム埋め込みウェブページによるイベントサブスクリプションをサポートしています。 MAXには、連絡先パネル(関連する連絡先と連動して開閉する)またはカスタムワークスペース(個々の連絡先に関係なく常に開いて利用できる)のいずれかを使用してウェブページを埋め込む(IFrame)機能があります。 連絡先パネルの一般的な使用例は、電話の画面ポップとして開かれる(そして、通話が完了すると閉じられる)顧客固有のCRMウェブページです。 カスタムワークスペースの一般的な使用例は、連絡先や顧客とのやり取りに直接関連付けられていない知識ベースページやその他のサイトです。
いずれの場合も(連絡先パネルまたはカスタムワークスペース)、埋め込まれた「子」ウェブページは、POSTメッセージを介して「親」MAXウィンドウが受信したシステムイベントをサブスクライブできます。 MAXは、エージェントの状態または個々の連絡先に関する詳細を含む情報をACDプラットフォームから定期的に受信します。 これらのイベントをサブスクライブすることにより、IFramedウェブページはMAXの動作に応答するカスタマイズされたロジックを実装できます。 たとえば、エージェントが状態を使用可能から動作中、および動作中から使用不可に変更すると、カスタム埋め込みウェブページはビジネスルールに基づいて応答することを選択できます。 または、新しい通話が受信されると、ウェブページに新しい通話が通知され、それに応じて応答することができます。 詳細については、次の追加のドキュメントを参照してください。https://developer.niceincontact.com/API、 https://developer.niceincontact.com/Documentation/AgentSessionEvents、およびhttps://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage。
データオブジェクト変数
MAXは、次の値を含むデータオブジェクトで顧客からの投稿メッセージを受信するように設定されています。 すべてのプロパティキーは大文字と小文字が区別されます。 指定されている場合、値では大文字と小文字も区別されます。
- contactCardData:これは、顧客名と電話連絡先の画像を含むデータオブジェクトです。 nameとuserImgの2つのキーがあります。 大文字と小文字が区別されます。
- contactId:これはオプションのintです。 連絡先IDがわかっている場合は、ここで入力できます。 連絡先IDがなく、連絡先パネルに読み込まれている場合は、関連するパネルの連絡先IDが検索されます。 一般的なカスタムワークスペースには、この方法で配置できる連絡先IDがないため、連絡先固有のエントリが必要な場合は、それらを提供する必要があります。
- 発行者:これはオプションの文字列です。 一意である必要はありませんが、送信者の識別子名として機能します。 この文字列は、コンソールログにコンテキストを追加するためのロギングに役立ちます。 テストでは、投稿メッセージリスナーが送信した登録メッセージを取得する場合があります。 このフィールドを使用して、メッセージが自分から送信されたかどうかを確認できます。 MAXは、「MAX」を発行者として応答イベントを送信します。
- messageType:これは必須の文字列です。 大文字と小文字が区別されます。 2つの有効なエントリがあります。
エントリ値 結果 「RegisterForClientEvents」 これは、クライアントイベントサブスクリプションの設定を検討していることをMAXが認識する方法です。 「UnregisterFromClientEvents」 これにより、ウィンドウ参照がMAXから切断され、クライアントイベントの送信が終了します。 サブスクリプションタイプまたはcontactIdを変更する場合は、再登録する前にこれを呼び出す必要があります。 これを行わず、contactPanelの新しい登録で同じウィンドウを使用すると、バグが発生します。
「ContactCardData」 これは、MAXが電話連絡先の顧客名と画像を取得していることを知る方法です。 - SubscriptionTypes:これは必須の文字列配列です。 配列内のすべてが小文字に正規化されるため、大文字と小文字は区別されません。 配列の値は加算的です。 各オプションは、受信するメッセージのタイプを指定します。 いくつかの有効なエントリがあります。
エントリ値 結果 "すべて" これにより、すべてが返されます。 "エージェント" これにより、連絡先IDを持たないものがすべて返されます。 "連絡先" これにより、要求された連絡先ID、またはIFrameがスキルまたは連絡先に接続されている場合は関連するパネルの連絡先IDのいずれかによって制限されたイベントが返されます。 「連絡先」 これにより、連絡先IDを持つすべてのイベントが返されます。 連絡先パネルを表示していて、パネルの連絡先に関する追加情報が必要な場合は、このフィールドを追加します。 「sessioninfo」 これにより、エージェントのセッショントークンが返されます。 エージェントセッション固有のAPI呼び出しを行う場合は、このイベントに登録してください。
SubscriptionTypesに空の配列を使用すると、エラーが発生します。
MAXがサブスクリプションを受信すると、確認メッセージとともに、要求されたサブスクリプションタイプの現在の状態を送信して、ワークスペースを適切に設定できるようにします。 これらのイベントは開始時に保証されます。
エントリ値 | 現在の状態 |
---|---|
"すべて" | 現在のAgentStateと、MAXの範囲内にあるすべての現在の連絡先を返します。 |
"エージェント" | 現在のAgentStateを返します。 これには、エージェントのセッショントークンは含まれません。 |
"連絡先" | 連絡先がMAXの範囲内に存在する場合、現在の接点状態を返します。 |
「連絡先」 | MAXの範囲内に存在する現在のすべての連絡先を返します。 |
登録は、初期化時にベースのAgentStateと連絡先よりも多くを受け取る場合があります。 これらのイベントには、AgentLegEvent、AgentSessionStart、およびMchAgentSettingsChangeEventが含まれる可能性があります。 このデータへのローカル参照を確立する前にサブスクリプションリクエストが届くと、これらの追加のイベントが表示されます。 その場合、通常の使用時に受信するように、get-next-eventを介してMAXに送信されるすべてのイベントを保存して通過させます。 唯一の違いは、基本的な初期化のために選択したコアイベントを選択できないことです。 登録したデータにも同じフィルターが適用されるため、これによる異常な結果は発生しません。
通話コマンド
MAXが指定されたコマンドを受け入れるための有効な状態にある場合、MAXはアクションをアプリケーションで呼び出します。 これらのコマンドは、連絡先の処理に使用されるプライマリボタンと密接に連携しています。 メッセージを送り返しません。
エントリ値 |
結果 |
---|---|
AnswerEventおよびRefuseEvent | 受諾/拒否ダイアログを示す着信通話がある場合に発生します。 |
HoldEvent、MuteEvent、およびMaskEvent |
トグルとして扱われます。 たとえば、Holdを1回呼び出すと通話が保留になり、もう一度呼び出すと通話が復元されます。 |
RecordEvent | ワンタイムアクション。 たとえば、Recordが呼び出されると、停止することはできません。 |
HangupEvent | 確認ダイアログボックスが表示されずに、通話はすぐに終了します。 |
呼び出し例(messageTypeのみが必要)
opener.postMessage({ messageType: 'MuteEvent' }, '');*
実装例
// Find the parent window (MAX) to register for events
var opener = window.opener || window.parent;
// Set up your subscriptions
var SubscriptionTypes = ['agent'、 'contacts'];
// Start listening for response messages
var doSomething = function (events) {
spacevar event = null;
space var eventIndex = null;
space for(eventIndex in events){
spacespace if (events.hasOwnProperty(eventIndex)){
spacespacespaceevent = events[eventIndex];
spacespace }
space }
};
var listenForPostMessage = function (event) {
if (event.data && event.data.events && event.data.issuer === 'MAX') {
logToConsole('=== received a post message with [' + event.data.events.length + '] events ===');
doSomething(event.data.events);
}
};
// Add the listener for MAX client events.
window.addEventListener('message', listenForPostMessage);
// Send the registration message to MAX
opener.postMessage({ contactId: contactId, issuer: 'MyTestSite', messageType: 'Register-ForClientEvents', subscriptionTypes: subscriptionTypes }, '*');
応答オブジェクト
応答オブジェクト
{
発行者: 「MAX」、
contactId: int(Nullable)-永続パネルとして検出された、または渡された連絡先ID。contactIdが渡されなかった、または見つからなかった場合、これはnullになります。
イベント: [オブジェクト、オブジェクト、オブジェクト...]-サブスクリプションタイプまたは連絡先フィルターに一致するこの一連のイベントで返されたすべてのイベント。
}
「SessionInfo」サブスクリプションのメッセージ形状に対する応答:
{
messageType: "SessionInfo"
sessionToken: "mysessiontoken =="
}
サブスクリプション確認イベント
少なくとも1つのsubscriptionTypeがある場合、サブスクリプションが許可されます。 有効なsubscriptionTypesがない場合、無効なタイプを表示するコンソール警告がログに記録されます。 返される一連のイベントの最初のイベントは、メッセージタイプClientEventSubscriptionAcknowledgeのイベントになります。 このイベントの構造は次のとおりです。
{
contactId: (int)-nullの場合、contactIdがサブスクリプションに関連付けられていないことを意味します。 これは、クライアントが「連絡先」サブスクリプションが機能したかどうかを確認する方法です。
messageType: ClientEventSubscriptionAcknowledge-(文字列)。 これは、特定の確認応答イベントメッセージタイプです。
理由: 「成功」| 「無効な連絡先ID」| 「無効なサブスクリプションタイプ」-ERRORステータスコードの理由で応答した場合。 これは、あまり複雑にならないようにするために、あまり詳しくはなりません。 1つの失敗理由のみを返します。 最初に連絡先IDの有効性をチェックします(ゼロでも整数以外の文字列でもありません)。 それが失敗したが、無効なサブスクリプションタイプもある場合は、連絡先IDを修正した後、再試行するまでサブエラーは表示されません。 これは、ウィンドウへの参照を保持していなかったため、サブスクリプションが失敗したことを意味します。
状態: 「OK」または「ERROR」-これがエラーを返す場合、メッセージ後のサブスクリプション接続を正常に作成できませんでした。 これらのエラーを修正して、再試行する必要があります。
}
場合によっては、サブスクリプションの確認応答が送信されません。 同じウィンドウが2番目のサブスクリプションを要求すると、最初に既存のサブスクリプションを削除せずに、応答は送信されず、追加のサブスクリプションは認識されません。 次の構造のコンソール警告を出力します。
{
console.warn( 'クライアント偶数サブスクリプションの処理中にエラーが発生しました。 Issuer: [' + subscriberObject.data.issuer + '] has already subscribed.')
}