중간 소싱 인프라에 대한 인바운드 SMS 워크플로 활동 inbound-sms-wf

제한 사항 limitations

  • 이 사용 사례는 중간 소싱 인스턴스에서 inSMS 데이터를 수집하는 마케팅 인스턴스에만 적용됩니다.
  • 중간 소싱 인스턴스에서 이 사용 사례를 구현하지 마십시오.
  • 외부 중간 소싱 계정당 사용자 지정 워크플로우가 한 개만 있습니다.

구현 implementation

  1. 마케팅 인스턴스의 nms:inSMS 스키마에 확장을 추가합니다. 확장은 nms:inSMS 스키마에 새 특성을 추가하고 중간 소싱 인스턴스에서 나오는 inSMS 레코드 기본 키를 추적합니다.

    code language-xml
    <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>
    
  2. 스키마에 대한 수정 사항을 적용하려면 Database Update Assistant를 실행합니다. 이 도우미는 도구 > 고급 > 데이터베이스 구조 업데이트​를 통해 액세스할 수 있습니다. 데이터베이스의 물리적 구조가 논리적 설명과 일치하는지 확인하고 SQL 업데이트 스크립트를 실행합니다. 자세히 알아보기

  3. 인바운드 SMS 활동​이 포함된 워크플로우를 중지하고 백업합니다.

    해당 옵션 포인터를 SMS_MO_INDEX_{internal name of the workflow}_{name of the insms workflow activity}_{internal name of the external account to access the mid} 형식으로 백업합니다.

백업에 대한 자세한 내용

  1. (선택 사항) 이미 스케줄러 활동을 사용 중인 경우 워크플로우를 열고 다음과 같이 다시 구성하십시오.

    1. 인바운드 SMS 활동의 일정 탭에서 현재 설정을 외부 스케줄러 활동으로 복제합니다.

    2. 인바운드 SMS 활동의 일정 탭에서 현재 설정을 사용하지 않도록 설정하십시오.

  2. 인바운드 SMS 사용자 지정 스크립트를 업데이트합니다.

    아래 블록을 바꿉니다. 이 스크립트는 이전에 이 코드를 사용자 지정한 경우에 달라질 수 있습니다.

    code language-javascript
    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;
    

    중간 소싱 레코드의 기본 키와 마케팅 SMS 라우팅의 외부 계정 ID를 결합하여 복합 키를 기반으로 inSMS 데이터를 업데이트하는 다음의 새로운 사용자 지정 스크립트를 사용합니다.

    아래의 사전 요구 사항을 따르십시오.

    • <EXTERNAL_ACCOUNT_ID>의 실제 값(예: var iExtAccountId=72733155)을 입력하십시오.

    • 사용자 지정 스크립트에 다음 요소를 유지해야 합니다.

      • _operation="insertOrUpdate"
      • _key="@midInSMSId,@extAccount-id"
      • midInSMSId={smsMessage.id}
      • inSms.@["extAccount-id"] = iExtAccountId;{}
    code language-javascript
    // 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;
    
  3. 인바운드 SMS 고급 초기화 스크립트를 다음 스크립트로 업데이트합니다.

    스크립트는 기본 키 포인터를 24시간 전으로 재설정합니다. 워크플로우는 이전 24시간 내에 중간 소싱 인스턴스의 모든 inSMS 데이터를 재처리하고 누락된 데이터를 마케팅 인스턴스에 추가합니다.

    code language-javascript
    // 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);
    
    note warning
    WARNING
    • 여러 SMS 라우팅 계정이 동일한 중간 소싱 인스턴스에 연결된 경우 중간 소싱 인스턴스당 단일 워크플로우만 허용됩니다.
    • 외부 계정 ID를 사용할 수 있습니다. 외래 키의 역할은 중간 소싱 SMS ID가 다른 중간 소싱 인스턴스에서 동일할 수 있는 서로 다른 중간 소싱 서버와 관련된 시나리오에서 데이터 조정 무결성을 유지하는 것입니다.
    • 중간 소싱 인스턴스당 여러 개의 inSMS 워크플로우가 있는 경우 중간 소싱 SMS ID가 일정하게 유지되고 외부 계정 ID가 다르므로 데이터가 중복될 수 있습니다.
  4. 워크플로우를 저장하고 다시 시작합니다.

recommendation-more-help
601d79c3-e613-4db3-889a-ae959cd9e3e1