Sending Interactions

Besides sending automatic Interactions to Medallia Experience Orchestration, you can also send Interactions programmatically. Programmatic Interactions can be sent to only a preconfigured Interaction path and with defined Properties.

Important: The Medallia Experience Orchestration SDK does not trigger programmatic Interactions if there is no an associated Activity Capture, Attribute Capture or Optimization Point added for them.

See in the examples below how you can send an Interaction request, Interaction request with Properties, and how to retrieve responses for those requests.

Tip: When sending Interaction requests programmatically, ensure the Interaction is a fully qualified URI, containing the scheme, authority, and path. For example: android://touchpoint/interaction.

Sending an Interaction request

Send an Interaction request programmatically by calling the mxoSendInteraction Kotlin top-level function in a Coroutine or the MedalliaMXO.sendInteraction Java method, as shown below:

Kotlin
Java
import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import java.net.URI scope.launch { mxoSendInteraction { interaction = MXOInteraction(URI("/InteractionPath")) } }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import java.net.URI; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/InteractionPath"))) .build(); try { MedalliaMXO.sendInteraction(sendInteractionRequest); } catch (Exception e) { e.printStackTrace(); }

To capture errors, set the throwErrors parameter to true and wrap the method in a try/catch block, as shown below:

Kotlin
Java
import com.medallia.mxo.MXOErrorApi import com.medallia.mxo.MXOErrorSdk import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import java.net.URI import android.util.Log import android.content.ContentValues.TAG scope.launch { try { mxoSendInteraction(throwErrors = true) { interaction = MXOInteraction(URI("/InteractionPath")) } } catch (error: MXOErrorSdk) { Log.e(TAG, "SDK Error: ${error.errorMessage}") } catch (error: MXOErrorApi) { Log.e(TAG, "Api Error: ${error.errorMessage}") } }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import com.medallia.mxo.interactions.MXOInteractionResponse; import com.medallia.mxo.MXOErrorApi; import com.medallia.mxo.MXOErrorSdk; import java.util.concurrent.ExecutionException; import java.net.URI; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/InteractionPath"))) .build(); try { MedalliaMXO.sendInteraction(true, sendInteractionRequest); } catch (ExecutionException e) { e.printStackTrace(); } catch (MXOErrorApi mxoErrorApi) { mxoErrorApi.printStackTrace(); } catch (MXOErrorSdk mxoErrorSdk) { mxoErrorSdk.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }

This sends a POST request to Medallia Experience Orchestration. Only the Tid from the response is used by the SDK; all other response objects are ignored.

Tip: When in Java, make sure to perform the interaction request in a thread that is not the Main thread.

Sending an Interaction request and retrieve the response

Send an Interaction request programmatically, access its response, and then process that response by calling the mxoSendInteraction Kotlin top-level function in a Coroutine or the MedalliaMXO.sendInteraction Java method and enqueue with a callback, as shown below:

Kotlin
Java
import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import com.medallia.mxo.process import java.net.URI scope.launch { val response = mxoSendInteraction { interaction = MXOInteraction(URI("/InteractionPath")) } response?.process() }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import com.medallia.mxo.interactions.MXOInteractionResponse; import java.net.URI; import android.os.Build; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/interactionPath"))) .build(); try { MXOInteractionResponse response; response = MedalliaMXO.sendInteraction(sendInteractionRequest).get(); MedalliaMXO.process(response); } catch (Exception e) { e.printStackTrace(); }

To capture errors, set the throwErrors parameter to true and wrap the method in a try/catch block, as shown below:

Kotlin
Java
import android.content.ContentValues.TAG import android.util.Log import com.medallia.mxo.MXOErrorApi import com.medallia.mxo.MXOErrorSdk import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import com.medallia.mxo.process import java.net.URI scope.launch { try { val response = mxoSendInteraction(throwErrors = true) { interaction = MXOInteraction(URI("/InteractionPath")) } response?.process() } catch (error: MXOErrorSdk) { Log.e(TAG, "SDK Error: ${error.errorMessage}") } catch (error: MXOErrorApi) { Log.e(TAG, "Api Error: ${error.errorMessage}") } }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import com.medallia.mxo.interactions.MXOInteractionResponse; import com.medallia.mxo.MXOErrorApi; import com.medallia.mxo.MXOErrorSdk; import java.net.URI; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/InteractionPath"))) .build(); try { MXOInteractionResponse response; response = MedalliaMXO.sendInteraction(true, sendInteractionRequest).get(); MedalliaMXO.process(response); } catch (ExecutionException e) { e.printStackTrace(); } catch (MXOErrorApi mxoErrorApi) { mxoErrorApi.printStackTrace(); } catch (MXOErrorSdk mxoErrorSdk) { mxoErrorSdk.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }

