• sfdcAnon
  • NEWBIE
  • 150 Points
  • Member since 2007

  • Chatter
    Feed
  • 5
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 62
    Replies

Hi all,

 

I have a problem and I haven't found too many topics on this subject.

On a custom visualforce page I had to implement CTI Click to dial links for some phone fields. To make it work, because I discover that the CTI adapter won't recognize those fields as phone numbers on custom vf pages (and I use the Contact standard Phone field), I had to add a link on the phone number something like this:


<a href="javascript&colon;sendCTIMessage(%27/CLICK_TO_DIAL?DN=%27%2BencodeURIComponent(%27(801)%20440-5157%27)%2B%27&ID=003M0000003ytsbIAA&ENTITY_NAME=Contact%27);">(801) 440-5157</a>

 

And this works like a charm in that  visualforce page but, the client wants to use it in the Console. And when I open the same page there and I click the link the CTI adapter has no reaction at all... nothing happens.

Any idea on this one?

 

Thanks!

  • February 07, 2012
  • Like
  • 0

So here I am trying to enjoy a nice sat with my kids. And I get a call. Apparently, Sp12 has murdered the service cloud console API. All versions from what we can tell. even old ones. that should be backwards supported/compatible/whatever. Tried salesforce example code from page 7 of:

 

http://www.salesforce.com/us/developer/docs/api_console/api_console.pdf

 

No love (by the way you should really use showheader=false and sidebar=false). JS error:

 

"Uncaught ReferenceError: Sfdc is not defined" in integration.js.  

 

The cloud and I aren't on speaking terms. Maybe we should see other people.........or cumulus formations.......whatever......

We have developed a Salesforce CTI Adapter using CTI Toolkit 3.0, based on the DemoAdapter.  Now we want to update it to use CTI Toolkit 4.0.

CTI Toolkit 3.0 stored the log file settings in the Windows registry, and this worked fine.  Now CTI Toolkit 4.0 uses the Microsoft Application Settings Architecture (see http://msdn.microsoft.com/en-us/library/8eyb2ct1%28v=VS.90%29.aspx), and also copies any changes to the Windows registry.  This works by means of the BrowserConnector maintaining the settings, and whenever the settings change, it sends a message to the CTIAdapterLib, which updates the Windows registry.  When it starts up, CTIAdapterLib initially uses the settings from the Windows registry.  This is OK in many cases, but gives a confusing problem on systems that have been upgraded from CTI Toolkit 3.0 and where non-default settings are in use, for example in the following scenario:

  1. An existing system uses CTI Toolkit 3.0 and has non-default settings A for logging in the Windows registry.
  2. The system is upgraded to use CTI Toolkit 4.0.  Settings A remain in the registry, and default settings B are created in the Application Settings.
  3. Initially CTIAdapterLib starts logging using settings A from the registry, but BrowserConnector is using settings B from the Application Settings.
  4. Then somebody right-clicks the taskbar icon to change the logging settings.  The user is confused, being presented with settings B from the Application Settings.
  5. The user changes the logging settings to new values C, and these are written to both the Application Settings and to thw Windows registry.  Normality is now restored, with all copies of the settings having the same values C.

Please can you suggest what changes to make in order to fix this problem?  I was thinking along the lines of changing CCTILogger::LoadLogInfoFromRegistry() so that it updates the Application Settings somehow.  This could perhaps be done directly, or better by sending a message to BrowserConnector.  Any ideas would be greatly appreciated.

Thanks,

James.

Has anyone been able to get the 3.0 cti connector to run in citrix xenapp?  Currently we are getting an exception when trying to start the exe.  We are not logged into a browser yet so it isn't at the point where it is trying to load the com dll. 

 

Just wanted to see if anyone had success with it and what their configuration looked like.

Thanks

I am trying to implement the service console and am stuck on a button issue.

 

Currently  I have a custom "New Case" button that displays within a contact.  It uses javascript to auto-pop some fields based on user settings

Ex:

window.parent.location.href ="%2F500%2Fe?00N800000034wTE={!$User.Language_Support__c}&cas3_lkid={!Contact.Id}&00N80000003MDbe={!$User.Default_Country_cases__c}&retURL=%2F500%2Fo";

 

In testing within the console, this will load the case creation form outside the console.  To get around this, I am using the following code (some hard coding in place right now to eliminate variables):

 

{!REQUIRESCRIPT("/soap/ajax/22.0/connection.js")} 
if (typeof(srcUp) == 'function') 
{
} else {    
     window.parent.location.href ="%2F500%2Fe?00N800000034wTE={!$User.Language_Support__c}&cas3_lkid={!Contact.Id}&00N80000003MDbe={!$User.Default_Country_cases__c}&retURL=%2F500%2Fo";
}
Now the behavior is working in console (as well as if not in console), however I believe that because the button originates from a "Contact" page, that somehow the controller class is not changing to a case controller.  Even though the main page is laid out correctly, I am not getting the Knowledge or other side bars that should be there (getting contact one still).
Any suggestions on how to fix this, or a more elegant way of doing this would be appreciated.  The built in "New Case" works fine, but I need to pass some $user parameters into case fields during submission, all while remaining within console.

 

Hi,
  We have developed .NET Application & included it in Call center CTI Adapter Url . All the things are working well, when the call comes its searches phone field in objects , get the results & open the record in new tab in Service cloud console with the ANI no.  With standard all the things are working as expected.

But the issue we want to open our Custom VF page when the call comes instead of standard one.So created VF page & controller & that page is poping up instead of standard one. Now the main problem is we are not getting ANI no. neither in VF page nor in Controller .
1 ) We tried get ANI no. in Apex controller via url, host url, current url etc...but nothing is working.
2) In Vf page we tried to get via including interaction.js file & using its methods , but those methods are not getting called on page load.

