Skip to main content
OpenCompany ships eight messaging and social nodes across three families: platform-specific Telegram nodes (bot API), platform-specific Twitter/X nodes (OAuth), and platform-agnostic Social nodes that normalize messages across channels. The Telegram and Social nodes live in the Social section of the component palette; switch the toolbar Mode toggle from Normal to Dev to see it.

Telegram

Telegram is the fastest messaging integration to set up: a bot token is free and takes about two minutes.
  1. In Telegram, message @BotFather and send /newbot to create a bot. BotFather replies with an HTTP API token.
  2. In OpenCompany, click the key icon in the toolbar to open API Credentials, select Telegram Bot, paste the token into Bot Token, and click Validate. The field shows Valid and the provider gets a green Connected badge.
The Telegram Bot panel also has an optional Your Chat ID (optional) field. Fill it in to make Telegram Send’s self recipient route to your account immediately (DM @userinfobot to find your id) — or leave it blank and OpenCompany auto-captures it from the first private DM you send the bot.

Telegram Send

Sends a message through your connected bot. Supports text, photos, documents, locations, and contacts.

Parameters

select
default:"self"
Who receives the message: self (the captured bot owner), user, or group
string
Numeric chat id or @username. Required when Recipient Type is user or group.
select
default:"text"
Message kind: text, photo, document, location, or contact
string
Message text. Required when Message Type is text.
string
Remote URL or Telegram file_id. Required for photo and document messages.
string
Optional caption for photo and document messages
For location messages, latitude and longitude (numbers) are required. For contact messages, phone_number and first_name are required and last_name is optional.
select
default:"Auto"
Text formatting: Auto (GFM markdown converted to Telegram HTML), None, HTML, Markdown, or MarkdownV2. Applies to text, photo, and document messages.
boolean
default:"false"
Send without a notification sound
number
default:"0"
When set to a non-zero message id, sends the message as a reply to it

Output

Leave Parse Mode on Auto: agent replies written in markdown are converted to Telegram HTML automatically, and if Telegram rejects the formatting the node retries as plain text.

Telegram Receive

Trigger node — waits for an incoming Telegram message that passes its filters, then starts the workflow with the message as output.

Parameters

select
default:"all"
Accept only one content type: all, text, photo, video, audio, voice, document, sticker, location, contact, or poll
select
default:"all"
Who can trigger the workflow: all, self (the bot owner), private, group, supergroup, channel, specific_chat, specific_user, or keywords
string
Numeric chat id or @username. Required when Sender Filter is specific_chat.
string
Numeric user id. Required when Sender Filter is specific_user.
string
Comma-separated keywords, matched case-insensitively as substrings. Required when Sender Filter is keywords.
boolean
default:"true"
Skip messages sent by other bots (not applied when Sender Filter is self)

Output

Media messages add a matching block: photo (file_id, width, height, file_size), document (file_id, file_name, mime_type, file_size), location (latitude, longitude), or contact (phone_number, first_name, last_name, user_id). For captioned media, text carries the caption.
Keyword matching is a case-insensitive substring check with no word boundaries — hi matches chicken. The self filter only matches once your chat id is known (explicit field or first DM).

Twitter/X

The four Twitter/X nodes authenticate with OAuth 2.0 against your own X Developer app:
  1. Create an app in the X Developer Portal with OAuth 2.0 enabled and set its callback URL to http://localhost:3010/api/twitter/callback.
  2. In API Credentials, select Twitter/X and enter the Client ID (and optionally the Client Secret — optional for PKCE).
  3. Click Save Credentials, then Login with Twitter/X and approve the requested scopes in the browser.
The requested scopes are tweet.read, tweet.write, users.read, follows.read, follows.write, like.read, like.write, and offline.access (for silent token refresh). Use Disconnect in the same panel to revoke the stored tokens. The three action nodes are dual-purpose: wire them to an AI Agent’s tools handle and the agent can call twitter_send, twitter_search, and twitter_user on its own. Twitter Receive is a trigger only.

Twitter Send

Performs write actions against your authenticated account.

Parameters

select
default:"tweet"
required
One of tweet, reply, retweet, quote, like, unlike, or delete
string
Tweet content. Required for tweet, reply, and quote. Silently truncated to 280 characters.
string
Target tweet ID. Required for reply, retweet, quote, like, unlike, and delete.
The form also accepts include_media, media_urls (comma-separated, max 4 images or 1 video), include_poll, poll_options (comma-separated 2-4 options, 25 characters each), and poll_duration (minutes, 5-10080, default 1440) — see the warning below.

Output

The action field reports what happened: tweet_sent, reply_sent, quoted, retweeted, liked, unliked, or deleted.
Media and poll parameters are accepted by the form but ignored by the current implementation — the node always sends a text-only tweet. Text longer than 280 characters is cut without warning.
Searches recent tweets and returns enriched results: expanded URLs, joined author profiles, attached media, referenced tweets, and full long-form text when a tweet exceeds 280 characters.

Parameters

string
required
X search query. Supports the full operator set (from:, lang:, -is:retweet, …).
number
default:"10"
Number of results, clamped to 10-100 (the API minimum is 10)
The form also shows sort_order (default recency), start_time / end_time (ISO 8601), and include_metrics / include_author toggles, but the current implementation does not forward them — the full field set is always requested.

Output

Tweets may also carry optional urls, media, and referenced_tweets arrays when the API returns them. Only the first result page is returned — pagination is not surfaced.

Twitter User

Looks up users and their social graph.

Parameters

select
default:"me"
required
One of me, by_username, by_id, followers, or following
string
Handle without the @. Required for by_username.
string
Numeric user id. Required for by_id; optional for followers and following (defaults to the authenticated user).
number
default:"100"
Result count for followers and following, clamped to 1-1000

