Unified User Status and Availability API

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 IconUnified AvailabilityMeaningMapped StatusComments
🟢freeI am available or I am free and have time to respond to you.free, available, active, online
🔴busyI am busy currently. Think before contacting me. I don't want notifications or pings.busy
⛔dndDo not disturb.dnd, do not disturb
🟡awayI am away currently. May not respond quickly. Might respond in some time. Expect delay.away, idle, be right back, appear away
⚪offlineI 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

Do you like this post? Please rate, its just a click :) 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...