Méthodes permettant d'informer les services marketing d'événements externes ou personnalisés pour les déclencheurs et les cibles

Certains déclencheurs et cibles des activités marketing doivent détecter des événements. Vous pouvez créer un déclencheur ou une cible personnalisé qui détecte un événement personnalisé ou un événement qui se produit sur un système externe à HCL Commerce. Dans ce cas, vous pouvez appeler le service Process MarketingTrigger pour informer les services marketing que cet événement s'est produit. Vous pouvez appeler ce service de différentes façons, avec une adresse URL ou du code Java.

HCL Commerce peut détecter les événements qui correspondent à des demandes d'URL HCL Commerce ou des commandes HCL Commerce existantes (par exemple, lorsqu'un client consulte une page d'affichage des catégories ou qu'il s'enregistre). Dans ces cas-là, vous devez définir une règle de comportement dans le modèle d'élément de campagne pour détecter l'événement. Les services marketing traiteront l'appel du service Process MarketingTriggers.

HCL Commerce ne peut pas détecter les événements personnalisés ou les événements externes sans personnalisation. Un événement personnalisé dans la boutique en ligne peut correspondre à un client qui clique sur un lien personnalisé d'une page de magasin. Un événement externe peut correspondre à un client qui examine un produit. Pour détecter les événements personnalisés ou externes, vous devez choisir l'une des méthodes suivantes pour appeler le service Process MarketingTriggers. Lorsque les services marketing traitent l'appel de service, ils transmettent le client au nouvel élément du flux d'activités ou enregistrent le comportement défini dans l'élément de campagne.

Pour informer les services marketing de l'événement personnalisé ou externe, vous devez transmettre aux services marketing le nom de votre événement à l'aide du paramètre DM_ReqCmd dans l'appel de service Process MarketingTriggers.

  • Pour un déclencheur ou une cible personnalisé, la valeur du paramètre DM_ReqCmd doit correspondre au nom de commande spécifié dans la définition de règle de comportement de votre élément de déclencheur ou de campagne cible personnalisé.
  • Si vous détectez un événement pour le déclencheur Attente d'événement, la valeur du paramètre DM_ReqCmd doit correspondre au nom d'événement entré dans la vue de propriétés du déclencheur Attente d'événement dans l'outil Marketing du Management Center.

Vous pouvez inclure tout autre paire nom-valeur dans l'appel de service Process MarketingTriggers.

Méthodes d'appel du service Process MarketingTrigger Détails
Via une URL

Appelez l'URL MarketingTriggerProcessServiceEvaluate ou AjaxMarketingTriggerProcessServiceEvaluate.

Indiquez des URL complètes, comme illustré dans cet exemple d'appel de service :

http://hostname/webapp/wcs/stores/servlet/AjaxMarketingTriggerProcessServiceEvaluate?
DM_ReqCmd=CustomFraudDetectedTriggerEvent&eventType=CreditCard&storeId=10001&storeId=10001 
Remarque :
Si l'URL est appelée à partir d'une page de magasin, storeId se trouve déjà sur l'URL et n'a pas besoin d'être ajouté. Si l'URL provient d'un site externe, storeId est requis.

Pour l'URL MarketingTriggerProcessServiceEvaluate, incluez une valeur d'URL de réacheminement, comme illustré dans cet exemple d'appel de service :

http://hostname/webapp/wcs/stores/servlet/MarketingTriggerProcessServiceEvaluate?
DM_ReqCmd=CustomFraudDetectedTriggerEvent&eventType=CreditCard&
URL=TopCategoriesDisplay?storeId=10001&catalogId=10001
A l'aide d'un code Grâce à la méthode MarketingFacadeClient evaluateMarketingTrigger(Map parameters).

Le code suivant est un exemple d'appel de service :

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

Grâce à la méthode MarketingFacadeClient processMarketingTrigger(String action, Hashtable nvps, String triggerParameters).

Le code suivant est un exemple d'appel de service :

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

Pour plus d'informations sur ces méthodes, voir MarketingFacadeClient.

Détermination de l'ID personnalisation du client pour un événement externe

Les activités marketing requièrent l'ID personnalisation du client. Si l'événement se produit sur un système externe qui ne peut pas transmettre l'ID personnalisation du client, vous devrez mapper les informations connues du système externe à l'ID personnalisation du client dans HCL Commerce. Pour effectuer ce mappage, fournissez une implémentation de MarketingServicesTaskCmd qui implémente la méthode getPersonalizationId. Cette méthode mappe l'identificateur externe du client à l'identificateur HCL Commerce du client (personalizationId). Enregistrez ensuite la commande de tâche dans la table CMDREG.

Le code suivant est un exemple de commande de tâche à cet effet. Dans cet exemple, le système externe dispose du numéro de téléphone du client. Nous supposons que le client est enregistré dans le magasin HCL Commerce et qu'il a communiqué le même numéro de téléphone. Cette méthode recherche l'ID personnalisation du client à partir du numéro de téléphone indiqué lorsque le service Process MarketingTrigger est appelé et inclut le paramètre 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;
	}
}