この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Open CTI で Lightning Message Service を使用するためのサンプルコード

Open CTI ソフトフォンと通信するには、Lightning Message Service API を使用します。この例では、メッセージチャネル servicedev1_SampleMC__c を登録、公開、削除する 3 つのボタンが表示されます。

Open CTI を使用するには、ソフトフォンアダプタページで opencti.js または opencti_min.js バージョン 47.0 を参照する必要があります。これらのファイルがない場合は、Salesforce 担当者にお問い合わせのうえ入手してください。

HTML ファイルの <head> には、opencti_min.js のファイルパスを指定します。

最初に、コードの JavaScript セクションで、メッセージチャネル名の変数を定義します。ここでは、メッセージチャネルの文字列 SAMPLEMC_c を変数 SAMPLEMC に割り当てます。

次に、subscription オブジェクトを保持する変数 SAMPLEMC_SUBSCRIPTION を作成して、null 値を割り当てます。

subscribeToSampleMC() メソッドは、最初に subscription 変数が空であるかどうかをチェックします。このメソッドが空の場合は、sforce.opencti.subscribe() メソッドがコールされます。

sforce.opencti.subscribe() メソッドには、次の 3 つのパラメータがあります。
channelName
メッセージチャネルの名前。
listener
メッセージがメッセージチャネルで送信されたときに呼び出されるリスナ関数。
callback
subscription オブジェクトを受信する関数。この値は、SAMPLEMC_SUBSCRIPTION などの変数に割り当てます。

subscribeToSampleMC() メソッドでは、HTML 内の <span> タグが true に設定されます。

同様に、unsubscribeToSampleMC() メソッドでは、subscription オブジェクトの有無がチェックされます。オブジェクトがある場合は、sforce.opencti.unsubscribe() がコールされます。メソッド sforce.opencti.unsubscribe() には、次の 2 つのパラメータがあります。
subscription
登録解除元である subscription オブジェクト。
callback
成功またはエラーの出力を処理する関数。
unsubscribeToSampleMC() メソッドでは、HTML 内の <span> タグが false に設定されます。

publishSampleMC() メソッドには、公開するメッセージコンテンツが渡されます。メッセージは、逐次化された JSON オブジェクトです。文字列、数字、オブジェクト、ブール値などのデータを渡すことができます。関数や記号をメッセージに含めることはできません。

この例では、メッセージに次の 3 つの文字列が含まれています。
  • 送信者の名前、「LightningMessageService_OpenCTI_TestPage」
  • メッセージの種別、「SampleMC」
  • メッセージ送信時刻
publishSampleMC() メソッドは、sforce.opencti.publish() メソッドをコールします。このメソッドには、次の 3 つのパラメータがあります。
channelName
公開先のメッセージチャネルの名前。
message
逐次化された JSON オブジェクトとして公開するメッセージ。
callback
成功またはエラーの出力を処理する関数。

HTML マークアップによって、メッセージチャネルの名前が表示され、チャネルが登録されているかどうかが示され、チャネル上で登録、登録解除、公開を行うためのボタンが表示されます。これらのボタンをクリックすると、それぞれ subscribeToSampleMC()unsubscribeToSampleMC()publishSampleMC() の各関数がコールされます。メッセージテキストが表示されるのは、idopencti_testMessageTextArea に設定されているテキストエリアです。

1<html>
2	<head>
3	<script type="text/javascript" src="https://domain:port/support/api/47.0/lightning/opencti_min.js"></script>
4	<script type="text/javascript">
5		<script type="text/javascript">
6		var SAMPLEMC = "SAMPLEMC__c";
7		var SAMPLEMC_SUBSCRIPTION = null;
8
9		function subscribeToSampleMC() {
10			if (!SAMPLEMC_SUBSCRIPTION) {
11				sforce.opencti.subscribe({channelName: SAMPLEMC, listener: onPublishMessage, callback: subscribeSampleMCCallback});
12				let mcSubscribedToggle = document.querySelector("#opencti_mcSubscribedToggle");
13				mcSubscribedToggle.innerHTML = "true";
14			}
15		}
16
17		function unsubscribeToSampleMC() {
18			if (SAMPLEMC_SUBSCRIPTION) {
19				sforce.opencti.unsubscribe({subscription: SAMPLEMC_SUBSCRIPTION, callback: lightningMessageServiceCallback});
20				let mcSubscribedToggle = document.querySelector("#opencti_mcSubscribedToggle");
21				mcSubscribedToggle.innerHTML = "false";
22				SAMPLEMC_SUBSCRIPTION = null;
23			}
24		}
25
26		function publishSampleMC() {
27			const message = {
28				from: "LightningMessageService_OpenCTI_TestPage",
29				type: "SampleMC",
30				time: new Date().toLocaleTimeString()
31			};
32
33			sforce.opencti.publish({channelName: SAMPLEMC, message: message, callback: lightningMessageServiceCallback});
34		}
35
36		function lightningMessageServiceCallback(result) {
37			if (result.success) {
38				console.log(result.returnValue);
39			} else {
40				console.log(result.errors);
41			}
42		}
43
44		function subscribeSampleMCCallback(result) {
45			if (result.success) {
46				SAMPLEMC_SUBSCRIPTION = result.subscription;
47			} else {
48				console.log(result.errors);
49			}
50		}
51
52		function onPublishMessage(message) {
53			var textArea = document.querySelector("#opencti_testMessageTextArea");
54			textArea.innerHTML = message ? JSON.stringify(message, null, '\t') : 'no message payload';
55		}
56	</script>
57	</head>
58	<body>
59		<div>
60			<p>MessageChannel: SampleMC</p>
61			<p>Subscribed: <span id="opencti_mcSubscribedToggle">false</span></p>
62			<br/>
63			<input value="Subscribe" type="button" onclick="subscribeToSampleMC()"/>
64			<input value="Unsubscribe" type="button" onclick="unsubscribeToSampleMC()"/>
65			<input value="Publish" type="button" onclick="publishSampleMC()"/>
66			<br/>
67			<p>Received message:</p>
68			<textarea id="opencti_testMessageTextArea" class="opencti_testMessageTextArea" rows="10" style="disabled:true;resize:none;width:100%;"/>
69		</div>
70	</body>
71</html>

組織内で作成されたメッセージチャネルの使用

次の例は、組織内で開発された Lightning メッセージチャネルの使用法を示しています。
1<apex:page>
2    <script>
3        var SAMPLEMC = "SAMPLEMC__c";
4    </script>
5</apex:page>

ここで、カスタム Lightning メッセージチャネルは、その名前 SAMPLEMC__c で参照されます。この構文では、LightningMessageChannel メタデータ型のカスタムインスタンスが参照されます。__c サフィックスは、カスタムであることを示しますが、カスタムオブジェクトではないことに注意してください。詳細は、「メッセージチャネルの作成」を参照してください。

自分の組織に名前空間がある場合は、その名前空間をメッセージチャネル名に含めないでください。たとえば、自分の組織の名前空間が MyNamespace であっても、メッセージチャネル名は SAMPLEMC__c のままです。

組織外で作成されたメッセージチャネルの使用

組織外の開発者が作成したパッケージからの Lightning メッセージチャネルを使用するには、構文 Namespace_name__c を使用して、それらのチャネルを参照します。たとえば、SAMPLEMC が自分の組織に対してローカルではなく、名前空間 SamplePackageNamespace を持つパッケージに由来している場合、構文は SamplePackageNamespace_SAMPLEMC_c になります。