Formas de informar a los servicios de marketing acerca de sucesos externos o personalizados para desencadenantes y destinos

Determinados desencadenantes y destinos de las actividades de marketing deben detectar sucesos. Si lo desea, puede crear un desencadenante o destino personalizado que detecte un suceso personalizado, o bien un suceso que se produce en un sistema que es externo a HCL Commerce. En tal caso, puede llamar al servicio Process MarketingTrigger para informar a los servicios de marketing sobre el suceso que ha tenido lugar. Puede llamar a este servicio de varias maneras, utilizando un URL o un código Java.

HCL Commerce puede detectar sucesos que coinciden con solicitudes de URL de HCL Commerce o mandatos de HCL Commerce existentes, como cuando un cliente visualiza una página de visualización de categorías o registros. En estas situaciones, debe definir solamente una regla de comportamiento en la plantilla de elemento de campaña para detectar el suceso. Los servicios de marketing manejan la llamada al servicio Process MarketingTriggers.

HCL Commerce no puede detectar sucesos personalizados ni sucesos externos sin personalización. Un suceso personalizado en el escaparate puede ser cuando un cliente pulsa un enlace personalizado en una página de la tienda. Un suceso externo puede ser cuando un cliente revisa un producto. Para detectar sucesos personalizados o externos, debe elegir uno de los métodos siguientes para llamar al servicio Process MarketingTriggers. Cuando los servicios de marketing procesan la llamada de servicio, pasan el cliente al siguiente elemento del flujo de la actividad o registran el comportamiento definido en el elemento de campaña.

Para informar a los servicios de marketing acerca del suceso personalizado o externo, pase a los servicios de marketing el nombre del suceso utilizando el parámetro DM_ReqCmd en la llamada al servicio Process MarketingTriggers.

  • Para un desencadenante o destino personalizado, el valor del parámetro DM_ReqCmd debe coincidir con el nombre especificado en la definición de la regla de comportamiento para su elemento de campaña de desencadenante o destino personalizado.
  • Si detecta un suceso para el desencadenante Esperar suceso, el valor del parámetro DM_ReqCmd debe coincidir con el nombre de suceso que se ha especificado en la vista de propiedades para el desencadenante Esperar suceso en la herramienta Marketing del Management Center.

Puede incluir cualquier otro par de nombre-valor en la llamada al servicio Process MarketingTriggers.

Formas de llamar al servicio Process MarketingTrigger Detalles
A través de un URL

Llame al URL MarketingTriggerProcessServiceEvaluate o al URL AjaxMarketingTriggerProcessServiceEvaluate.

Proporcione URL completos, como se muestra en seta llamada de servicio de ejemplo:

http://hostname/webapp/wcs/stores/servlet/AjaxMarketingTriggerProcessServiceEvaluate?
DM_ReqCmd=CustomFraudDetectedTriggerEvent&eventType=CreditCard&storeId=10001&storeId=10001 
Nota:
Si el URL se llama desde una página de la tienda, storeId ya se encuentra en el URL y no es necesario añadirlo. Si el URL corresponde a un sitio externo, storeId es necesario.

Para el URL MarketingTriggerProcessServiceEvaluate, incluya un valor de URL de redirección, como se muestra en esta llamada de servicio de ejemplo:

http://hostname/webapp/wcs/stores/servlet/MarketingTriggerProcessServiceEvaluate?
DM_ReqCmd=CustomFraudDetectedTriggerEvent&eventType=CreditCard&
URL=TopCategoriesDisplay?storeId=10001&catalogId=10001
Mediante código A través del método MarketingFacadeClient evaluateMarketingTrigger(Map parameters).

El código siguiente muestra un ejemplo de la llamada al servicio:

    Map parameterMap = new HashMap();
    parameterMap.put("DM_ReqCmd", "MyCustomTrigger");
    parameterMap.put("param1", "I");
    parameterMap.put("param2", "B");
    parameterMap.put("param3", "M");
    marketingFacadeClient.evaluateMarketingTrigger(parameterMap);
O

A través del método MarketingFacadeClient processMarketingTrigger(String action, Hashtable nvps, String triggerParameters).

El código siguiente muestra un ejemplo de la llamada al servicio:

