Initializing the SDK
This method initializes the SDK.
//Basic initializer, the default minimumLogLevel will be .info.
LPABCSDK.initialize()
//Initializer with explicit log level
LPABCSDK.initialize(minimumLogLevel: .trace)
//For disabling logs use LPABCLogLevel.none
LPABCSDK.initialize(minimumLogLevel: .none)
//Use 'eventSubscription' for passing the events 'LPABCEvent' you wish to get a callback notification for.
//If not explicitly stated, the default would be subscribing to all events.
LPABCSDK.initialize(minimumLogLevel: .none, eventSubscription: [.newConversation])
//To disable events notification use 'LPABCEvent.noEvents'
LPABCSDK.initialize(eventSubscription: LPABCEvent.noEvents)
Update the SDK with Incoming CIM
Upon an agent sending a Custom Interactive Message (CIM) to the consumer, this method will update the SDK with a payload that will enable SDE reporting to Conversational Cloud.
func update(with conversation: MSConversation, message: MSMessage? = nil, abcsdkParams: ABCSDKParams? = nil)
-
message
sould be used where available and returned by the override method. -
ABCSDKParams
is optional and should be used for passing references to the sdk. Should be used indidBecomeActive
anddidSelect
.
Should be implemented from these override functions in the iMessage app extension MSMessagesAppViewController
:
didBecomeActive(with conversation: MSConversation)
didSelect(_ message: MSMessage, conversation: MSConversation)
didReceive(_ message: MSMessage, conversation: MSConversation)
See step 6 of Installation for more.
Create SDEs
When you create one or more SDEs, they get added to a dedicated stack.
The createSDE
function generates and calls back an SDEBase object with a template of the relevant SDE type as its property, which then needs to implement a 'setup' function.
Pass in the SDE type that you want, and it will return an SDEBase object containing an instantiated property of the relevant SDE template object.
All dependent schema objects could be initiated and passed in as arguments to the SDE setup
Inside of the completion callback, on the sde setup method, it is required to define the relevant params to initiate the sde.
Example 1:
lpabcsdk.createSDE(sdeType: .visitorError) { (sdeBase) in
sdeBase.visitorError?.setup(
contextId: "<CONTEXID>",
message: "<MESSAGE>",
code: "<CODE>",
level: 0,
resolved: true
)
}
Example 2:
lpabcsdk.createSDE(sdeType: .cartUpdate) { (sdeBase) in
//Create a product:
let product = SDEProduct.init(
name: "<>",
category: "<>",
sku: "<>",
price: 100,
quantity: 3
)
//Setup the sde:
sdeBase.cartUpdate?.setup(
total: 100,
currency: "<>",
numItems: 1,
products: [product]
)
}
The SDE setup
call could also be created using 'UnifiedLooseSDE' protocol, as json string or Dictionary object:
Example:
sdeBase.setupWithJson("{\"type\":\"ctmrinfo\"}")
sdeBase.setupWithJson(["type":"cart"])
Auto Send Aggregated Stack
The optional aggregate
parameter, when set to true, will add the sde to the aggregateStack which will get sent automatically once the aggregation stack timeout is met. Default is 5 sec but could be anything between 1-15 sec. See setAggregatedInterval(interval:)
Example:
lpabcsdk.createSDE(sdeType: .customerInfo, aggregate: true) { (sdeBase) in
sdeBase.customerInfo?.setup(
cstatus: "<cstatus>",
ctype: "<ctype>",
balance: 10,
currency: "<currency>",
socialId: "<socialId>",
imei: "<imei>",
userName: "<userName>",
companySize: 30,
companyBranch: "<companyBranch>",
accountName: "<accountName>",
role: "<role>",
loginStatus: 0,
storeZipCode: "<storeZipCode>",
storeNumber: "<storeNumber>",
lastPaymentDate: SDEDate.init(
day: 23,
month: 4,
year: 2019
),
registrationDate: nil
)
}
Sending SDE
In order to manually send the SDE Stack, use the following:
lpabcsdk.sendSDEStack()
// or using completion callbacks:
lpabcsdk.sendSDEStack(onSuccess: { (success) in
// success closure
}) { (error) in
// error closure
}
You can use isCacheLoaded
in order to get the SDK's cache state, which is retrieveable via CIM (per each new conversation), and is required for enabling SDE reporting.
Aggregated SDE Stack Timeout
This will setup a timeout interval for auto sending the aggregated SDE stack (optional). Default is 5 seconds and Max is 15.
lpabcsdk.setAggregatedInterval(interval:15)
See the Auto Send aggregated optional parameter in Create SDEs.
Aggregated SDE Stack Send Completion Closure
If you want to execute code whenever the Aggregated SDE Stack auto send completes, implement the aggregatedSDEStackCompletion
closure:
lpabcsdk.aggregatedSDEStackCompletion = { completion, error in
// debug code
}
Event Callback
Some consumer actions can trigger meaningful events (eg. a new conversation starts, secure form completion, etc.). If you would like to act upon, or send an SDE once a subscribed event has been triggered, you can do so by implenting the abcEventCallback
closure.
lpabcsdk.abcEventCallback = { event in
// implement
}
-
LPABCEvent
- Indicates the type of event that is being called back from the abcEventCallback. -
abcEventCallback
- Invoked when a qualifying subscribed event is met, and callback the type of that event
You can set the desired SDEs to express your custom reporting for the event triggered.
Supported Event Types:
-
newConversation
: Receiving an incoming (agent to consumer), new first time CIM — per conversation. -
secureForm
: Receiving an incoming (agent to consumer) secure form — see the Secure Form documentation.
Example:
lpabcsdk.abcEventCallback = { eventType in
switch eventType {
case .newConversation:
// Create and send desired SDE
break
case .secureForm(.submitted):
// Create and send desired SDE
break
case .custom:
//Accsess your custom payload embedded in CIM URL.
break
}
}
Reply CIM from Consumer to Agent
An agent can recieve back from the consumer a Custom Interactive Message with contextual text. This text can be displayed to the agent in the Agent Workspace.
For example, if the consumer selects a product inside of your iMessage app, the Agent can see which product they selected via the textContext
of this method.
// create MSMessage object
lpabcsdk.appendReplayMessagePayload(message: MSMessage, textContext: String)
// send MSMessage object
Pass in the initiated MSMessage object, and the desired textual String.
Synchronize SDK (Host app target feature)
When called, the SDK will explicitly sync with the latest cache version.
The best practice will be to add this to your AppDelegate/ applicationWillEnterForeground, in order to use the monitoring ability when the host app enters the foreground.
An iMesssage extension target will have no effect calling this function.
func applicationWillEnterForeground(_ application: UIApplication) {
LPABCSDK.synchronize()
}