External events are activity streams send to the configured external queue (e.g. RabbitMQ).

A room was renamed

Example of activity posted to the external queue:

{
    "actor": {
        "displayName": "username",
        "id": "1243"
    },
    "target": {
        "displayName": "Y29vbCBndXlz",
        "summary": "Y29vbCBndXlz",
        "id": "1aa3f5f5-ba46-4aca-999a-978c7f2237c7",
        "objectType": "room",
        "attachments": [{
          "objectType": "owner",
          "id": "1971",
          "displayName": "Robby"
        }]
    },
    "verb": "rename",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}
  • actor.id: ID of the user who renamed the room, or 0 if from admin interface,
  • actor.displayName: name of the user who renamed the room, or "admin" if from admin interface,
  • target.displayName: base64 encoded new room name,
  • target.summary: base64 encoded old room name,
  • target.id: UUID of the room.

A room was removed

Example of activity posted to the external queue:

{
    "actor": {
        "displayName": "username",
        "id": "1243"
    },
    "target": {
        "displayName": "Y29vbCBndXlz",
        "summary": "Y29vbCBndXlz",
        "id": "1aa3f5f5-ba46-4aca-999a-978c7f2237c7",
        "objectType": "room",
        "attachments": [{
          "objectType": "owner",
          "id": "1971",
          "displayName": "Robby"
        }]
    },
    "object": {
        "content": "<base64 encoded reason for room removal>",
        "objectType": "reason"
    },
    "verb": "removed",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}
  • actor.id: ID of the user who removed the room, or 0 if from admin interface,
  • actor.displayName: name of the user who removed the room, or "admin" if from admin interface,
  • target.displayName: base64 encoded room name,
  • target.id: UUID of the room,
  • object.content: base64 reason for room removal.

User was kicked from a room

Example of activity posted to the external queue:

{
    "actor": {
        "displayName": "admin",
        "id": "0"
    },
    "object": {
        "displayName": "YXNkZg==",
        "content": "dGhpcyBpcyBhIHJlYXNvbg==",
        "id": "197114"
    },
    "target": {
        "displayName": "Y29vbCBndXlz",
        "id": "1aa3f5f5-ba46-4aca-999a-978c7f2237c7"
    },
    "verb": "kick",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}
  • actor.id: ID of the user who kicked, or 0 if from admin interface,
  • actor.displayName: name of the user who kicked, or admin if from admin interface,
  • object.id: ID of the user who got kicked,
  • object.content: base64 encoded "reason" for the kick (optional),
  • object.displayName: base64 encoded username of the user was kicked,
  • target.id: UUID of the room the user was kicked from,
  • target.displayName: base64 encoded name of the room.

User used a blacklisted word

{
    "actor": {
        "displayName": "YmF0bWFu",
        "id": "997110"
    },
    "object": {
        "content": "aGVsbG8gZnVjayB5b3U=",
        "summary": "ZnVjaw=="
    },
    "target": {
        "displayName": "Y29vbCBndXlz",
        "id": "1aa3f5f5-ba46-4aca-999a-978c7f2237c7"
    },
    "verb": "blacklisted",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}
  • target.displayName: name of the room the message was sent in,
  • target.id: uuid of the room the message was sent in,
  • actor.id: id of the user who sent the message,
  • actor.displayName: username of the user who sent the message,
  • object.content: the full message that was sent,
  • object.summary: the forbidden word that was used.

User send a message that got classified as a spam message

{
    "actor": {
        "displayName": "YmF0bWFu",
        "id": "997110"
    },
    "object": {
        "content": "aGVsbG8gZnVjayB5b3U="
    },
    "target": {
        "displayName": "Y29vbCBndXlz",
        "id": "1aa3f5f5-ba46-4aca-999a-978c7f2237c7"
    },
    "verb": "spam",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}
  • target.displayName: name of the room the message was sent in,
  • target.id: uuid of the room the message was sent in,
  • actor.id: id of the user who sent the message,
  • actor.displayName: username of the user who sent the message,
  • object.content: the full message that was sent,

User was banned

Example of activity posted to the external queue:

{
    "actor": {
        "displayName": "admin",
        "id": "0"
    },
    "object": {
        "displayName": "YXNkZg==",
        "id": "1234",
        "summary": "5m",
        "content": "dGhpcyBpcyBhIHJlYXNvbg==",
        "updated": "2016-12-22T07:13:09Z"
    },
    "target": {
        "displayName": "Y29vbCBndXlz",
        "objectType": "room",
        "id": "1aa3f5f5-ba46-4aca-999a-978c7f2237c7"
    },
    "verb": "ban",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}
  • actor.id: ID of the user who banned, or 0 if from admin interface,
  • actor.displayName: name of the user who banned, or admin if from admin interface,
  • object.id: ID of the user who got banned,
  • object.displayName: base64 encoded username of the user was banned,
  • object.content: base64 encoded "reason" for the ban (optional),
  • object.summary: the ban duration,
  • object.updated: the datetime when the ban will expire (in UTC),
  • target.id: UUID of the room the user was kicked from,
  • target.displayName: base64 encoded name of the room,
  • target.objectType: one of "room", "channel", "global" (if "global", no displayName or id will be on target)

Server restarted

When the server REST node starts up it will sent a restart event in this format:

{
    "verb": "restart",
    "id": "c694ddc3-1b2b-4d43-ae5a-a843c2dce8aa",
    "published": "2017-06-09T07:26:26Z"
}

User joins room

When a user joins a room the following activity is published to rabbitmq:

{
    "object": {
        "attachments": [{
            "content": "MA==",
            "objectType": "membership"
        }, {
            "content": "eQ==",
            "objectType": "image"
        }, {
            "content": "bQ==",
            "objectType": "gender"
        }, {
            "content": "NzA=",
            "objectType": "age"
        }, {
            "content": "c2hhbmdoYWk=",
            "objectType": "city"
        }, {
            "content": "Y24=",
            "objectType": "country"
        }, {
            "content": "eQ==",
            "objectType": "fake_checked"
        }, {
            "content": "eQ==",
            "objectType": "has_webcam"
        }]
    },
    "target": {
        "displayName": "YmFkIGtpZHo=",
        "id": "675eb2a5-17c6-45e4-bc0f-674241573f22"
    },
    "id": "bfa26b43-492f-4ec9-a83e-32e64ba2bc51",
    "actor": {
        "displayName": "YXNvZGZpaGFzZG9maWg=",
        "id": "385280",
        "image": {
            "url": "n"
        }
    },
    "published": "2017-01-04T09:58:37Z",
    "verb": "join"
}

User ban was removed

Example of activity when a user's ban was manually removed in the admin interface:

{
    "actor": {
        "id": "0",
        "displayName": "YWRtaW4="
    },
    "target": {
        "id": "675eb2a5-17c6-45e4-bc0f-674241573f22",
        "displayName": "YmFkIGtpZHo=",
        "objectType": "room"
    },
    "published": "2017-01-03T05:50:11Z",
    "verb": "unban",
    "id": "49b067bb-79fe-48bd-9c03-dc4fd8f60192",
    "object": {
        "id": "124352",
        "displayName": "Zm9vYmFyenoyMw=="
    }
}
  • target.id: room ID or channel ID
  • target.objectType: "room", "channel" or "global"
  • object.id: ID of the user
  • object.displayName: name fo the user

If target.objectType is global then no target.id or target.displayName will be included.

User sends a message to a room/user

Whenever a user sends a message an event will be published to the configured MQ, so another system can analyze activity level of users. Example activity:

{
    "actor": {
        "id": "<user ID>",
        "displayName": "<base64 encoded username>"
    },
    "object": {
        "id": "<uuid of the message that was sent>"
    },
    "verb": "send",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}

One session has ended

Multiple session can exist for a single user. A disconnect event is only sent when the last session has been closed, but a "session closed" event is sent for each session that is closed. Example activity:

{
    "actor": {
        "id": "<user ID>",
        "displayName": "<base64 encoded username>",
        "content": "<session UUID>"
    },
    "verb": "ended",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}

User successfully logged in

Example of activity when a user successfully logs in:

{
    "id": "2190e4b9-6b80-4d86-992f-e107ae19be96",
    "title": "dino.wio.login",
    "actor": {
        "id": "1971",
        "attachments": [{
            "objectType": "lon",
            "content": "11.11667"
        }, {
            "objectType": "lat",
            "content": "59.23891"
        }, {
            "objectType": "city",
            "content": "Berlin"
        }, {
            "objectType": "membership",
            "content": "vip"
        }, {
            "objectType": "is_streaming",
            "content": "False"
        }, {
            "objectType": "fakecheck",
            "content": "1"
        }, {
            "objectType": "country",
            "content": "Germany"
        }, {
            "objectType": "gender",
            "content": "m"
        }, {
            "objectType": "user_agent",
            "content": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"
        }, {
            "objectType": "age",
            "content": "65"
        }, {
            "objectType": "search_gender",
            "content": "a,b"
        }, {
            "objectType": "avatar",
            "content": "http://img.example.com/m/avatar/19/1/f6/3/71-B833EE35D296C9BE_300_sq.jpg"
        }, {
            "objectType": "region",
            "content": "Berlin"
        }, {
            "objectType": "user_agent_platform",
            "content": "linux"
        }, {
            "objectType": "user_agent",
            "content": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"
        }, {
            "objectType": "user_agent_browser",
            "content": "chrome"
        }, {
            "objectType": "user_agent_language",
            "content": ""
        }, {
            "objectType": "user_agent_version",
            "content": "63.0.3239.108"
        }],
        "displayName": "Um9iYnk=",
        "content": "<session UUID>"
    },
    "provider": {
        "id": "wioenv"
    },
    "verb": "login",
    "published": "2018-09-17T05:25:38Z"
}

A user was reported for a message he/she sent

A message may be reported in the front-end, and a report will be published to the MQ. The event looks like this:

{
    "actor": {
        "id": "<user ID that reported the message>",
        "displayName": "<the user name who reported the message>"
    },
    "object": {
        "id": "<uuid of message>",
        "content": "<the actual message to report, base64>",
        "summary": "<optional reason text, base64>"
    },
    "target": {
        "id": "<user ID to report>",
        "displayName": "<the user name of the reported user>"
    },
    "verb": "report",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}

User disconnected

Example of activity when a user disconnects:

{
    "actor": {
        "id": "<user ID>",
        "displayName": "<base64 encoded username>"
    },
    "verb": "disconnect",
    "id": "<server-generated UUID>",
    "published": "<server-generated timestamp, RFC3339 format>"
}

User becomes invisible

When a user changes the status to become invisible the following event is published to the external queue:

{
    "id": "<server-generated UUID>",
    "actor": {
        "id": "635328",
        "displayName": "amtia2prYmJrag=="
    },
    "verb": "invisible",
    "published": "<server-generated timestamp, RFC3339 format>"
}

User becomes visible after being in visible

When a user changes his status to become visible again after being invisible the following event is sent to the external queue:

{   
    "id": "<server-generated UUID>",
    "actor": {
        "id": "635328",
        "displayName": "amtia2prYmJrag=="
    },  
    "verb": "online",
    "published": "<server-generated timestamp, RFC3339 format>"
}