Output

For me, by_username, and by_id:
For followers and following, the output is { "operation": "...", "users": [...], "count": 42 } where each entry has the same user shape. Only the first page is returned.

Twitter Receive

Trigger node — polls the X API (no push webhooks on the free tier) and fires the workflow when a matching event arrives.

Parameters

select
default:"mentions"
required
What to watch: mentions, search, or timeline
string
Required when Trigger Type is search. Matched case-insensitively as a substring against the event’s query.
string
For timeline: watch a specific user’s timeline. Empty means the authenticated user.
boolean
default:"true"
Form-level hint; not enforced by the event filter in the current implementation
boolean
default:"false"
Form-level hint; not enforced by the event filter in the current implementation
number
default:"60"
Seconds between polls (15-3600). Applied when the workflow is deployed.

Output

Search events add a query field; timeline events add user_id.
Expect up to poll_interval seconds of latency between a tweet being posted and the trigger firing — the default is 60 seconds.

Unified Social nodes

The Social nodes decouple your workflow from any single platform. Social Receive sits after a platform trigger (WhatsApp Receive, Telegram Receive, Chat Trigger) and normalizes whatever arrives into one schema; Social Send takes one payload shape and routes it to the platform selected by its channel parameter. Build the middle of your workflow once against the unified schema, and swap the endpoints per platform.

Social Send

Platform-agnostic outbound messaging. The node advertises ten channels (whatsapp, telegram, discord, slack, signal, sms, webchat, email, matrix, teams), but only whatsapp is implemented today — other values return a “not yet implemented” error. Use Telegram Send for Telegram in the meantime. It exposes four input handles — message, media, contact, and metadata — matching the four output handles on Social Receive, and can also be wired to an AI Agent as a tool.

Key parameters

select
default:"whatsapp"
Target platform. Only whatsapp is wired today.
select
default:"phone"
How the recipient is addressed: phone, group, channel, user, or chat. Each choice reveals its matching id field (phone, group_id, channel_id, user_id, chat_id).
select
default:"text"
text, image, video, audio, document, sticker, location, contact, poll, buttons, or list
string
Message body for text messages
Text messages take a format (plain, markdown, or html, default plain) and a disable_preview toggle. Media messages pick a media_sourceurl (media_url), base64 (media_data), or file (file_path). Additional parameter groups appear per message type: caption / filename / mime_type for media, latitude / longitude / location_name / address for locations, contact_name / contact_phone / vcard for contacts, poll_question / poll_options / poll_allow_multiple for polls, and buttons / list_sections (JSON) for interactive messages. Delivery flags: reply_to_message (+ reply_message_id, reply_to_current), audio_as_voice, silent, and protect_content.

Output

Social Receive

Normalizes messages from any connected platform trigger into a unified inbound schema, applies filters, and fans the result out across four output handles so downstream nodes grab just the slice they need. Connect a platform trigger (WhatsApp Receive, Telegram Receive, Chat Trigger) to Social Receive; it detects the source platform from the upstream node and normalizes automatically.

Parameters

select
default:"all"
Accept only one platform: all, whatsapp, telegram, discord, slack, signal, sms, webchat, email, matrix, or teams
select
default:"all"
all, text, image, video, audio, document, sticker, location, contact, poll, or reaction
select
default:"all"
all, any_contact (no group messages), contact (specific phone), group (specific chat), or keywords
string
Exact phone match. Required when Sender Filter is contact.
string
Exact chat id match. Required when Sender Filter is group.
string
Comma-separated keywords, matched case-insensitively as substrings
boolean
default:"true"
Drop messages you sent yourself
boolean
default:"false"
Drop messages sent by bots
boolean
default:"false"
Include the base64 media payload in the output (memory-intensive)

Outputs

Social Receive is the one node in this family with four dedicated output handles: The main output carries the full unified message: message_id, channel, sender, sender_phone, sender_name, chat_id, chat_type, message_type, text, timestamp, is_group, is_from_me, is_forwarded, is_bot, plus the original platform payload under raw.
When a message fails the filters, the node still succeeds but emits result: null with filtered: true — downstream nodes must tolerate a null payload. ignore_own_messages defaults to true, so echo-style self-tests are silently dropped unless you turn it off.

Example: cross-post an update

Send the same text to Telegram, Twitter/X, and WhatsApp from one trigger:
  1. Telegram Send
    • Recipient Type: self
    • Message Type: text
    • Text: {{chattrigger.message}}
  2. Twitter Send
    • Action: tweet
    • Text: {{chattrigger.message}} (truncated to 280 characters)
  3. Social Send
    • Channel: whatsapp
    • Recipient Type: phone
    • Phone: your number, digits only
    • Message Type: text
    • Message: {{chattrigger.message}}
Click Start to deploy, then type your update into the Chat panel — all three sends fire from the single incoming message.

Tips

Telegram is the best starting platform: the bot token is free, validation is instant, and no developer account approval is needed. Follow the Telegram bot tutorial for an end-to-end build.
Wire Twitter Search and Twitter User to an AI Agent’s tools handle to let the agent research accounts and topics on its own before posting with Twitter Send.
Put Social Receive between your platform triggers and the rest of the workflow — downstream nodes then read one schema regardless of where the message came from.
Receive triggers wait indefinitely once started. Click Stop (the Start button while running) to cancel a deployed workflow.

WhatsApp

Full WhatsApp integration: QR pairing, groups, channels, and media

Telegram Bot Tutorial

Build a free AI-powered Telegram bot in 10 minutes