Has anyone face the same issue in using open CTI in salesforce?

 Can anyone please help me to fix this error.
 


When using the Open CTI interface and calling the "saveLog" method passing in a date/time value it does not seem to be saved into the object but all other fields are saved and no error message is passed back in the call back function - it just appears the date / time information is discarded

 

The date / time field in question is a custom field

 

This is not a field naming issue because if the name is incorrect a relevant error message is thrown back indicating that is the case

 

The date / time format is the one specified for the REST API but I have also tried a number of other variants

 

Below is an example of the request:

 

 sforce.interaction.saveLog('Task', 'Subject=ImportantTask&customDateTimeField__c=2013-10-20T12:38:00.000+0000', saveLogCallback);

 

In the above example a Task object would be created and the subject would be "ImportantTask" and the field 'customDateTimeField__c' would be empty

 

I suspect I am simply using the incorrect date/time format - if anyone knows the correct date/time format that would be very helpful

  • October 20, 2013
  • Like
  • 0

I have to integrate CTI system with Salesforce. I have installed open CTI from following link.

http://wiki.developerforce.com/page/Open_CTI#Installing_The_Demo_Open_CTI_Adapter

 

Can anyone guide me How can I configure it with my CTI System? I have simple requirement. I have to open relative account page as a pop up when a call is reached at CTI System.Please help.

