Open CTI で Lightning Message Service を使用するためのサンプルコード
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() メソッドがコールされます。
- channelName
- メッセージチャネルの名前。
- listener
- メッセージがメッセージチャネルで送信されたときに呼び出されるリスナ関数。
- callback
- subscription オブジェクトを受信する関数。この値は、SAMPLEMC_SUBSCRIPTION などの変数に割り当てます。
subscribeToSampleMC() メソッドでは、HTML 内の <span> タグが true に設定されます。
- subscription
- 登録解除元である subscription オブジェクト。
- callback
- 成功またはエラーの出力を処理する関数。
publishSampleMC() メソッドには、公開するメッセージコンテンツが渡されます。メッセージは、逐次化された JSON オブジェクトです。文字列、数字、オブジェクト、ブール値などのデータを渡すことができます。関数や記号をメッセージに含めることはできません。
- 送信者の名前、「LightningMessageService_OpenCTI_TestPage」
- メッセージの種別、「SampleMC」
- メッセージ送信時刻
- channelName
- 公開先のメッセージチャネルの名前。
- message
- 逐次化された JSON オブジェクトとして公開するメッセージ。
- callback
- 成功またはエラーの出力を処理する関数。
HTML マークアップによって、メッセージチャネルの名前が表示され、チャネルが登録されているかどうかが示され、チャネル上で登録、登録解除、公開を行うためのボタンが表示されます。これらのボタンをクリックすると、それぞれ subscribeToSampleMC()、unsubscribeToSampleMC()、publishSampleMC() の各関数がコールされます。メッセージテキストが表示されるのは、id が opencti_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>組織内で作成されたメッセージチャネルの使用
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 になります。