json-ldactivity-streamsactivitypub

How is ActivityStreams's "to" field on Activities different from the "audience" field?


The ActivityStreams specification explains the difference between to, cc, bto, and bcc in section 5.1. But there's also an audience property, defined as:

one or more entities that represent the total population of entities for which the object can considered to be relevant.

How is this different from "to" and "cc"? In particular, what's the different effect on ActivityPub delivery?


Solution

  • The answer can be found in the Issue list of the ActivityPub spec, in this comment by James M Snell:

    audience is used for targeting.

    For example, suppose I have an activity that everyone in my company should see show up in their activity feeds, but only certain specific people should be notified, I would end up with something like:

    {
      //...//
      "audience": {
        "type": "Organization",
        "id": "http://example.org",
        "name": "My Organization"
      },
      "to": ["http://jane.example.org", "http://joe.example.org"],
      "cc": ["http://sally.example.org"]
    }
    

    Here, the audience property provides a scoping of the overall audience, while the to and cc fields identify specific individuals within that audience that should be notified more directly of the activity.

    After this discussion the specification was updated. See Audience targeting and specifically in par. 5.1.1 there is some more clarification on its use:

    Activities are rarely isolated events. Often, multiple individual activities will be performed around a similar context or audience. For instance, a collaborators working on a shared project might perform multiple related activities in the process of achieving some goal. Such activities can be logically grouped together using the context property, and scoped to a particular audience using the audience property.

    With the following example supplied (Example 144):

    {
     "@context": "https://www.w3.org/ns/activitystreams",
     "summary": "Activities in Project XYZ",
     "type": "Collection",
     "items": [
       {
         "summary": "Sally created a note",
         "type": "Create",
         "id": "http://activities.example.com/1",
         "actor": "http://sally.example.org",
         "object": {
          "summary": "A note",
           "type": "Note",
           "id": "http://notes.example.com/1",
           "content": "A note"
         },
         "context": {
           "type": "http://example.org/Project",
           "name": "Project XYZ"
         },
         "audience": {
           "type": "Group",
           "name": "Project XYZ Working Group"
         },
         "to": "http://john.example.org"
       },
       {
         "summary": "John liked Sally's note",
         "type": "Like",
         "id": "http://activities.example.com/1",
         "actor": "http://john.example.org",
         "object": "http://notes.example.com/1",
         "context": {
           "type": "http://example.org/Project",
           "name": "Project XYZ"
         },
         "audience": {
           "type": "Group",
           "name": "Project XYZ Working Group"
         },
         "to": "http://sally.example.org"
       }
     ]
    }