We are an ISV who are developing integration with the Open CTI interface for integrating Cisco voice and video functionality:

 

  1. When utilizing Open CTI adapter interface with the Service Console window, it appears the settings in the linked image below for "Screen pops open within: New Browser window or tab" does not work and always opens in the main existing view. This settings works in the normal Sales Cloud view.
    https://docs.google.com/file/d/0BwKyQ9NiKDCPZUhfUklFbWpJNmc/edit?usp=sharing

    This is potentially critical for end users who may be editing an existing record, which is why w
    e use sforce.interaction.screenPop with force=false, which is per documentation

    should avoid screenpop while user editing something on SF. However, regardless of whether force=true or false screenpop still show even if user edits something. Any comments?


  2. Once CTI adapter is enabled it appears on all SF pages. This potentially might cause race conditions such as multiple activity entries created or contacts or multiple screen pops since all SF pages are completely independent. We have some logic to avoid this but it may not be fully reliable. Are there any suggestions on how to handle this properly?

  3. Phone numbers search gives unreliable results. We have all numbers with country code in link, however, Salesforce site have all kinds of possible formattings, as a result for our own current corporate site:
    search 19057079700, results - none
    search +19057079700, results - none
    search 9057079700, results: 9057079700905-707-9700(905) 707-9700
    search (905)7079700, results: (905)7079700
    search 1 9057079700, results: 9057079700905-707-9700(905) 707-9700
    search 905 7079700, results: (905)7079700
    search 1 905 7079700, results: 905 7079700
    search 1(905)7079700: results: 905 70797001 (905) 7079700+1 (905) 7079700

    at this point we stick with searching of
     
    1(905)7079700 and creating new entries in format of
    +1 (905) 7079700. If there would be suggestions from SF on how phone numbers search should be handled properly it would be very helpful.

Thanks,

Bryan

Hi All,

I'm working with the task related to closing tabs in service cloud console.
I handle actions when user close window or browser tab using this part of code:

 

<script type="text/javascript">
	var validNavigation = false;
 
        function wireUpEvents() {
        
        //get current url
        var linkUrl = window.location.href;

         var dont_confirm_leave = 1; //set dont_confirm_leave to 1 when you want the user to be able to leave withou confirmation
          var leave_message = 'You sure you want to leave page: '+ linkUrl +'?'
          function goodbye(e) {
          //alert(linkUrl);
            if (!validNavigation) {
              if (dont_confirm_leave!==0) {
                if(!e) e = window.event;
                //e.cancelBubble is supported by IE - this will kill the bubbling process.
                e.cancelBubble = true;
                e.returnValue = leave_message;
                //e.stopPropagation works in Firefox.
                if (e.stopPropagation) {
                  e.stopPropagation();
                  e.preventDefault();
                }
                //return works for Chrome and Safari
                return leave_message;
              }
            }
          }
          window.onbeforeunload=goodbye;
         
          // Attach the event keypress to exclude the F5 refresh
          jQuery(document).bind('keypress', function(e) {
            if (e.keyCode == 116){
              validNavigation = true;
            }
          });
         
          // Attach the event click for all links in the page
          jQuery("a").bind("click", function() {
            validNavigation = true;
          });
         
          // Attach the event submit for all forms in the page
          jQuery("form").bind("submit", function() {
            validNavigation = true;
          });
         
          // Attach the event click for all inputs in the page
          jQuery("input[type=submit]").bind("click", function() {
            validNavigation = true;
          });
         
        }
         
        // Wire up the events as soon as the DOM tree is ready
        jQuery(document).ready(function() {
          wireUpEvents();
        });
	 </script>  

 

But I have problems with closing tabs in service console. Any ideas how I can handle this?

 

Regards,

Lukasz

 

 

[EDIT]

We can do this invoking Service Cloud Console Method:

function tabUnsavedJS(){
           sforce.console.setTabUnsavedChanges(true, displayResult);
      }

 function displayResult(result) {
             if (result.success) {
                 alert('Tab status has been successfully updated');
             } else {
                 alert('Tab status couldn’t be updated');
             }
      }

 After this Salesforce will show warning message when user will close concole tab,

Hi all. I'm very new to the CTI theme so please excuse me if the question is stupid.

I'm trying to understand how a random telephony system becomes able to communicate with a browser directly. I just don't get it. SalesForce claims that no CTI adapters needed anymore. OK.

Suppose I have an asterisk (3com, panasonic, whatever...) telephony system. Here goes incoming call. What happens next? Can it really send a message to browser (via websockets or what) ?