marketingFacadeClient.processMarketingTrigger(
    MarketingFacadeConstants.PROCESS_VERB_ACTION_EVALUATE, 
    null, 
    MarketingUtilClient.createTriggerParametersString(
        null, 
        "CustomFraudDetectedTriggerEvent", 
        "eventType=CreditCard", 
        null, 
        null)
);

Para obtener más información sobre estos métodos, consulte MarketingFacadeClient.

Determinar el ID de personalización del cliente para un suceso externo

Las actividades de marketing requieren el ID de personalización del cliente. Si el suceso tiene lugar en un sistema externo que no puede pasar el ID de personalización del cliente, debe correlacionar la información que es conocida en el sistema externo con el ID de personalización del cliente en HCL Commerce. Para llevar a cabo esta correlación, proporcione una implementación de MarketingServicesTaskCmd que implemente el método getPersonalizationId. Este método correlaciona desde el identificador externo del cliente hasta el identificador de HCL Commerce para el cliente (personalizationId). A continuación, registre el mandato de tarea en la tabla CMDREG.

El código siguiente muestra un ejemplo de un mandato de tarea para este fin. En este ejemplo, el sistema externo tiene el número de teléfono del cliente. Se asume que el cliente está registrado en la tienda de HCL Commerce y se le ha proporcionado el mismo número de teléfono. Este método encuentra el ID de personalización del cliente en base al número de teléfono proporcionado cuando se invoca el servicio Process MarketingTrigger e incluye el parámetro phone.

public class MyCompanyMarketingServicesTaskCmdImpl 
extends MarketingServicesTaskCmdImpl 
implements MarketingServicesTaskCmd {
	
	/**
	 * IBM copyright notice field.
	 */
	public static final String COPYRIGHT = com.ibm.commerce.copyright.IBMCopyright.SHORT_COPYRIGHT;
	/**
	 * The name of this class.
	 */
	public  static final String CLASSNAME = "com.mycompany.commerce.marketing.dialog.util.MyCompanyMarketingServicesTaskCmdImpl";
	private static final Logger LOGGER = LoggingHelper.getLogger(MyCompanyMarketingServicesTaskCmdImpl.class);
	
	/**
	 * This method will find a customer's personalization ID based on the provided phone number.
	 * @param triggerParameters: The trigger parameters passed in the service call. This should
	 * include a parameter named phone. The external system has the customer's phone number,
	 * and it is assumed that the customer has provided the same number in their HCL Commerce 
	 * account. This method maps the customer's phone number to their personalization ID.
	 * @return: The customer's personalization ID.
	 */	
	public String getPersonalizationId(StringBuffer triggerParameters) {
		final String METHOD_NAME = "getPersonalizationId";
		if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
			LOGGER.entering(CLASSNAME, METHOD_NAME);
		}
		String pznId = null;
		try {
			String phoneNumber = MarketingUtil.getDataFromTriggerParametersString(triggerParameters.toString(), "phone");
			if (LoggingHelper.isTraceEnabled(LOGGER)) {
				LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "phoneNumber:" + phoneNumber);
			}
			if (phoneNumber != null) {
				
				List pznIdList = SessionBeanHelper.lookupSessionBean(ServerJDBCHelperBean.class).executeParameterizedQuery( 
                              "select users.personalizationid from users, address where users.users_id = address.member_id and address.phone1 = ?", 
                              new Object[]{ phoneNumber } );
				if (LoggingHelper.isTraceEnabled(LOGGER)) {
					LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "pznIdList:" + pznIdList);
				}
				if (pznIdList != null && pznIdList.size() == 1) {
					List pznIdEntry = (List)pznIdList.get(0);
					pznId = pznIdEntry.get(0).toString();
				}
				if (LoggingHelper.isTraceEnabled(LOGGER)) {
					LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "pznId:" + pznId);
				}
			}
		} catch (Exception e) {
			if (LoggingHelper.isTraceEnabled(LOGGER)) {
				LOGGER.logp(Level.FINE, CLASSNAME, METHOD_NAME, "Exception:" + e);
			}
			e.printStackTrace();
		}		
		if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
			LOGGER.exiting(CLASSNAME, METHOD_NAME);
		}	
		return pznId;
	}
}