This sends a POST request to Medallia Experience Orchestration.The response can be passed to the MedalliaMXO.process method, as shown above. This method returns the response to the SDK to process, attaching any Activity capture, Attribute capture, or Optimize instructions to the interaction.

Tip: When in Java be sure to perform the Interaction request in a thread that is not the Main thread.

Sending an Interaction request with Properties

To send an Interaction request with Properties, call the mxoSendInteraction Kotlin top-level function in a Coroutine or the MedalliaMXO.sendInteraction Java method passing an Interaction path and array of defined Properties, as shown below:

Kotlin
Java
import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import java.net.URI scope.launch { mxoSendInteraction { interaction = MXOInteraction(URI("/InteractionPath")) properties = myProperties } }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import java.net.URI; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/InteractionPath"))) .properties(myProperties) .build(); try { MedalliaMXO.sendInteraction(sendInteractionRequest); } catch (Exception e) { e.printStackTrace(); }

To capture errors, set the throwErrors parameter to true and wrap the method in a try/catch block, as shown below:

Kotlin
Java
import android.content.ContentValues.TAG import android.util.Log import com.medallia.mxo.MXOErrorApi import com.medallia.mxo.MXOErrorSdk import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import java.net.URI scope.launch { try { mxoSendInteraction(throwErrors = true) { interaction = MXOInteraction(URI("/InteractionPath")) properties = myProperties } } catch (error: MXOErrorSdk) { Log.e(TAG, "SDK Error: ${error.errorMessage}") } catch (error: MXOErrorApi) { Log.e(TAG, "Api Error: ${error.errorMessage}") } }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import com.medallia.mxo.MXOErrorApi; import com.medallia.mxo.MXOErrorSdk; import java.net.URI; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/InteractionPath"))) .properties(myProperties) .build(); try { MedalliaMXO.sendInteraction(true, sendInteractionRequest); } catch (ExecutionException e) { e.printStackTrace(); } catch (MXOErrorApi mxoErrorApi) { mxoErrorApi.printStackTrace(); } catch (MXOErrorSdk mxoErrorSdk) { mxoErrorSdk.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }

This sends a POST request to Medallia Experience Orchestration. Only the tid from the response will be used by the SDK; all other response objects are ignored.

Sending an Interaction request with Properties and retrieve the response

To send an Interaction request with Properties and retrieve the response, call the mxoSendInteraction Kotlin top-level function in a Coroutine or the the MedalliaMXO.sendInteraction Java method passing an Interaction path and array of defined Properties, as shown below:

Kotlin
Java
import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import com.medallia.mxo.process import java.net.URI scope.launch { val response = mxoSendInteraction { interaction = MXOInteraction(URI("/InteractionPath")) properties = myProperties } response?.process() }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import com.medallia.mxo.process; import java.net.URI; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/InteractionPath"))) .properties(myProperties) .build(); try { MXOInteractionResponse response = MedalliaMXO.sendInteraction(sendInteractionRequest).get(); MedalliaMXO.process(response); } catch (Exception e) { e.printStackTrace(); }

To capture errors, set the throwErrors parameter to true and wrap the method in a try/catch block, as shown below:

Kotlin
Java
import android.content.ContentValues.TAG import android.util.Log import com.medallia.mxo.MXOErrorApi import com.medallia.mxo.MXOErrorSdk import com.medallia.mxo.interactions.MXOInteraction import com.medallia.mxo.mxoSendInteraction import com.medallia.mxo.process import java.net.URI scope.launch { try { val response = mxoSendInteraction(throwErrors = true) { interaction = MXOInteraction(URI("/InteractionPath")) properties = myProperties } response?.process() } catch (error: MXOErrorSdk) { Log.e(TAG, "SDK Error: ${error.errorMessage}") } catch (error: MXOErrorApi) { Log.e(TAG, "Api Error: ${error.errorMessage}") } }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.interactions.MXOInteraction; import com.medallia.mxo.interactions.MXOInteractionRequest; import com.medallia.mxo.MXOErrorApi; import com.medallia.mxo.MXOErrorSdk; import java.net.URI; final MXOInteractionRequest sendInteractionRequest = new MXOInteractionRequest.Builder() .interaction(new MXOInteraction(URI.create("/InteractionPath"))) .properties(myProperties) .build(); try { MXOInteractionResponse response = null; response = MedalliaMXO.sendInteraction(true, sendInteractionRequest).get(); MedalliaMXO.process(response); } catch (ExecutionException e) { e.printStackTrace(); } catch (MXOErrorApi mxoErrorApi) { mxoErrorApi.printStackTrace(); } catch (MXOErrorSdk mxoErrorSdk) { mxoErrorSdk.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }

This sends a POST request to Medallia Experience Orchestration.

The response can be passed to the process method as a parameter as shown above. This method returns the response to the SDK to process, attaching any capture, track or optimize instructions to the Interaction.