I doubt that telephony systems can "talk" JS even if there is an active connection from browser to the telephony system somehow. So I guess that there still must be a CTI adapter (middleware), that can talk to telephony system with some TAPI AND can talk to browser with JS through websockets for instanse. And that middleware should be written by me. But the benefit of such an adapter that it doesn't need to be installed at any agent's computer but can be hosted at a server. Right?

I just don't get it how can it work without any middleware and I can't find any explanation on theinternet.

Thanks.

  • May 29, 2013
  • Like
  • 3
We have two types of call center setup in Sales Force.
 
One using the demo adapter without CTI API and another using CTI API.  
The later version is passing different parameters to the adapter URL when we try to connect and debug the demo adapter. 
 
Need to know the information to expect from sales force and information to be sent to the sales force to establish a connection between sales force and soft phone. 
 
Any code, clarification on the same will be helpful.

I want to open a Visualforce Page in Service Cloud Console through CTI Adapter, but when I pass the page URL the page opens outside the console and not in a new tab in Service Console.

Hi,

 

Does anyone have any idea about this:

 

I have developed a phone panel using salesforce cti toolkit 4.01 and have a Visualforce page integrated to it. I am able to call the Visual force page from the Phone panel on a simple console but when I try the same thing on service cloud console the Visula force page does not open properly.

I need to open the Visual force page on the tab in service cloud console.

Please help.

 

Regards,

Shubha

 I am looking forward to integrate a virtual phone system within salesforce, which should be able to embed click-to-dial into salesforce. Does anyone have an idea on how to implement it?


I'm not sure when this functionality broke, the last time that I tested and observed that it was working was at Dreamforce. When running our CTI integration (that we wrote) in the service cloud console, we can no longer save custom call log attributes. If we switch to the normal HTML view, things work fine. 

Looking into the code, i see that in OnCallEnd, there is this if statement 

