Orkestia
Blog
Chat

Channels

Organization-managed channels, channels your members create and run when the space allows it, private channels, and archiving

A channel is a room in the chat space. It is open (any member can read and post) or private (only the members added to it). A DM is a private channel between a few members.

There are two ways a channel comes to exist, and they are signed by different keys:

KindCreated bySigned byTracked by the platform
Org channelA person in your organization, from the console or the APIThe space owner key, which owns the channelYes. It appears in data.buzz.channel.list
Member channelAn end user on the chat pageThat person's own chat key, so they own the channelOnly when the platform recorded it. The relay decides what the person may do

Org channels

WantWorkflowInputs
Createbuzz.channel.createspace_uuid, name, visibility (open or private), channel_type (stream or forum), about, member_uuids, app_organization_uuid (only for channel_scope: workspace spaces)
Add or remove a memberbuzz.channel.set-memberspace_uuid, channel_id, member_uuid, present (default true), role (member, admin, guest; actors always join as bot)
Archive or unarchivebuzz.channel.archivespace_uuid, channel_id, archived (default true)
Listdata.buzz.channel.listspace_uuid or identity_app_uuid, include_archived
One member's channelsdata.buzz.member.channelsspace_uuid, member_uuid
start_workflow("buzz.channel.create", {
  "space_uuid": "<space uuid>",
  "name": "support",
  "visibility": "open",
  "about": "Questions about your orders"
})

data.buzz.channel.list is also what the chat page reads for an end user: the channels of their app, open channels, in their workspace. It returns the relay URL and the relay public key the page verifies channel metadata with.

data.buzz.member.channels reads the relay's own signed member lists. It never lists DMs, and it cannot see a private channel the owner key is not in, such as one a member created on the chat page.

Adding an actor to a channel with buzz.channel.set-member makes it a listener there: it answers mentions and DMs in that channel. To make it answer every message of a channel, list the channel in its triggers. See Actors in chat.

Channels your members run

When the space allows it, end users manage channels themselves from the chat page. Each action is an entry point on your identity app that wraps one workflow, and each is signed with the person's own chat key.

Action on the chat pageWorkflowTheme flag (default)
Create a channelbuzz.channel.create-as-member: name, visibility, channel_type, about, member_uuids (up to 20)member_channel_create (off)
Rename, describe, set the topic, archivebuzz.channel.update-as-member: channel_id, name, about, topic, archivedmember_channel_create (off)
Add or remove someonebuzz.channel.invite-member: channel_id, member_uuid, role (member or guest), presentmember_channel_create (off)
Join an open channelbuzz.channel.join: channel_idmember_channel_join (on)
Leavebuzz.channel.leave: channel_idmember_channel_join (on)

To let members create channels, set features.member_channel_create to true in the theme and publish it. See Theme and customization.

The relay applies its own channel rules, and a refusal comes back as channel_command_refused: <relay code>:

  • only a channel's owner and admins can rename it, describe it or archive it; any member can set the topic;
  • private channels cannot be joined, only added to;
  • the last owner cannot leave.

On top of that, the platform refuses a member who tries to give someone an elevated channel role.

Private channels

A private channel starts with its members. An organization creates one with buzz.channel.create, visibility: "private" and member_uuids. A member creates one on the chat page and picks the people to add; that runs buzz.channel.create-as-member with the same two inputs. After that, people are added with buzz.channel.set-member (organization) or the invite action (member).

Files in a private channel are private to the chat space, not only to that channel's roster. Opening a file requires a current member of the space. A URL forwarded outside the space does not work. If you do not want attachments in private channels and DMs at all, set media.allow_in_private_channels to false in the theme. See Limits.

Relay owners and admins are not automatically members of a private channel. If your organization needs to read one, add a member to it rather than expecting admin access.

Ask your AI assistant

prompts
List the channels of my chat space with data.buzz.channel.list, including archived ones.

Create an open channel called "announcements" in my chat space. Show me the buzz.channel.create inputs and wait for my confirmation.

Which channels is the member "<name>" in? Use data.buzz.member.list to find them, then data.buzz.member.channels.

Let my end users create their own channels: update the theme so member_channel_create is true, save it as a draft and publish after I confirm.

For AI agents

RuleDetail
Channel idsTake channel_id from data.buzz.channel.list. Channel ids are uuids
Org vs member verbsbuzz.channel.create, set-member and archive are for people in the organization. The *-as-member, join, leave and invite-member verbs are end-user entry points; an organization caller cannot use them on someone's behalf
Relay decidesA channel_command_refused is the relay's permission rule. Do not retry with other inputs; explain it
Flags are not wallsTurning member_channel_create off stops the platform path, not a member using their own relay client