Skip to main content

Messaging Platforms

Messaging Channels let you talk to the resident Anyy Gateway from services you already use. Each configured account has its own connection profile, credentials, and direct/group access policy.

Supported Platforms​

The current channel catalog implements:

PlatformConnection
TelegramBot API long polling
DiscordBot Gateway
SlackSocket Mode
WhatsAppBusiness Cloud API webhook
FacebookMessenger webhook
EmailIMAP receive and SMTP send over TLS
SMSTwilio webhook and REST
DingTalkStream connection
Feishu / LarkDefault long connection; existing webhook accounts can be updated
Weixin / WeChatQR-confirmed long polling
QQ BotWebSocket Gateway
IRCTLS and SASL
LINEMessaging API webhook

The setup wizard is the authoritative catalog for the installed version. Entries marked unsupported by the wizard cannot be activated merely by adding guessed configuration.

Quick Setup​

Start the resident Gateway for the selected Profile, then open the interactive channel wizard:

anyy gateway start
anyy setup channel

The wizard reads the running Gateway catalog. Choose the platform and fill the inputs it actually offers, including CLI policy choices; review the summary before writing. It uses the default connection profile for an unconfigured platform and does not provide a general profile-switch selector. The current setup surfaces create an account only when that platform has none; an existing account is updated.

In a non-interactive terminal, the command without a platform prints the catalog. Adding a platform name selects non-interactive configuration: anyy setup channel telegram does not open a Telegram-specific wizard. Keep the resident Gateway available for both setup and messaging.

Verify local chat first

Configure and test the main model in Dashboard or the TUI before adding a Channel. This separates model/provider problems from messaging connection problems.

Dashboard Setup​

Open Dashboard → Channel to see saved accounts and available platform types. “Configured” means saved in this Profile, not necessarily connected. From there you can:

  • add an account;
  • use the platform's default configuration entry;
  • enter non-secret fields and credentials;
  • edit the fields exposed by that account's Dashboard action;
  • inspect account detail and health;
  • reload Channels; and
  • remove a connection.

Weixin / WeChat exposes QR login and a bound-account sender-access form in Dashboard. Other platforms' Dashboard/TUI credential forms do not expose the CLI DM/group policy inputs. Use anyy setup channel in an interactive terminal to change those policies. The catalog can declare actions that a particular surface does not offer; Feishu switching is one such limitation.

Access and Pairing​

Channel profiles can offer policies such as open access, pairing, allowlists, mention-only group access, or disabled inbound access. Available choices depend on the platform contract.

Current sender-list inputs are available in bound-Weixin access forms and the IRC CLI wizard. Other sender/group lists can be used when already present, but current setup actions do not edit their entries. Selecting allowlist does not populate one; an empty/non-matching list denies the sender. Do not guess extra --set keys or edit state.db.

Pairing request management is available from the CLI; the current Dashboard Channel page has no pairing approval list. List pending requests:

anyy channel pairing list

Approve or reject by request ID:

anyy channel pairing approve --request REQUEST_ID
anyy channel pairing reject --request REQUEST_ID

Approve a sender’s pairing request using an interactively entered code:

anyy channel pairing approve --prompt-code \
--channel telegram --account personal

Revoke an existing grant:

anyy channel pairing revoke --grant GRANT_ID --reason "access removed"
Pairing grants access to your assistant

Verify the person/account and platform before approval. A grant can expose conversation access and enabled assistant capabilities under that Channel's policy.

Conversation Scope​

Anyy reuses a bound Session for the same current account, peer, and thread route. Shared rooms have shared conversation context. Platform reply context varies: Slack and Discord preserve their threads, while the current WhatsApp and Email routes also use inbound message identifiers. Messages from the same contact therefore do not universally share one Anyy Session.

/new creates a fresh Session for the current route; /stop interrupts its active execution. A failed command reply does not undo a committed local action. Recreating an account or changing its identity does not grant a replacement connection permission to replay historical replies.

Health and Reload​

Inspect one platform:

anyy channel doctor telegram

Reload channel configuration in the running Gateway:

anyy channel reload

Add --json to supported doctor, pairing-list, or reload commands when another program needs structured output. A local action receipt, an adapter capability declaration, and observed message delivery are separate facts. The shipped catalog can label an executable profile Preview; test the actual account and each capability you need.

Platform acceptance does not mean the recipient read the message. A send without acknowledgement can remain sent_unconfirmed. New final replies are retried only when the failure is known to be safe before an external effect; partial or uncertain sends are not automatically repeated as a whole. Inspect the conversation before requesting another copy. Reload reconciles current accounts rather than replaying old history.

Non-Interactive Setup​

Automation can configure one platform with the channel action contract:

anyy setup channel CHANNEL \
[--set INPUT=VALUE] \
[--sensitive-fd INPUT=FD] \
[--external-locator-fd INPUT=FD]

An already configured Telegram account can, for example, update its policy with anyy setup channel telegram --set dm_policy=pairing --set group_policy=mention. Creating a new account also requires its declared credentials.

Use --set for non-secret inputs. Use --sensitive-fd with a dedicated open descriptor numbered 3 or higher for credentials so values do not appear in process arguments or shell history. --external-locator-fd supplies externally managed secret locations when the selected input supports them.

The exact input IDs are defined by the selected platform/profile and are shown by its setup flow. Do not guess field names from another Channel.

Webhook Platforms​

WhatsApp, Facebook, SMS, LINE, and the Feishu webhook profile require inbound webhook delivery. Their setup contract asks for the platform-specific callback fields and verification credentials.

The shared webhook listener is disabled by default. Enable it in the selected Profile's config.yaml:

channel_webhooks:
enabled: true
listen: 127.0.0.1:8770

Restart the Gateway after changing this startup setting. anyy channel reload alone does not start a previously disabled listener. Route the platform's exact /channels/PLATFORM/ACCOUNT_ID/webhook path through HTTPS to this listener, not to the Dashboard port. Preserve the body and signature headers, keep verification secrets private, and complete the platform subscriptions/permissions. Twilio also validates the original public URL.

Troubleshooting​

ProblemFix
Account saves but never receivesRun anyy gateway status and anyy channel doctor CHANNEL
A long-poll/WebSocket Channel disconnectsCorrect credentials/network access, then anyy channel reload
Webhook verification failsCheck public HTTPS routing, callback URL, signature secret, and platform subscription
Direct message is ignoredReview DM policy, pairing state, and allowlist
Group message is ignoredReview group policy and whether a mention is required
Wrong person was pairedRevoke the grant immediately and review pending/active access