Channel Messaging
OrcBot provides unified messaging across Telegram, WhatsApp, Discord, Slack, email, and a web gateway. All skills auto-detect the source channel and handle delivery seamlessly.
Core Messaging Skills
send_telegram
Send a message to a Telegram user or group.
Parameters:
Numeric Telegram chat ID (e.g., 123456789). NOT the username.
Message text. Supports markdown formatting.
Example:
{
"skill" : "send_telegram" ,
"args" : {
"chatId" : "123456789" ,
"message" : "Hello from OrcBot!"
}
}
Auto-Resolution:
If you pass a placeholder ID like 12345 or a name, the skill auto-fills from action metadata:
{
"skill" : "send_telegram" ,
"args" : {
"chatId" : "12345" ,
"message" : "Reply"
}
}
// Auto-resolved to real chatId from incoming message metadata
send_whatsapp
Send a message to a WhatsApp contact or group.
Parameters:
WhatsApp JID (e.g., 1234567890@s.whatsapp.net for contacts, 123456@g.us for groups)
Example:
{
"skill" : "send_whatsapp" ,
"args" : {
"jid" : "1234567890@s.whatsapp.net" ,
"message" : "Hi from OrcBot!"
}
}
send_discord
Send a message to a Discord channel.
Parameters:
Discord channel ID (17-20 digit snowflake)
Message text. Supports Discord markdown.
Example:
{
"skill" : "send_discord" ,
"args" : {
"channel_id" : "1234567890123456789" ,
"message" : "**Hello** from OrcBot!"
}
}
send_slack
Send a message to a Slack channel or DM.
Parameters:
Slack channel ID (e.g., C01234567)
Message text. Supports Slack mrkdwn.
Example:
{
"skill" : "send_slack" ,
"args" : {
"channel_id" : "C01234567" ,
"message" : "*Hello* from OrcBot!"
}
}
send_email
Send an email via configured SMTP.
Parameters:
Email subject. Defaults to βOrcBot responseβ.
Email body (plain text or HTML)
Message-ID of email being replied to (for threading)
Space-separated Message-IDs for threading
Example:
{
"skill" : "send_email" ,
"args" : {
"to" : "user@example.com" ,
"subject" : "Weekly Report" ,
"message" : "Here is your weekly summary..."
}
}
Email Threading:
Use inReplyTo and references for proper email threading:
{
"skill" : "send_email" ,
"args" : {
"to" : "user@example.com" ,
"subject" : "Re: Project Update" ,
"message" : "Thanks for the update..." ,
"inReplyTo" : "<msg-123@example.com>" ,
"references" : "<msg-123@example.com>"
}
}
Rich Interactions
send_file
Send a file with auto-detection of channel.
Parameters:
Recipient ID (WhatsApp JID, Telegram chatId, Discord channelId)
Override channel: telegram, whatsapp, discord, gateway-chat
Channel Detection:
Explicit channel parameter
Action source metadata
JID pattern detection:
@s.whatsapp.net or @g.us β WhatsApp
17-20 digit number β Discord
Otherwise β Telegram
Example:
{
"skill" : "send_file" ,
"args" : {
"jid" : "1234567890@s.whatsapp.net" ,
"path" : "/home/user/.orcbot/downloads/report.pdf" ,
"caption" : "Here's the report you requested"
}
}
send_voice_note
Convert text to speech and send as voice message.
Parameters:
Text to convert to speech (max 4096 chars)
Voice name. OpenAI: alloy, echo, fable, onyx, nova, shimmer. Google: achernar, alnilam, kore, etc.
Platform Differences:
WhatsApp/Telegram : Sent as native voice note (playable inline bubble)
Discord : Sent as audio file attachment (no native voice notes)
Example:
{
"skill" : "send_voice_note" ,
"args" : {
"jid" : "1234567890@s.whatsapp.net" ,
"text" : "Hello, this is a voice message from OrcBot!" ,
"voice" : "nova"
}
}
send_image
Generate AI image and send in one step.
Parameters:
size
string
default: "1024x1024"
Image size (1024x1024, 1024x1792, 1792x1024)
Quality: standard, medium, hd
Example:
{
"skill" : "send_image" ,
"args" : {
"jid" : "123456789" ,
"prompt" : "A futuristic city at sunset, cyberpunk style" ,
"channel" : "telegram" ,
"size" : "1024x1024" ,
"caption" : "Here's your generated image"
}
}
Always use send_image instead of generate_image + send_file. The compound skill prevents duplicates and provides atomic operations.
Telegram Rich Features
Send message with inline keyboard buttons.
Parameters:
2D array of button objects. Each button has text and callback_data or url.
Button Format:
buttons : [
[
{ text: "Yes" , callback_data: "yes" },
{ text: "No" , callback_data: "no" }
],
[
{ text: "Learn More" , url: "https://example.com" }
]
]
Example:
{
"skill" : "telegram_send_buttons" ,
"args" : {
"chatId" : "123456789" ,
"message" : "Do you approve this deployment?" ,
"buttons" : [
[{ "text" : "Approve" , "callback_data" : "approve" }, { "text" : "Deny" , "callback_data" : "deny" }],
[{ "text" : "View Changes" , "url" : "https://github.com/org/repo/pull/123" }]
]
}
}
Auto-coercion:
If you pass a 1D array of button objects, the system auto-wraps each button in its own row:
"buttons" : [{ "text" : "A" , "callback_data" : "a" }, { "text" : "B" , "callback_data" : "b" }]
// Auto-converted to: [[{"text": "A", ...}], [{"text": "B", ...}]]
telegram_send_poll
Create a native Telegram poll.
Parameters:
Array of 2-10 option strings
Whether votes are anonymous
Allow multiple selections
Example:
{
"skill" : "telegram_send_poll" ,
"args" : {
"chatId" : "123456789" ,
"question" : "Which deployment time works best?" ,
"options" : [ "6 PM EST" , "8 PM EST" , "10 PM EST" ],
"isAnonymous" : false
}
}
telegram_edit_message
Edit a previously sent message.
Parameters:
Message ID from send_telegram or telegram_send_buttons
Example:
{
"skill" : "telegram_edit_message" ,
"args" : {
"chatId" : "123456789" ,
"messageId" : 54321 ,
"newText" : "Deployment complete! β
"
}
}
Use Case:
Live progress updates without spam:
// Send initial message
send_telegram ( chatId , "Deploying..." )
// Returns: message_id 54321
// Update progress
telegram_edit_message ( chatId , 54321 , "Deploying... 50%" )
telegram_edit_message ( chatId , 54321 , "Deploying... 100%" )
telegram_edit_message ( chatId , 54321 , "Deployment complete! β
" )
telegram_react
React to a message with an emoji.
Parameters:
Example:
{
"skill" : "telegram_react" ,
"args" : {
"chatId" : "123456789" ,
"messageId" : 54321 ,
"emoji" : "π₯"
}
}
Graceful Degradation:
Telegram restricts bots from setting native reactions in most chat types. The skill automatically falls back to replying with the emoji:
Reacted with π₯ via reply (native reaction unavailable for bots in this chat type)
Native reactions only work in channels where the bot is admin .
telegram_pin_message
Pin a message to the top of a chat.
Parameters:
Donβt notify members about the pin
Example:
{
"skill" : "telegram_pin_message" ,
"args" : {
"chatId" : "123456789" ,
"messageId" : 54321 ,
"silent" : true
}
}
Bot must be an admin in groups/channels to pin messages.
Email Management
search_emails
Search inbox with filters.
Parameters:
Only emails from last N days
Example:
{
"skill" : "search_emails" ,
"args" : {
"sender" : "github-notifications@github.com" ,
"daysAgo" : 7 ,
"unreadOnly" : true ,
"limit" : 5
}
}
Response:
Found 5 matching emails:
--- EMAIL (UID: 12345) ---
From: github-notifications@github.com
Subject: [org/repo] New pull request #123
Preview: User opened a new pull request...
[4 more results]
fetch_email
Get full email by UID.
Parameters:
Email UID from search_emails
Example:
{
"skill" : "fetch_email" ,
"args" : {
"uid" : "12345"
}
}
index_emails_to_knowledge_base
Ingest emails into RAG knowledge store.
Parameters:
Same as search_emails, plus collection.
Example:
{
"skill" : "index_emails_to_knowledge_base" ,
"args" : {
"sender" : "team@example.com" ,
"daysAgo" : 30 ,
"collection" : "team-emails" ,
"limit" : 50
}
}
generate_email_report
Synthesize multi-email report.
Parameters:
Example:
{
"skill" : "generate_email_report" ,
"args" : {
"topic" : "Action items and blockers from team standup emails" ,
"sender" : "standup-bot@example.com" ,
"daysAgo" : 7
}
}
Response:
## Email Synthesis Report
Topic: Action items and blockers from team standup emails
Based on 7 emails.
### Key Action Items
1. Alice: Complete API integration by Friday
2. Bob: Review security audit findings
3. Team: Schedule post-mortem for last week's outage
### Blockers
- Waiting on design mockups for feature X
- Database migration needs approval
### Decisions
- Deployment moved to Saturday for safety
Cross-Channel Reactions
Universal reaction skill with auto-detection.
Parameters:
Emoji (raw or semantic: thumbs_up, love, fire, laugh, check, eyes, thinking)
Override channel detection
Override chat ID detection
Emoji Resolution:
thumbs_up β π
love β β€οΈ
fire β π₯
laugh β π
check β β
eyes β π
thinking β π€
Example:
{
"skill" : "react" ,
"args" : {
"message_id" : "54321" ,
"emoji" : "fire"
}
}
Best Practices
Channel selection priority:
Use auto-detection when replying to messages
Set explicit channel parameter for proactive sends
Let the system fall back to configured channels
Avoid cross-channel sends without permission. Autonomy mode blocks cross-channel messaging unless the tool is exempt (like send_email) or the user is an admin.
Memory Store and recall conversation context
Files Send files and media