I use all kinds of online systems to interact with my team, friends, and family. I usually set my availability and status based on where I operate. The problem is the language and meaning differ slightly in every system. The systems don't talk to each other. And there are very few offline systems that integrate. So this is my effort to solve these problems in the long term.
Status and Availability
Your availability
indicates your current availability to get distracted or to be contacted or your ability to respond. It's a predefined (enum) word or a predefined emoji. This is a required field. Some systems call them as presence but availability
makes more sense.
A status
can be an emoji, short message, etc. It's not necessary but adds to the context. It's more descriptive. For example, when your availability
is set to busy
, your status could be "Attending Training." You can be more creative and use #
hashtags to group them and @
to refer to people.
Unified Status
Emoji Icon | Unified Availability | Meaning | Mapped Status | Comments |
---|---|---|---|---|
free | I am available or I am free and have time to respond to you. | free, available, active, online | ||
busy | I am busy currently. Think before contacting me. I don't want notifications or pings. | busy | ||
dnd | Do not disturb. | dnd, do not disturb | ||
away | I am away currently. May not respond quickly. Might respond in some time. Expect delay. | away, idle, be right back, appear away | ||
offline | I am not reachable. Your messages may not reach me. Expect your your messages to be lost. | offline, appear offline, unavailable, invisible |
Payload
{
"_id": "*unique id, as such no specific way to generate it. Left to the system",
"version": "*version",
"time": "*date with seconds and timezone as per RFC3339",
"user": "username or email of this person",
"availability": "*one of the enum values",
"status": "*text message",
"source": "the system that is the source of this update"
}
Examples
While I am working
{
"_id": "dd5f84765c45698d8fa275f98e6d9ef1",
"version": 0.1,
"time": "2016-05-26T11:42:00.73+05:30",
"user": "@thej",
"availability": "busy",
"status": "I am fixing #p0 issues.",
"source": "slack"
}
The one I use at home while I am recording
{
"_id": "dd5f84765c45698d8fa275f98e6d9e22",
"version": 0.1,
"time": "2018-05-26T11:42:00.73+05:30",
"user": "@thej",
"availability": "dnd",
"status": "Recording the videos. On Air.",
"source": "cli"
}
When I am on vacation
{
"_id": "dd5f84765c45698d8fa275f98e6d9e23",
"version": 0.1,
"time": "2022-05-26T11:42:00.73+05:30",
"user": "@thej",
"availability": "offline",
"status": "On leave, away from computers.",
"source": "calendar"
}
API
WIP. Currently there is only two APIs. Get with some filters and Set value. I am finalizing it. I should be publish with some intial code.
References
- Slack status and availability
- Change your status in Teams
- Change your availability status and mute notifications in Google Chat
- Zulip - status and availability
- Changing Online Status in Discord
- Set your status and availability
- Mattermost - Set your status and availability
- The different Statuses in Cliq
- Matrix Presence API
- Cisco Unified Presence Interfaces