← 返回
未分类

Message Split

长消息自动拆分 skill。当回复内容超过渠道限制时,自动将消息拆分为多条有序发送,避免截断或丢消息。Auto-split long messages into smaller chunks before sending, with sequence markers.
长消息自动拆分 skill。当回复内容超过渠道限制时,自动将消息拆分为多条有序发送,避免截断或丢消息。Auto-split long messages into smaller chunks before sending, with sequence markers.
54meteor 54meteor 来源
未分类 clawhub v1.0.0 1 版本 100000 Key: 无需
★ 0
Stars
📥 376
下载
💾 1
安装
1
版本
#latest

概述

Message Split Skill

Problem

Many messaging channels (Feishu, Telegram, etc.) have a per-message character limit (~4000 chars for Feishu). When a response exceeds this limit, it either gets truncated or silently fails, leaving the user with no feedback.

Solution

Before sending any message, check its length and split if necessary.

Usage

def send_long_message(text, channel="{active_channel}"):
    """
    Send a message, splitting it into multiple chunks if it exceeds the length limit.
    
    Args:
        text: The message text to send
        channel: Target channel (feishu/telegram/discord/whatsapp/signal/imessage/openclaw-weixin)
    
    Returns:
        Number of chunks sent
    """
    MAX_LEN = 3600  # Feishu limit with margin
    CHUNK_HEADER = "[{i}/{total}]\n"
    
    if len(text) <= MAX_LEN:
        message(action="send", channel=channel, message=text)
        return 1
    
    chunks = split_text(text, MAX_LEN)
    total = len(chunks)
    
    for i, chunk in enumerate(chunks, 1):
        header = f"[{i}/{total}]\n" if total > 1 else ""
        message(action="send", channel=channel, message=header + chunk)
    
    return total


def split_text(text, max_len):
    """
    Split text into chunks of at most max_len characters.
    Attempts to split at sentence boundaries or line breaks for readability.
    """
    import re
    
    # Try to split at sentence-ending punctuation first
    sentence_split = re.split(r'(?<=[。!?.!?])\s+', text)
    
    chunks = []
    current = ""
    
    for sentence in sentence_split:
        if len(current) + len(sentence) + 1 <= max_len:
            current += (" " + sentence if current else sentence)
        else:
            if current:
                chunks.append(current)
            # If single sentence exceeds limit, split by words/characters
            if len(sentence) > max_len:
                for i in range(0, len(sentence), max_len - 100):
                    chunks.append(sentence[i:i + max_len - 100])
                current = ""
            else:
                current = sentence
    
    if current:
        chunks.append(current)
    
    return chunks

Channel Limits Reference

ChannelMax chars (approx)Notes
-----------------------------------
Feishu4000Hard limit
Telegram4096
Discord2000Embed limit 6000
WhatsApp65000But relayed messages get truncated
Signal700Very low
iMessage~4000Via macOS relay

Notes

  • Always use MAX_LEN = 3600 as a safe default (leaves room for header)
  • If channel is unknown, default to feishu behavior
  • Splitting is done on word/sentence boundaries when possible to preserve readability
  • Sequence headers [{i}/{total}] are only added when total > 1

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-03-31 10:32 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

ai-agent

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,417 📥 325,828
design-media

article-tts

54meteor
拍照或文字转音频:文章照片 OCR 提取文字或直接输入文字,生成自然 Edge TTS 语音,支持中英文、自动转写、语速调节、逐句拆分。
★ 1 📥 586
ai-agent

Agent Browser

rez0
用于 AI 代理的浏览器自动化 CLI。当用户需要与网站交互(包括浏览页面、填写表单、点击按钮、截图等)时使用。
★ 849 📥 329,125