Я запускаю SMS в области, где объединение сообщений не поддерживается.

Мои сообщения обрываются на середине предложения. Есть ли какой-либо способ принудительного усечения в фиксированной точке (т. е. между предложениями), чтобы сообщение форматировалось более удобным для клиента способом?

0
Thomas Hockey 7 Фев 2020 в 20:57
1
Таким образом, на большинстве рынков усечение происходит на 160 символах, поэтому вы можете написать свое сообщение с дополнительными пробелами, чтобы разделить слово / предложение, как это место
 – 
EazyE
7 Фев 2020 в 22:22
Привет, @Thomas Hockey, можешь привести несколько примеров текста, который пытаешься отправить? Сообщения будут обрезаны примерно до 150-160 символов (при условии кодировки GSM, а не UTF-8/16), поскольку полезная нагрузка также должна включать заголовок сообщения (от номера). Знаете ли вы максимальную общую длину сообщения?
 – 
Cameron Robert
8 Фев 2020 в 02:44

1 ответ

Лучший ответ

Вы можете решить эту проблему с помощью действия скрипта и активированного SMS.

SSJS ниже может взять любую строку и разбить ее на нужную длину:

<script runat="server">
Platform.Load("Core", "1");
  function splitter(str, l){
    var strs = [];
    while(str.length > l){
        var pos = str.substring(0, l).lastIndexOf(' ');
        pos = pos <= 0 ? l : pos;
        strs.push(str.substring(0, pos));
        var i = str.indexOf(' ', pos)+1;
        if(i < pos || i > pos+l)
            i = pos;
        str = str.substring(i);
    }
    strs.push(str);
    return strs;
}
  var sampletext = "Toilet paper attack claws fluff everywhere meow miao french ciao litterbox murr i hate humans they are so annoying. Please stop looking at your phone and pet me really likes hummus purr as loud as possible, be the most annoying cat that you can, and, knock everything off the table who's the baby, or fat baby cat best buddy little guy.";
var outputString = splitter(sampletext, 140);
  Write(Platform.Function.Stringify(outputString));
</script>


Вывод: (3 строковых объекта до 140 символов каждый)

["Туалетная бумага атакует когтями пух везде мяу мяо француз чао мурр я ненавижу людей они такие надоедливые. Пожалуйста перестань смотреть на", "твой телефон и гладь меня очень любит хумус мурлыкай как можно громче, будь самой надоедливой кошкой, которую ты может, и сбить все со стола», «стол, который ребенок, или толстый котенок, лучший друг, маленький парень».]

Исходный источник кода: https: //stackoverflow.com/questions/7624713/js-разделение-длинной-строки-на-строки-с-лимитом-символов-при-избегании-расщепления

Теперь, когда полная строка SMS разбита на соответствующие длины, вы можете использовать Отправить сообщение на номер REST API для отправки каждой части сообщения клиенту в виде отдельных сообщений.

Вы можете добавить небольшое ожидание или promise, чтобы сообщения обрабатывались службой SMS в последовательном порядке. Обратите внимание, что конечный пользователь все еще может получать их не по порядку из-за факторов окружающей среды (плохой прием).

0
Cameron Robert 8 Фев 2020 в 04:35
Спасибо за эту деталь. Проблема усугубляется необходимостью использования динамических значений — это означает, что возможные длины могут быть переменными, поэтому трудно понять, где поставить разрыв! Я думаю, что ответ может состоять в том, чтобы удалить динамическую копию, что фактически устраняет необходимость устанавливать перерыв в SMS. Спасибо за вашу помощь.
 – 
Thomas Hockey
10 Фев 2020 в 18:54