Chamade
Voice and chat gateway for AI agents.
От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетНужен API-ключRU / СНГБесплатноТолько чтение
Что умеет
- Chamade Call Join: Join a voice meeting. The platform is auto-detected from the URL (Discord, Teams, Meet, Telegram, SIP, NC Talk, Zoom, WhatsApp). Returns a call_id, capabilities, and — for voice cal
- Chamade Call Accept: Answer a ringing inbound call. Use this when chamade_call_list or a call_invite event shows a call in 'ringing' state (incoming phone call). The call transitions to 'active' and y
- Chamade Call Refuse: Refuse (reject) a ringing inbound call. The call is ended and the caller hears a disconnect.
Какие данные видит
Нужен ли аккаунт
Нужен API-ключ из настроек сервиса
Voice and chat gateway for AI agents. Joins voice meetings and DMs on Discord, Microsoft Teams, Google Meet, Nextcloud Talk, Zoom, Telegram, WhatsApp, and SIP phones, exposing audio and chat as uniform APIs your agent can drive.
Список инструментов сервера (15)
Технические названия из tools/list. Нужны только разработчикам.
| chamade_call_join | Join a voice meeting. The platform is auto-detected from the URL (Discord, Teams, Meet, Telegram, SIP, NC Talk, Zoom, WhatsApp). Returns a call_id, capabilities, and — for voice calls — an `audio` block with the raw-PCM WebSocket URL you can wire to your own stack as the alternative to hosted STT/TTS. Recommended flow: the user enables an STT/TTS preset in /dashboard → Voice providers (BYOK — they bring the ElevenLabs / Deepgram key, Chamade runs the pipeline for free). Transcripts then flow as `call_transcript` events and you speak with `chamade_call_say`, no WebSocket plumbing needed. Use chamade_call_chat for text messages (works on any platform). Stay in the call between exchanges — use chamade_call_leave only when asked or the meeting ends. WARNING for platform=sip: outbound calls require a SIP trunk connected by the operator in /dashboard (BYOT only — Chamade does not provide trunks); the call uses those credentials and the URL must be a SIP URI like `sip:+33612345678@sip.example.com`. WARNING for platform=meet: real-time audio_in relies on Google's Meet Media API (Developer Preview); every meeting participant must be enrolled in Google's program. |
| chamade_call_accept | Answer a ringing inbound call. Use this when chamade_call_list or a call_invite event shows a call in 'ringing' state (incoming phone call). The call transitions to 'active' and you can start speaking. |
| chamade_call_refuse | Refuse (reject) a ringing inbound call. The call is ended and the caller hears a disconnect. |
| chamade_call_say | Speak text aloud in the meeting via Chamade's hosted TTS. Only works when the call was created by a user who has a TTS preset configured in the dashboard (/dashboard → Voice providers). Returns 400 otherwise — in that case synthesize locally and send PCM on the call's audio WebSocket. Write naturally and concisely — avoid markdown. Use punctuation for delivery. Speech-only: this tool does not change call state. A goodbye spoken with `chamade_call_say` is audible to participants but leaves the call connected; `chamade_call_leave` is the tool that terminates the call. |
| chamade_call_stop_speaking | Cancel any in-flight TTS utterance on this call — agent self-interrupt. Use when you changed your mind mid-sentence (new information arrived, the user asked you to stop, a faster downstream answer is ready). Flushes the TTS pipeline buffer immediately; the utterance stops within a few milliseconds. No-op if nothing is currently being spoken. Only effective on calls running the hosted TTS pipeline; for BYO-audio paths, stop sending PCM on your audio WebSocket instead. |
| chamade_call_chat | Send a text chat message in the meeting. Set sender_name to identify yourself (e.g. your name or 'AI Assistant'). Optional `attachments` to send files in the meeting chat. Prefer file_id (upload once via POST /api/files multipart, then pass the token) or url over bytes_b64 — inline base64 forces the model to stream every character of the payload, so files bigger than ~2 KB produce a long visible stall before the tool call is dispatched. Each entry is one of: - {file_id}: a token returned by a prior POST /api/files upload - {url, name?, mime?}: fetch from a public URL - {bytes_b64, name, mime}: inline bytes (base64) `text` becomes the caption for the first attachment. Either `text` or `attachments` is required. File support is per-platform — call chamade_account to see which platforms have files=true. |
| chamade_call_typing | Send a typing indicator in the call's chat. Only works on platforms with 'typing' in capabilities. |
| chamade_call_status | Get call status and new transcript lines since last check (delta pattern — only new lines each call). Call this in a loop to drive the call. |
| chamade_call_leave | Terminate the call: removes the agent from the meeting, releases the room, and ends the audio bridge. This is the only tool that actually ends a call — a farewell spoken with `chamade_call_say` is audible to participants but leaves the call connected until this tool (or a timeout) runs. |
| chamade_call_list | List all active calls for the current user. |
| chamade_dm_chat | Send a message to the active DM conversation on a platform. The message is delivered to the user on their platform (Discord, Telegram, Teams, etc.). Respect platform character limits: discord 2000, telegram 4096, whatsapp 1600, slack 3000, teams ~28000, nctalk 32000. Set keep_typing=true when sending a quick acknowledgment before a long task — it re-activates the typing indicator automatically after sending. WhatsApp-specific: if the 24-hour customer service window is closed, the message is queued (status='queued' instead of 'delivered') and a re-engagement template is sent automatically. Queued messages are flushed in order as soon as the user replies — no retry needed on your side. Optional `attachments` to send files alongside the text. Prefer these in order: 1. {file_id}: token returned by POST /api/files. For any local file, upload first via multipart (e.g. `curl -F file=@path -H "X-API-Key: ..." {public_url}/api/files`) then pass the file_id. This is the correct path for files you generated or have on disk. 2. {url, name?, mime?}: have Chamade fetch from a public URL (CDN, inbox attachment `url`, etc.). 3. {bytes_b64, name, mime}: inline base64 bytes. **Only** for very small payloads (<2 KB decoded). Emitting large base64 strings as a tool argument forces the model to stream every character token-by-token — a 100 KB image takes 30–60s of pure output time before the tool call even leaves your runtime. Use file_id for anything bigger than a tiny icon. `text` acts as the caption on the first attachment (subject to platform support — audio messages have no captions on most platforms). Either `text` or `attachments` is required. File support is per-platform — call chamade_account to see which platforms have files=true before sending. |
| chamade_file_upload_url | Reserve a file_id and return a short-lived (5 min) pre-signed URL that accepts a multipart POST with **no auth header**. After uploading the bytes, pass the returned `file_id` in `attachments` on chamade_dm_chat or chamade_call_chat. **This is the correct pattern for sending any non-trivial local file.** Unlike `bytes_b64` (which forces the model to stream every base64 character through its own output token budget — 30–60s stall for a 100 KB image), curl reads the file directly from the shell and ships raw bytes to Chamade. The tool call itself stays tiny (~80-char URL), so the model output is instant even for 10 MB attachments. Flow: 1. chamade_file_upload_url(name='photo.png', mime='image/png') → {upload_url, file_id, expires_at} 2. Shell: curl -F 'file=@/tmp/photo.png' <upload_url> (no -H, no API key — the URL itself is the auth) 3. chamade_dm_chat(platform='nctalk', attachments=[{'file_id': '...'}]) The slot is single-use: once bytes land, further POSTs to the same URL return 404. If the 5 min window expires before upload, mint a fresh slot. |
| chamade_dm_typing | Send a typing indicator on a DM conversation. Use this before composing a reply so the user sees you are working on it. Only works on platforms with 'typing' in capabilities (Discord, Teams, Telegram, NC Talk). |
| chamade_inbox | Check inbox for DM/group conversations across all platforms. Perspective: this tool operates from the `agent` identity configured on each platform. The human operator may also appear as a `peer` when they message their own agent (self-chat). Never assume 'you' means the operator; match sender handles against the agent/peer block. Three modes: 1. No params → snapshot of all active conversations with a last-message preview each. 2. platform=X → detail view: agent/peer identities + recent message history. 3. last_message_cursor=X → delta: only conversations with new messages since the cursor, grouped with their new messages. Use in a polling loop to avoid replaying history. **Call events in delta mode** (polling replacement for `claude/channel` push): the server also returns any pending `call_invite` / `call_state` / `call_transcript` events for this user. Track `call_event_cursor` alongside `last_message_cursor` — pass both back on every poll. An incoming call shows up as 'CALL INVITE' in the output; accept/refuse with `chamade_call_accept` / `chamade_call_refuse`. Transcripts stream in as `CALL ...: <speaker>: <text>` lines. Long polling (delta mode only): pass wait=<seconds> together with last_message_cursor to block until a new message or call event arrives, or the timeout elapses. Server caps wait at 55s so the request never exceeds reverse-proxy read timeouts. The call-event signal wakes the poll too — a ringing call won't sit unanswered for up to 55s. WhatsApp 24h window state: conversations expose `whatsapp_window` showing whether the window is open/closed and how many outbound messages are pending. Shown as `wa=open` / `wa=closed (2 pending)` next to each WhatsApp conv. File attachments: messages with attachments are shown with a nested `[kind] name SIZE → url` line per file. The URL is a Chamade-hosted endpoint you can GET directly with your API key (Authorization: Bearer chmd_…). Supported kinds: image, audio, video, document. To SEND files, pass them on `chamade_dm_chat` / `chamade_call_chat` via the `attachments` param — either upload once via `POST /api/files` and pass `file_id`, or inline via `url` or `bytes_b64`. |
| chamade_account | Check account status: plan, credit/quota remaining, per-platform readiness, and the identity map (agent handle + operator handle per platform). Use this as your cold-start bootstrap: it returns last_message_cursor for the polling loop of chamade_inbox and anchors which handle on each platform is your agent vs the human operator. |