RingCentral Team Messaging gateway adapter for Hermes Agent
Project description
Hermes RingCentral Plugin
RingCentral Team Messaging support for Hermes Agent. This plugin lets a Hermes agent talk through a RingCentral bot, reply in threads, read owner-visible chat history when explicitly requested by the owner, and deliver scheduled notifications into RingCentral.
Quick Start
Install with the Hermes plugin manager:
hermes plugins install ringclaw/hermes-ringcentral --enable
The installer prompts for RC_BOT_TOKEN and saves it to ~/.hermes/.env. If
the plugin is already installed but disabled, enable it with:
hermes plugins enable ringcentral-platform
Restart the gateway after installing or changing credentials:
hermes gateway restart
For first-time gateway setup, hermes gateway start is also fine.
RingCentral App Setup
Create a RingCentral bot app in the RingCentral developer portal:
- Sign in at https://developers.ringcentral.com/.
- Create an app with the Bot platform type.
- Grant at least these permissions:
TeamMessagingfor reading and writing team messagesReadAccountsfor resolving the bot extensionWebSocketsSubscriptionfor live message events
- Install or publish the bot to the target RingCentral account.
- Copy the bot JWT and use it as
RC_BOT_TOKEN.
For owner-only history summaries or fallback sends, also configure a user JWT
app for the owner account and set all three RC_USER_* variables.
Configuration
Minimum:
export RC_BOT_TOKEN="<bot JWT>"
Common optional settings:
# Production is the default. Use devtest for sandbox accounts.
export RC_SERVER_URL="https://platform.ringcentral.com"
# Owner mode: enables owner-only history reads and fallback sends.
export RC_USER_CLIENT_ID="<owner app client id>"
export RC_USER_CLIENT_SECRET="<owner app client secret>"
export RC_USER_JWT_TOKEN="<owner JWT>"
export RC_HISTORY_MESSAGE_LIMIT=250
# User access control. If owner mode is configured and this is unset,
# the plugin auto-seeds the owner email as the only allowed user.
export RC_ALLOWED_USER_EMAILS="owner@example.com,teammate@example.com"
export RC_ALLOW_ALL_USERS=false
# Group/team channel controls.
export RC_ALLOWED_CHANNELS="g-abc123,g-def456"
export RC_IGNORED_CHANNELS="g-muted"
export RC_REQUIRE_MENTION=true
export RC_FREE_RESPONSE_CHANNELS="g-abc123"
export RC_THREAD_REQUIRE_MENTION=false
# Threading and delivery.
export RC_REPLY_TO_MODE=first
export RC_NO_THREAD_CHANNELS="g-announcements"
export RC_PROCESSING_EMOJI_ENABLED=true
export RC_PROCESSING_EMOJI_EDIT_DELAY_SECONDS=5
export RC_HOME_CHANNEL="g-abc123"
export RC_HOME_CHANNEL_NAME="Hermes Updates"
# Inbound attachments are downloaded only after message admission succeeds.
export RC_ATTACHMENT_DOWNLOAD_ENABLED=true
export RC_ATTACHMENT_MAX_COUNT=5
export RC_ATTACHMENT_MAX_BYTES=5242880
Put persistent values in ~/.hermes/.env if you do not want to export them in
your shell each time.
How To Use
Direct messages
DM the RingCentral bot and talk to Hermes normally:
Can you draft a deployment update for the team?
Only the configured owner or users in RC_ALLOWED_USER_EMAILS can trigger the
bot. Unauthorized DMs are ignored.
Group and team chats
Mention the bot in a group/team chat:
@Hermes summarize the decision in this thread
By default, group messages require a bot mention. You can allow selected
channels to trigger without mentions by setting RC_FREE_RESPONSE_CHANNELS, or
disable mention requirements globally with RC_REQUIRE_MENTION=false.
Owner history summaries
From the owner-bot DM, ask Hermes for a group or DM summary in natural language:
Summarize Project Team since yesterday.
总结我和 Alice Wang 今天的聊天
Hermes may call the ringcentral_get_recent_messages tool to fetch recent
source messages visible to the owner. The plugin returns structured history;
Hermes Agent decides the intent, target, time window, and final summary. Other
users cannot use this tool to read history.
Cron and notifications
Set RC_HOME_CHANNEL to route Hermes cron jobs and notifications into
RingCentral:
Create a daily 9am reminder and deliver it to RingCentral.
Feature Highlights
- Hermes-native plugin install via
hermes plugins install. - Bot-first messaging for normal conversations, with optional owner fallback when the bot is not in a target chat.
- Owner-only chat history tool for group and direct-message summaries, with intent and summarization handled by Hermes Agent.
- Thread replies using RingCentral Team Messaging
parentPostId/threadIdwhere supported. - Waiting emoji in threads: Hermes posts
👀, edits it to⏳after a short delay, then deletes it when the final reply is delivered. - Discord-style controls for allowed users, allowed channels, ignored channels, mention requirements, free-response channels, and thread follow-up behavior.
- Attachment handling for inbound images, audio, and documents so Hermes tools can work with downloaded files.
- Cron delivery through
RC_HOME_CHANNEL, including out-of-process cron sender support. - Webhook text fallback for integration posts where the modern Team Messaging posts API returns empty text.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Plugin does not load | Installed but not enabled | Run hermes plugins enable ringcentral-platform and restart the gateway |
Gateway logs RC_BOT_TOKEN not configured |
Missing bot JWT | Set RC_BOT_TOKEN in ~/.hermes/.env |
Gateway logs RingCentral rejected bot token |
Bad or expired JWT | Re-issue the bot JWT in the RingCentral developer portal |
| Owner history request says credentials are missing | RC_USER_* is incomplete |
Set RC_USER_CLIENT_ID, RC_USER_CLIENT_SECRET, and RC_USER_JWT_TOKEN |
| Bot does not reply in a group | No mention, blocked user, or blocked channel | Mention the bot and check RC_ALLOWED_USER_EMAILS, RC_ALLOWED_CHANNELS, and RC_IGNORED_CHANNELS |
| Replies are not threaded in a chat | RingCentral UI/API behavior or channel disabled threads | Check RC_REPLY_TO_MODE and RC_NO_THREAD_CHANNELS |
Development
Run the RingCentral test suite with Hermes Agent on PYTHONPATH:
PYTHONPATH=/root/workspace/github/NousResearch/hermes-agent \
uv run --with PyYAML --extra dev pytest -q tests/test_ringcentral.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_ringcentral-2026.6.7.tar.gz.
File metadata
- Download URL: hermes_ringcentral-2026.6.7.tar.gz
- Upload date:
- Size: 59.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65da9989402b24556db661bd27eecb5c1fac5bdfb4a2dabac9c985bbc3f6804a
|
|
| MD5 |
121c97dad6479b6f034ffa75af33c5e8
|
|
| BLAKE2b-256 |
d8f5f055251ca894d0be1f2c69ef952a0a4c52fca74af22f2c495d4d004133ad
|
Provenance
The following attestation bundles were made for hermes_ringcentral-2026.6.7.tar.gz:
Publisher:
release.yml on ringclaw/hermes-ringcentral
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_ringcentral-2026.6.7.tar.gz -
Subject digest:
65da9989402b24556db661bd27eecb5c1fac5bdfb4a2dabac9c985bbc3f6804a - Sigstore transparency entry: 1737877129
- Sigstore integration time:
-
Permalink:
ringclaw/hermes-ringcentral@eb404f65d2c9562284b1627a8935a0d56acbef6c -
Branch / Tag:
refs/tags/v2026.6.7 - Owner: https://github.com/ringclaw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@eb404f65d2c9562284b1627a8935a0d56acbef6c -
Trigger Event:
push
-
Statement type:
File details
Details for the file hermes_ringcentral-2026.6.7-py3-none-any.whl.
File metadata
- Download URL: hermes_ringcentral-2026.6.7-py3-none-any.whl
- Upload date:
- Size: 45.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f8293307a8f43f60bcc2cf96c96fd333308d07dd2b89bd1ef8090b9ec6d4f59
|
|
| MD5 |
c484e97cbf401a18385bb0eaada519b0
|
|
| BLAKE2b-256 |
bd6e2777a814652ed3b365243ce7b10cacb2e291acef5d05bbf4844505b21973
|
Provenance
The following attestation bundles were made for hermes_ringcentral-2026.6.7-py3-none-any.whl:
Publisher:
release.yml on ringclaw/hermes-ringcentral
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_ringcentral-2026.6.7-py3-none-any.whl -
Subject digest:
3f8293307a8f43f60bcc2cf96c96fd333308d07dd2b89bd1ef8090b9ec6d4f59 - Sigstore transparency entry: 1737877174
- Sigstore integration time:
-
Permalink:
ringclaw/hermes-ringcentral@eb404f65d2c9562284b1627a8935a0d56acbef6c -
Branch / Tag:
refs/tags/v2026.6.7 - Owner: https://github.com/ringclaw
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@eb404f65d2c9562284b1627a8935a0d56acbef6c -
Trigger Event:
push
-
Statement type: