Activité de workflow de SMS entrants pour une infrastructure de midsourcing
Limites
- Ce cas d'utilisation ne s'applique qu'à l'instance Marketing sur laquelle vous collectez des données inSMS depuis la ou les instances Midsourcing.
- Ne mettez pas en œuvre ce cas d'utilisation sur l'instance Midsourcing.
- Un seul workflow personnalisé par compte Midsourcing externe.
Implémentation
-
Ajoutez une extension au
nms:inSMS
schéma sur votre instance Marketing. L’extension ajoute un nouvel attribut au schémanms:inSMS
et effectue le suivi de la clé primaire de l'enregistrement inSMS provenant de l'instance Midsourcing.<element img="nms:miniatures/mini-sms.png" label="Incoming SMS" labelSingular="Incoming SMS" name="inSMS"> <dbindex name="midInSMSId" unique="false"> <keyfield xpath="@extAccount-id"/> <keyfield xpath="@midInSMSId"/> </dbindex> <attribute label="External Mid SMS ID" name="midInSMSId" type="long"/> </element>
-
Pour appliquer les modifications apportées dans les schémas, lancez l’assistant de mise à jour de la base de données. Cet assistant est accessible via Outils > Avancé > Mise à jour de la structure de la base de données. Il vérifie que la structure physique de la base de données correspond bien à sa description logique et exécute les scripts de mise à jour SQL. En savoir plus
-
Arrêtez et sauvegardez votre workflow contenant l’Activité Réception de SMS.
Sauvegardez le pointeur d'option correspondant au format suivant.
SMS_MO_INDEX_{internal name of the workflow}_{name of the insms workflow activity}_{internal name of the external account to access the mid}
.
-
(FACULTATIF) si vous utilisez déjà une activité Planificateur, ouvrez le workflow et reconfigurez-le comme suit :
-
Répliquez les paramètres actuels de l’onglet Planning de votre activité Réception de SMS dans votre activité Planificateur.
-
Désactivez le paramètre actuel dans l’onglet Planning de l’activité Réception de SMS.
-
-
Mettez à jour le script personnalisé Réception de SMS.
Remplacez le bloc ci-dessous. Notez que ce script peut varier si vous avez personnalisé ce code précédemment.
var lastSynchKey = getOption('SMS_MO_INDEX_WKF1105_inSmsUS_smsmidus'); var smsId = application.getNewIds(1); xtk.session.Write(<inSMS xtkschema="nms:inSMS" _operation="insert" id={smsId} origin={smsMessage.origin} message={smsMessage.message} providerId={smsMessage.messageId}/>); return 2;
Avec le nouveau script personnalisé suivant pour mettre à jour les données inSMS à partir d'une clé composite, combinant la clé primaire de l'enregistrement Midsourcing et l'identifiant de compte externe du routage Marketing SMS.
Suivez les conditions requises ci-dessous :
-
Saisissez la valeur réelle pour
<EXTERNAL_ACCOUNT_ID>
; par exemple,var iExtAccountId=72733155
. -
Veillez à conserver les éléments suivants dans le script personnalisé :
_operation="insertOrUpdate"
_key="@midInSMSId,@extAccount-id"
midInSMSId={smsMessage.id}
inSms.@["extAccount-id"] = iExtAccountId;{}
// please enter real external account ID to replace <EXTERNAL ACCOUNT ID> var iExtAccountId=<EXTERNAL_ACCOUNT_ID>; var inSms = <inSMS xtkschema="nms:inSMS" _operation="insertOrUpdate" _key="@midInSMSId,@extAccount-id" midInSMSId={smsMessage.id} message={smsMessage.message} origin={smsMessage.origin} providerId={smsMessage.providerId} alias={smsMessage.alias} messageDate = {smsMessage.messageDate} receivalDate = {smsMessage.receivalDate} deliveryDate = {smsMessage.deliveryDate} largeAccount = {smsMessage.largeAccount} countryCode = {smsMessage.countryCode} operatorCode = {smsMessage.operatorCode} linkedSmsId={smsMessage.linkedSmsId} separator = {smsMessage.separator}/> inSms.@["extAccount-id"] = iExtAccountId; xtk.session.Write(inSms); return 2;
-
-
Mettez à jour le script d'initialisation avancé Réception de SMS avec le script suivant.
Le script réinitialise le pointeur de la clé primaire sur 24 heures auparavant. Le workflow tentera de retraiter toutes les données inSMS de l'instance Midsourcing au cours des dernières 24 heures et d'ajouter toutes les données manquantes à l'instance Marketing.
// please enter real external account ID to replace <EXTERNAL_ACCOUNT_ID> // please enter real pointer option name to replace '<POINTER_OPTION_NAME>' // OPTION NAME format: SMS_MO_INDEX_{internal name of the workflow}_inSms_{internal name of the external account to access the mid} var queryDef = xtk.queryDef.create( <queryDef operation="getIfExists" schema="nms:inSMS" lineCount="1"> <select> <node expr="@midInSMSId" alias="@midInSMSId"/> </select> <where> <condition expr="@midInSMSId != 0"/> <condition expr={"@created > SubHours(GetDate(), 24)"}/> <condition expr={"[@extAccount-id]=<EXTERNAL_ACCOUNT_ID>"}/> </where> <orderBy> <node expr="@midInSMSId"/> </orderBy> </queryDef>); var res = parseInt(queryDef.ExecuteQuery().@midInSMSId.toString()); if( !isNaN(res) ) setOption('<POINTER_OPTION_NAME>', res);
WARNING
- Si plusieurs comptes de routage SMS sont liés à la même instance Midsourcing, un seul workflow par instance Midsourcing est autorisé.
- Vous pouvez utiliser n’importe quel ID de compte externe. La clé étrangère a pour rôle de maintenir l'intégrité de la réconciliation des données dans les scénarios impliquant différents serveurs de midsourcing où l'ID SMS de midsourcing peut être identique parmi d'autres instances Midsourcing.
- S'il existe plusieurs workflows InSMS par instance Midsourcing, la duplication des données peut se produire, car l'identifiant SMS de midsourcing reste constant tandis que les identifiants du compte externe varient.
-
Enregistrez et redémarrez le workflow.