tupiflow registry /plugins/telegram/0.4.8

telegram @ 0.4.8

Telegram bot integration. Reply to chat threads and receive webhook updates.

Publisher / author
tupiflow
Type
telegram
Signing key
kid-20260520-e5fe9257

Bundle

Download signed bundle verifies against kid-20260520-e5fe9257

Signed manifest (spec)

Byte-for-byte signed payload. Hash with RFC 8785 canonical JSON, verify the Ed25519 signature against the public key for kid-20260520-e5fe9257.

{
  "icon": {
    "kind": "svg",
    "path": "icon.svg"
  },
  "bundle": {
    "sha256": "f97473567c0d74cf2be7e4c74ba829f8ca237b8ce614226eaac7e04a6013d7a3",
    "sizeBytes": 8329
  },
  "routes": [
    {
      "path": "/webhook/:integrationId",
      "method": "POST",
      "handlerExport": "telegramWebhookHandler"
    }
  ],
  "actions": [
    {
      "slug": "send-reply",
      "tool": {
        "name": "telegram_send_reply",
        "description": "Reply to a Telegram thread via the Bot API. Supports inline_keyboard buttons and bubble splitting.",
        "inputSchemaJson": "{\"type\":\"object\",\"properties\":{\"botToken\":{\"type\":\"string\"},\"integrationId\":{\"type\":\"string\"},\"text\":{\"type\":\"string\"},\"chatId\":{\"type\":\"string\"},\"threadJson\":{},\"messageThreadId\":{\"type\":[\"string\",\"number\"]},\"buttons\":{},\"splitBubbles\":{\"type\":\"string\"},\"bubbleDelayMs\":{\"type\":[\"string\",\"number\"]}},\"required\":[\"text\",\"integrationId\"],\"additionalProperties\":false}"
      },
      "label": "Send Telegram Reply",
      "category": "Telegram",
      "description": "Reply to the incoming Telegram thread",
      "configFields": [
        {
          "key": "text",
          "type": "template-textarea",
          "label": "Reply Text",
          "example": "Hello from my workflow!",
          "required": true
        },
        {
          "key": "chatId",
          "type": "select",
          "label": "Fallback Chat (optional)"
        },
        {
          "key": "messageThreadId",
          "type": "template-input",
          "label": "Forum Topic ID (optional)"
        },
        {
          "key": "buttons",
          "type": "template-textarea",
          "label": "Inline Buttons (optional, JSON)"
        },
        {
          "key": "splitBubbles",
          "type": "select",
          "label": "Split into multiple bubbles"
        },
        {
          "key": "bubbleDelayMs",
          "type": "number",
          "label": "Delay between bubbles (ms)"
        }
      ],
      "outputFields": [
        {
          "field": "messageId",
          "description": "ID of the last posted message (final bubble)"
        },
        {
          "field": "messageIds",
          "description": "IDs of every posted message in order. Length matches bubbleCount."
        },
        {
          "field": "bubbleCount",
          "description": "How many Telegram messages were posted (1 unless splitBubbles is on)"
        },
        {
          "field": "threadId",
          "description": "ID of the thread replied to"
        }
      ],
      "stepFunction": "telegramSendReplyStep"
    }
  ],
  "runtime": {
    "minTupiflowVersion": "0.0.0"
  },
  "identity": {
    "name": "telegram",
    "type": "telegram",
    "version": "0.4.8",
    "publisher": "tupiflow",
    "description": "Telegram bot integration. Reply to chat threads and receive webhook updates."
  },
  "connection": {
    "triggerIcon": "MessageCircle",
    "triggerType": "Chat Message",
    "triggerLabel": "Telegram Message",
    "triggerInputFields": [
      {
        "field": "text",
        "description": "Text of the incoming message"
      },
      {
        "field": "integrationId",
        "description": "Telegram integration ID"
      },
      {
        "field": "threadId",
        "description": "Telegram thread ID"
      },
      {
        "field": "channelId",
        "description": "Telegram channel ID"
      },
      {
        "field": "userName",
        "description": "Sender's display name"
      },
      {
        "field": "isDM",
        "description": "True if the message is a DM"
      },
      {
        "field": "isMention",
        "description": "True if the bot was @-mentioned"
      },
      {
        "field": "threadJson",
        "description": "Serialized thread for replies"
      },
      {
        "field": "imageUrls",
        "description": "Image attachments from the message (data URLs)"
      },
      {
        "field": "fileUrls",
        "description": "Document/file attachments from the message (data URLs, excludes images/audio/video)"
      },
      {
        "field": "audioUrls",
        "description": "Audio attachments from the message (voice notes, audio files; data URLs)"
      },
      {
        "field": "videoUrls",
        "description": "Video attachments from the message (mp4, webm, mov; data URLs). Requires a model that supports video input (e.g. Gemini)."
      }
    ],
    "supportsAttachments": true
  },
  "entrypoint": "bundle.mjs",
  "formFields": [
    {
      "id": "botToken",
      "type": "password",
      "label": "Bot Token",
      "envVar": "TELEGRAM_BOT_API_KEY",
      "helpLink": {
        "url": "https://t.me/BotFather",
        "text": "@BotFather"
      },
      "helpText": "Create a bot and get its token from ",
      "required": true,
      "configKey": "botToken",
      "placeholder": "123456:ABC-..."
    },
    {
      "id": "botUsername",
      "type": "text",
      "label": "Bot Username (optional)",
      "helpText": "The bot's @username without the leading @",
      "configKey": "botUsername",
      "placeholder": "my_bot"
    },
    {
      "id": "webhookSecret",
      "type": "password",
      "label": "Webhook Secret (optional)",
      "helpText": "Used if you configure a production webhook instead of polling",
      "configKey": "webhookSecret",
      "placeholder": "Random secret for webhook validation"
    }
  ],
  "credentials": [
    {
      "key": "TELEGRAM_BOT_API_KEY",
      "type": "password",
      "label": "Bot Token",
      "helpText": "Create a bot via @BotFather and paste its token here."
    },
    {
      "key": "TELEGRAM_WEBHOOK_SECRET",
      "type": "password",
      "label": "Webhook Secret",
      "helpText": "Random secret used to verify the X-Telegram-Bot-Api-Secret-Token header on inbound webhook requests."
    }
  ],
  "capabilities": [
    "net.fetch",
    "secrets.read",
    "connection.lifecycle",
    "workflow.dispatch",
    "integration.test",
    "chat.takeover.read",
    "chat.history.write",
    "telemetry.write"
  ],
  "requiredNpmDeps": {
    "chat": "^4.26.0",
    "@chat-adapter/telegram": "^4.26.0"
  },
  "requiresHostRestart": true
}

Signature

x5Kb99p3k0U46tfdi9G1s5I55O9qLUO90YdosmQXgNXZRetjZVTZXKDMEKhuK1929OQrgC/f9v/dxvDyEIPGDg==