Как объединить несколько слабых блоков в один?

#google-apps-script #slack-block-kit

Вопрос:

Я написал сценарий в сценарии приложений Google, который отправляет данные из Google Листов в виде сообщения в Slack, отформатированные в блоках.

Теперь я хочу, чтобы сообщение имело переменную длину в зависимости от того, сколько строк у меня в электронной таблице, и я хочу отправить только 1 сообщение, чтобы предотвратить рассылку спама по каналам с десятками сообщений одновременно.

Моим первым инстинктом было то, что это должно быть возможно, но простое объединение 2 (или более) переменных, которые выглядят так, как показано ниже, не работает. Я также попытался разделить сообщение на еще более мелкие части, чтобы объединить их позже, но это тоже не сработало.

 var message = {
    "blocks": [
        {
            "type": "section",
            "text": {
                "type": "plain_text",
                "text": "This is a plain text section block.",
                "emoji": true
            }
        },
        {
            "type": "section",
            "text": {
                "type": "plain_text",
                "text": "This is a plain text section block.",
                "emoji": true
            }
        }
    ]
}
 

Есть ли какой-либо способ объединить несколько блоков в одно сообщение или, может быть, даже способ обработки данных перед созданием блоков, чтобы они могли иметь переменную длину?

Комментарии:

1. Вы пробовали объединить несколько текстов в один блок с помощью уникального разделителя, а затем разделить их там позже? Я не знаком с комплектом slack block, но если вы попытаетесь разделить и объединить их позже, основываясь на своем посте, я предполагаю, что можно было бы сделать и обратное.

2. Я мог бы использовать n в качестве разделителя для размещения нескольких строк в одном текстовом блоке. Это действительно умная идея, которая, по крайней мере, сработала бы как временное решение. Это все еще не позволяет мне, например, добавлять несколько блоков разных типов вместе.

3. Это то, о чем я могу думать сейчас, поскольку я не могу проверить это лично. но теоретически это должно быть временное решение, которое должно сработать.

4. пожалуйста, ознакомьтесь с обновленным ответом ниже, если он подойдет для ваших разных типов.

Ответ №1:

Добавляю сюда в качестве ответа, так как ОП одобрил эту идею.

В основном, добавление текста с использованием уникального разделителя в один блок, а затем их последующее разделение. Теоретически это могло бы сработать. Это временное решение, так как я не знаком с комплектом slack block.

Для разных типов другим временным решением было бы манипулирование строкой, чтобы вы могли обрабатывать там несколько типов.

 {
    "type": "section",
    "text": {
        "type": "plain_text",
        "text": "plain_textn
                 This is a plain text section block.n
                 type2n
                 text2n
                 type3n
                 text3",
        "emoji": true
    }
}
 

и обработайте их должным образом с другой стороны.

Psuedocode:

 types = [];
texts = [];
data = text.split("n");
data.forEach(function (string, index){
    // even indices -> types
    if(index % 2 == 0) 
        types.append(string);
    // odd indices -> texts
    else 
        texts.append(string);
});
// types should now contain all type in array form
// texts should now contain all text in array form