if (pLog->GetIsCtiWidgetMode()) { 
pLog->SetAttribute(KEY_SAVE_CALL_LOG, pLog->GetSaveOnEnd()); 
} else { 
GetAppExchange()->UpsertCallLog(pLog); 


so the KEY_SAVE_CALL_LOG attribute is correctly getting set on the next ui update 

What i assume is supposed to be happening is that KEY_SAVE_CALL_LOG gets set to true and then there is a UI message to the CTI adapter to save what is in memory for the call log 

(From UIHandleMessage) 
} else if (message==KEY_SAVE_CALL_LOG) { 
UISaveCallLog(parameters); 


But that message never is sent. I tried to hack it to force a save on the call end, but then we got double tasks created for the call.

We are experiencing the CTI adapter disconnects frequently.  The issue is very inconsistent.  The caller becomes unable to click the Answer button.  The Softphone disappears and the caller must click "Connect to CTI Adapter" button again. 

 

We are also noticing javascript page errors in the bottom left corner.

 

This is happening on the SimpliCTI Adapter version 4 as well as the Demo Adapter version 4.0.

  • April 05, 2012
  • Like
  • 0

I'm curious on how people using the CTI 4.0 adapter are deploying it when they convert the url from HTTP to HTTPS.  From what i've seen, in order to get it to work with SSL you have to use Httpcfg.exe to bind a cert to the port.  Seems that would be a deployment issue if you had to do that on all machines.  What challanges/workarounds have other people encountered?

Thanks

Hello,

 

I'm having difficulty with CTI Toolkit 4.0 with regard to Autologin:  I turn off autologin (to the phone system) as described at https://login.salesforce.com/help/doc/en/cti_login.htm, and then I close my browser.  When I restart the browser and log in to Salesforce again, I get unexpectedly automatically logged in to the phone system.  It didn't do this with Toolkit 3.0.

 

Does anybody else have this problem, or is able to offer help towards a solution, please?

 

Thanks,

 

James.

I am trying to implement the service console and am stuck on a button issue.

 

Currently  I have a custom "New Case" button that displays within a contact.  It uses javascript to auto-pop some fields based on user settings

Ex:

window.parent.location.href ="%2F500%2Fe?00N800000034wTE={!$User.Language_Support__c}&cas3_lkid={!Contact.Id}&00N80000003MDbe={!$User.Default_Country_cases__c}&retURL=%2F500%2Fo";

 

In testing within the console, this will load the case creation form outside the console.  To get around this, I am using the following code (some hard coding in place right now to eliminate variables):

 

{!REQUIRESCRIPT("/soap/ajax/22.0/connection.js")} 
if (typeof(srcUp) == 'function') 
{
} else {    
     window.parent.location.href ="%2F500%2Fe?00N800000034wTE={!$User.Language_Support__c}&cas3_lkid={!Contact.Id}&00N80000003MDbe={!$User.Default_Country_cases__c}&retURL=%2F500%2Fo";
}
Now the behavior is working in console (as well as if not in console), however I believe that because the button originates from a "Contact" page, that somehow the controller class is not changing to a case controller.  Even though the main page is laid out correctly, I am not getting the Knowledge or other side bars that should be there (getting contact one still).
Any suggestions on how to fix this, or a more elegant way of doing this would be appreciated.  The built in "New Case" works fine, but I need to pass some $user parameters into case fields during submission, all while remaining within console.

 

From the Case object, we have a custom button that creates an RMA with case and account information filled in and then opens the new RMA record. It works fine in the normal salesforce.com.

 

In the Service Cloud Console, we have Accounts, Cases, and RMA's. If we create new Cases or new RMA's from the Account, the new records get create in new subtabs to the account.

 

But if we launch our CaseToRMA page from the case in a Service Cloud Console subtab, it results in a whole new instance of saleforce.com running in the original case tab. What we want is for the new RMA to open in a new subtab under the account and to leave the case open.

 

CasetoRMA class

 

public class CaseToRMA {
    public Case c {get; set;}
    public RMA__c rma {get; set;}
public CaseToRMA () { c = [ select c.Id, c.CaseNumber, c.Account.ShippingCountry, c.Account.ShippingPostalCode, c.Account.ShippingState, c.Account.ShippingCity, c.Account.ShippingStreet, c.Account.Name, c.AccountId from Case c where id = : apexPages.currentPage().getParameters().get('id')];
List<Settings__c> cs = [ select RMA_Warehouse__c from Settings__c]; RMA__c rma = new RMA__c( ZipPostalCode__c = c.Account.ShippingPostalCode, Warehouse__c = (cs.size() > 0) ? cs[0].RMA_Warehouse__c : null, Street__c = c.Account.ShippingStreet, StreetTextArea__c = c.Account.ShippingStreet, RMADate__c = system.today(), Country__c = c.Account.ShippingCountry, City__c = c.Account.ShippingCity, Case__c = c.Id, Account__c = c.AccountId, AccountName__c = c.Account.Name, Reference__c = c.CaseNumber); }

public PageReference NewRMA() {
insert rma;
return new PageReference('/' + rma.id);
}

 

 

 

 VisualForce Page

<!-- Old way -->
<apex:page controller="CaseToRMA" action="{!newRMA}" >
<!-- Attempt at opening in a new tab
<apex:page controller="CaseToRMA" action="{!newRMA}" >
    <apex:includeScript value="/support/console/20.0/integration.js"/>
    <script type="text/javascript">
        function init() {
                //First find the ID of the primary tab to put the new subtab in
            sforce.console.getEnclosingPrimaryTabId(openSubtab);
        }
        var openSubtab = function openSubtab(result) {
                //Now that we've got the primary tab ID, we can open a new subtab in it
            var primaryTabId = result.id;
            sforce.console.openSubtab(primaryTabId , '/' + rma.id, false,
                rma.Name, null, null);
        };
    </script>
    <body onLoad="Init()"/>
-->
</apex:page>

 If someone has a working example of this, it would be great.