on 08-25-2015 12:34 PM
Hello Community,
In our project we have a Customer Service Management scenario, with the integration between a third party/legacy CTI environment and a Cloud for Customer solution. In this CTI->C4C integration we may need to pass to C4C a subset of custom information available in the CTI.
Via the CTI Client Adapter simulation tool, we noticed that the inbound call can pass a set of Custom fields as URL parameters. We show a picture of those fields in the simulation tool here below, and how those fields propagate in the Live Activity Pane:
Unfortunately, if I check those fields in the SDK UI Component for the Live Activity Pane (file: CTI_Shelf_QAF.QA), they don't seem to be bound to the Activity BO Model:
Furthermore, we noticed that the Outport OpenSearchScreen is the only one which can use that list of fields, but this outport cannot be reused for binding an Embedded Component to the UI Pane:
Is it possible in any way to reuse those information in C4C?
Thanks a lot for your collaboration.
All the best,
Davide
Hello,
Thanks to we found a Solution for this requirement. The suggested approach has been to define a PDI Enhancement Exit which could help us to handle the Customer extension fields.
Unfortunately, even though the fields are now available in the ABSL code, any Object you will import or access in the script scope will be read only. That means that the information cannot be apparently saved anywhere in the C4C Database.
The solution we developed in order to solve this workaround is to use a SOAP WebService Communication Arrangement, which could easily store information in the C4C Database, even if the Business Objects belong to a different Deployment Unit.
The Solution can be composed in the following steps:
Build a Business Object for the C4C Database with the following Structure:
import AP.Common.GDT as apCommonGDT;
businessobject CTI_CustomFields_BO{
[AlternativeKey] elementActivityUUID:UUID;
element ActivityID:BusinessTransactionDocumentID;
element ANI:LANGUAGEINDEPENDENT_EXTENDED_Text;
element DNIS:LANGUAGEINDEPENDENT_EXTENDED_Text;
elementCustomField1:LANGUAGEINDEPENDENT_EXTENDED_Text;
elementCustomField2:LANGUAGEINDEPENDENT_EXTENDED_Text;
elementCustomField3:LANGUAGEINDEPENDENT_EXTENDED_Text;
elementCustomField4:LANGUAGEINDEPENDENT_EXTENDED_Text;
elementCustomField5:LANGUAGEINDEPENDENT_EXTENDED_Text;
elementCustomField6:LANGUAGEINDEPENDENT_EXTENDED_Text;
}
Generate a full UI Screen Thing-Type scenario for the BO, with in particular the WorkCenter Floorplan and the WorkCenterView:
Generate a SOAP WebService on the Business Object. The WS should have just the Create operation:
And should be attached to your custom WorkCenter View for authorization reasons:
Generate an External WebService Integration component on the created WS:
Create a Communication Scenario which collects both the WS and its Proxy:
On the Administration WorkCenter in C4C, create a Communication System for the local C4C:
Create then a Communication Arrangement that could connect the Proxy and the WS together:
Implement the Enhancement Point on the C4C CTI Call Wrapper (technical name: CTICallWrap-upActions😞
import AP.Common.GDT;
var result: LANGUAGEINDEPENDENT_MEDIUM_Description;
var wsRequest : CTI_CustomFields_ProxyClient_EWSI.Create.Request;
var bpID = InputData.BusinessPartnerID;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.ActivityUUID.content = InputData.PhoneActivityUUID.content.ToString();
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.DNIS= InputData.DNIS;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.ANI= InputData.ANI;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.CustomField1= InputData.CustomField1;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.CustomField2= InputData.CustomField2;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.CustomField3= InputData.CustomField3;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.CustomField4= InputData.CustomField4;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.CustomField5= InputData.CustomField5;
wsRequest.CTI_CustomFields_BOMainViewCreateRequest_sync.CTI_CustomFields_BO.CustomField6= InputData.CustomField6;
var wsResponse = CTI_CustomFields_ProxyClient_EWSI.Create(wsRequest, bpID, "CTI_CommScenario");
return result;
In order to test this solution, your available tools are the following:
Please let me know here below for any further observation about the topic. I will be always available for them.
Cheers,
Davide
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Davide,
Thanks for the Wonderful blog. Our project has a requirement to capture a custom field from CTI solution in C4C in Activity work centre, so that a ticket can be created based on the Custom field instead of phone number because an employee can call to CTI support team from any phone number not necessarily from the phone number stored in Employee Master. We tried to simulate call by sending Employee ID of the employee in CTI adapter instead of employee's phone stored in Employee master data. The C4C tenant is not able to recognize employee details based on Employee ID. Currently from Simulator we came to know that CTI Adapter can display callers data in C4C based on Phone Number or the Account ID. Kindly provide your valuable inputs for the above project requirement we have.
Thanks & Regards
Vijay S B
Hi Vijay,
did you try to implement the Enhancement Point CTICallWrap-upActions?
What happens there if you try to acquire the User information at runtime by the following lines in the Enhancement Point?
import AP.PC.IdentityManagement.Global;import AP.FO.BusinessPartner.Global;
var user = Identity.Retrieve(Context.GetCurrentIdentityUUID());
var employee = Employee.Retrieve(user.BusinessPartnerUUID);
Please let me know.
Cheers,
Davide
Hi Davide,
Thanks for the response. The above code which you shared with us is capturing service agent details who is responsible for generating ticket but our requirement is to capture the details of Employee who calls service agent for support based on the caller Employee ID. Please let us know is there any way to capture the above Employee details. Thanks in Advance .
Thanks & Regards
Vijay S B
Hi Davide,
Thank you for the lovely blog.
We have a requirement to send the value of Custom Field 1 from Live Activity which would hold the Service Category to the Service Category field of Ticket when agent decides to click on "New Ticket" from Live Activity screen.
We've implemented the Enhancement Point CTICallWrap-upActionsAny but any object we access in the script scope is read only. Due to this, we are struggling to pass this value to the Ticket.
Any pointers on how this could be achieved?
Best Regards,
Preethi Santhanam
Hi,
is there a way to get these CustomFields and pass to ticket (eg IVR or DNIS and pass to Ticket)?
eg. when creating ticket out of incoming phone call by CC agent - then agent creates Ticket manually in Live Activity Center, and we would like to have one of Custom fields to be passed by absl to Ticket?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hello Davide,
thanks for your infrormation,
We need to do the customer search based on ExternalID that is Custom field that we have created,
Like the below:
We created Enhancement Implementation, But I can not access to my field,
I need to get the customer id ,
but if I want to use Retrieve, PhoneActivityUUID is the only UUID that exist!
var c= BusinessPartner.Retrieve(InputData.PhoneActivityUUID)
Also if I want to use Query, I have a problem. I dont have InputData option!
Can you help me about this?
Thanks
Sin
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Sin,
You need to enable this field using Adaption mode to see the fields. This is a two step process, so you select adapation mode, then click Personalise from settings on Live Activity pane and then click adaptation mode again.
Once you add the fields, you should be able to see the additional fields.
Best Regards,
Preethi Santhanam
Hi Davide,
I followed the steps given in the blog to capture the custom field values of Live Activity in a Custom BO. In the step 8 you have mentioned to create an enhancement implementation to place the script logic.On top of which Business object I need to create this enhancement point.I am not able to find
anything named as CTICallWrap-upActions
Kindly share me the steps which am looking.Thanks in advance.
Regards,
Navin
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Navin,
yes I remember it wasn't that easy to find. Here I note some steps:
If there is anything you would like to clarify, please let us know.
Kind regards,
Davide
Hi Davide,
Thanks for elaborating the process.I am able to find the Enhancement point and i have added the ABSL code which you have provided.But while testing am getting a webservice internal error (302).
I have attached the screen shots of my solution with all the details.Please help me to sort out this issue.
ABSL Code Used:
Communication Scenario:
communication arrangement:
Please go through the screen shots and kindly help us to fix this.Thanks in advance.
Regards,
Navin
Hi Navin,
yes imho I think that as long as your Comm. Arrangement works in the same system, you can keep the Authentication method as Basic with a System/Communication User.
If your network policies and requirements state to have Authentication methods as SSL only, it's the case to raise an incident to SAP Support.
Cheers,
Davide
User | Count |
---|---|
84 | |
25 | |
12 | |
9 | |
6 | |
6 | |
5 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.