Slack Setup
Ryvos connects to Slack using Socket Mode, which does not require a public URL or webhook endpoint. This makes it easy to run from behind a firewall.
1. Create a Slack App
- Go to api.slack.com/apps
- Click "Create New App" > "From scratch"
- Name it (e.g., "Ryvos Agent") and select your workspace
2. Enable Socket Mode
- Go to Settings > Socket Mode
- Enable Socket Mode
- Create an App-Level Token with the scope
connections:write - Copy the token (starts with
xapp-)
3. Configure Bot Token Scopes
Go to Features > OAuth & Permissions and add these Bot Token Scopes:
| Scope | Purpose |
|---|---|
chat:write | Send messages |
im:history | Read DM history |
im:read | Access DM channels |
im:write | Open DM channels |
app_mentions:read | Respond to @mentions |
commands | Slash commands (optional) |
4. Subscribe to Events
Go to Features > Event Subscriptions and subscribe to:
| Event | Purpose |
|---|---|
message.im | DM messages |
app_mention | @mentions in channels |
5. Install the App
- Go to Settings > Install App
- Click "Install to Workspace"
- Authorize the permissions
- Copy the Bot User OAuth Token (starts with
xoxb-)
6. Get Your Slack User ID
- Open Slack
- Click your profile picture > "Profile"
- Click the three dots (...) > "Copy member ID"
7. Configure Ryvos
[channels.slack]
enabled = true
bot_token = "${SLACK_BOT_TOKEN}" # xoxb-... token
app_token = "${SLACK_APP_TOKEN}" # xapp-... token (Socket Mode)
dm_policy = "allowlist"
allowed_users = ["U0123456789"]Set the environment variables:
export SLACK_BOT_TOKEN="xoxb-..."
export SLACK_APP_TOKEN="xapp-..."8. Start and Test
ryvos daemon --gatewayDM your bot on Slack:
You: Hello, what can you do?
Ryvos: I'm your AI agent. I can help with file operations, git, code analysis...
Slack Features
Block Kit UI — Rich formatted messages with interactive elements:
┌──────────────────────────────────┐
│ 🔒 *Approval Required* │
│ │
│ Tool: `bash` │
│ Command: `git push origin main` │
│ Tier: T3 (High) │
│ Timeout: 60 seconds │
│ │
│ [Approve ✅] [Deny ❌] │
└──────────────────────────────────┘
Slash commands — Register slash commands in the Slack app settings for quick actions.
Socket Mode — No public URL needed. Works behind firewalls and NAT.
Dual token auth — Bot token for API calls, App token for Socket Mode connection.
Troubleshooting
| Issue | Solution |
|---|---|
| Bot does not connect | Verify app_token (xapp-) is correct. Socket Mode must be enabled. |
| Bot does not respond to DMs | Check dm_policy and allowed_users. Open a DM first. |
| "not_authed" error | Reinstall the app. Check bot_token (xoxb-) is correct. |
| Bot cannot post in channel | Invite the bot to the channel with /invite @ryvos-agent. |
| Missing scopes | Add required scopes and reinstall the app. |
WhatsApp Setup
Ryvos connects to WhatsApp via Meta's Cloud API. This requires a Meta Business account and a verified WhatsApp Business phone number.
1. Set Up Meta Business
- Go to developers.facebook.com
- Create a Meta Developer account (or log in)
- Create a new App > Business type
- Add the WhatsApp product
2. Get Credentials
From the WhatsApp section of your app:
- Temporary Access Token — Click "Get Temporary Access Token" (valid 24h, for testing)
- Phone Number ID — Listed under your test phone number
- Verify Token — You define this yourself (any random string)
For production, generate a permanent System User token:
- Go to Business Settings > System Users
- Create a System User with admin role
- Generate a token with
whatsapp_business_messagingpermission
3. Configure the Webhook
Meta needs to verify your webhook endpoint. Ryvos exposes this at /api/hooks/whatsapp:
- In the Meta Developer Portal, go to WhatsApp > Configuration
- Set the Callback URL to
https://your-domain.com/api/hooks/whatsapp - Set the Verify Token to the same value in your config
- Subscribe to the
messageswebhook field
:::note WhatsApp requires a publicly accessible HTTPS URL for the webhook. If running locally, use a tunnel like ngrok:
ngrok http 8443Then use the ngrok URL as the callback URL. :::
4. Configure Ryvos
[channels.whatsapp]
enabled = true
access_token = "${WHATSAPP_ACCESS_TOKEN}"
phone_number_id = "${WHATSAPP_PHONE_ID}"
verify_token = "${WHATSAPP_VERIFY_TOKEN}"
webhook_port = 8443
allowed_numbers = ["+1234567890"] # E.164 formatSet the environment variables:
export WHATSAPP_ACCESS_TOKEN="EAAx..."
export WHATSAPP_PHONE_ID="123456789"
export WHATSAPP_VERIFY_TOKEN="my-random-verify-string"5. Start and Test
ryvos daemon --gatewaySend a WhatsApp message to your business phone number:
You: Hello
Ryvos: I'm your AI agent. How can I help?
WhatsApp Features
E.164 phone numbers — The allowlist uses international phone number format:
allowed_numbers = ["+14155551234", "+447911123456"]Message splitting — Responses over 4,096 characters are split at paragraph boundaries.
Text-based approvals — WhatsApp does not support interactive buttons in the same way, so approvals use text replies:
🔒 Approval needed
Tool: bash
Command: git push origin main
Tier: T3 (High)
Reply "yes" to approve or "no" to deny (60s timeout)
Webhook verification — On initial setup, Meta sends a verification challenge. Ryvos handles this automatically using the verify_token.
WhatsApp Limitations
| Limitation | Details |
|---|---|
| 24-hour window | You can only respond within 24 hours of the user's last message (Meta policy). |
| No rich formatting | WhatsApp messages are plain text only. No embeds, buttons, or markdown. |
| Rate limits | Meta imposes per-phone-number rate limits (varies by tier). |
| Business verification | For production use, your business must be verified by Meta. |
| Template messages | Messages outside the 24-hour window require pre-approved templates. |
Troubleshooting
| Issue | Solution |
|---|---|
| Webhook verification fails | Check verify_token matches in both config and Meta portal. |
| Messages not arriving | Verify the webhook URL is publicly accessible via HTTPS. |
| "Message failed to send" | Check the access token is valid. Temporary tokens expire in 24h. |
| 24-hour window expired | The user must send a new message first. |
| Phone number not verified | Complete the Meta business verification process. |
Running Both
Slack and WhatsApp can run simultaneously with all other channels:
[channels.slack]
enabled = true
bot_token = "${SLACK_BOT_TOKEN}"
app_token = "${SLACK_APP_TOKEN}"
dm_policy = "allowlist"
allowed_users = ["U0123456789"]
[channels.whatsapp]
enabled = true
access_token = "${WHATSAPP_ACCESS_TOKEN}"
phone_number_id = "${WHATSAPP_PHONE_ID}"
verify_token = "${WHATSAPP_VERIFY_TOKEN}"
webhook_port = 8443
allowed_numbers = ["+1234567890"]All channels share the same agent runtime and memory system. The agent's learned knowledge is available across every channel.
Next Steps
- Telegram & Discord — Setup guides for Telegram and Discord
- Channels Overview — All channels comparison
- Webhooks & Gateway — HTTP API for programmatic access