Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This document will help to configure (enable/disable) discussion forum for any of the learning process
(i.e. groups, course, textbook, etc.)

For Groups:

Enabling discussion forums for groups will be done via UI.
Now to call the create forum API, first, we need to configure a form API that will respond back the request payload for creating the forum.

Step: 1

Configure form API:
Endpoint:

Code Block
POST: {{host}}/data/v1/form/create

Request payload:

Code Block
{
    "request": {
        "type": "forum",
        "subType": "group",
        "action": "create",
        "data": {
            "templateName": "defaultTemplate",
            "action": "create",
            "fields": [
                {
                    "category": {
                        "name": "General Discussion", // Forum name
                        "pid": "15", // parent category id, under this category, new forum will be 
                                        creted. it will be a root category.
                        "uid": "1", //  admin user id
                        "description": "",
                        "context": [
                            {
                                "type": "group",
                                "identifier": "_groupId" // to be replaced form client 
                                                            side with actul group id.
                            }
                        ]
                    }
                }
            ]
        }
    }
}


Once created, this form API will be called from the client-side.
Endpoint:

Code Block
POST: {{host}}/data/v1/form/read

Request payload:

Code Block
{
    "request": {
        "type": "forum",
        "subType": "group",
        "action": "create"
    }
}

Response:

Code Block
{
    "id": "api.form.read",
    "params": {
        "resmsgid": "095168d1-b6d6-4f1c-ae0f-d8e1dbed7122",
        "msgid": "64b92bb4-636a-449b-8c57-a2b91fc315fb",
        "status": "successful"
    },
    "responseCode": "OK",
    "result": {
        "form": {
            "type": "forum",
            "subtype": "group",
            "action": "create",
            "component": "*",
            "framework": "*",
            "data": {
                "templateName": "defaultTemplate",
                "action": "create",
                "fields": [
                    {
                        "category": {
                            "name": "General Discussion",
                            "pid": "15",
                            "uid": "1",
                            "description": "",
                            "context": [
                                {
                                    "type": "group",
                                    "identifier": "_groupId"
                                }
                            ]
                        }
                    }
                ]
            },
            "created_on": "2021-02-15T05:33:03.734Z",
            "last_modified_on": "2021-02-15T09:52:41.820Z",
            "rootOrgId": "*"
        }
    },
    "ts": "2021-03-05T10:01:51.700Z",
    "ver": "1.0"
}

NOTE: the context identifier should be replaced from the client-side with actual group_id before calling the “forum create” API. So, in basic words, this form response will work as a request payload for the actual forum create API.

Step 2:

Call the create forum API :

Endpoint:

Code Block
POST: {{host}}/discussion/forum/v3/create

Request payload:

Code Block
{
  "category": {
    "name": "General Discussion",
    "pid": "30",
    "uid": "4",
    "description": "",
    "context": [
      {
        "type": "group",
        "identifier": "95502931-e903-45e0-a4f7-f6ae3c97a66f"
      }
    ]
  }
}

Response:

Code Block
{
  "id": "api.forum.v3.create",
  "ver": "1.0",
  "ets": 1614939498392,
  "params": {
    "resmsgid": "4739650a-cd23-43ce-9634-0e864d243eba",
    "msgid": "",
    "status": "Success"
  },
  "responseCode": "OK",
  "result": {
    "forums": [
      {
        "sbType": "95502931-e903-45e0-a4f7-f6ae3c97a66f",
        "sbIdentifier": "95502931-e903-45e0-a4f7-f6ae3c97a66f",
        "newCid": 93,
        "cids": [
          93
        ]
      }
    ]
  }
}

Postman Collection

Discussion Forum API's Postman collection

For courses:

Till now, a Discussion forum for courses can be configured via APIs only.

Below APIs will be used to configure a discussion forum for any of the courses.

Step 1:
Create a parent category. This category id will be used as the root pid
Endpoint:

Code Block
POST: {{host}}/discussions/api/v2/categories?_uid=1

Request body:

Code Block
{
    "name": "Course: Parent category "
}

Response:

Code Block
{
    "code": "ok",
    "payload": {
        "cid": 7, // this cid will used as pid for the next et of apis
        "name": "Course: Parent category ",
        "description": "",
        "descriptionParsed": "",
        "icon": "",
        "bgColor": "#86C1B9",
        "color": "#333",
        "slug": "7/course-parent-category",
        "parentCid": 0,
        "topic_count": 0,
        "post_count": 0,
        "disabled": 0,
        "order": 7,
        "link": "",
        "numRecentReplies": 1,
        "class": "col-md-3 col-xs-6",
        "imageClass": "cover",
        "isSection": 0
    }
}

Step 2:
Take the above created CID and make the create forum API call for course:
Endpoint:

Code Block
POST: {{host}}/discussion/forum/v3/create

Request Body:

Code Block
{
  "category": {
    "name": "Discussion forum for course",
    "pid": "7", // parent category (take the cid form the above api response)
    "uid": "1", // admin user id
    "description": "",
    "context": [
      {
        "type": "course",
        "identifier": "_courseId" // to be replaced by actual Course_id
      }
    ],
    "privileges": {
      "copyFromCategory": "134" // dummy category with course level privileges
    }
  }
}

Response:

Code Block
{
  "id": "api.forum.v3.create",
  "ver": "1.0",
  "ets": 1614939498392,
  "params": {
    "resmsgid": "4739650a-cd23-43ce-9634-0e864d243eba",
    "msgid": "",
    "status": "Success"
  },
  "responseCode": "OK",
  "result": {
    "forums": [
      {
        "sbType": "course",
        "sbIdentifier": "do_1234",
        "newCid": 8,
        "cids": [
          8
        ]
      }
    ]
  }
}

Step: 3

After creating course level category, we have to create batch level category. For the batch level also we are using same api (forum create).

End Point

Code Block
POST: {{host}}/discussion/forum/v3/create

Note: Take the newCid value from the above response.

Request Body

Code Block
{
  "category": {
    "name": "Discussion forum for Batch",
    "pid": "8", // parent category (take the cid form the above api response)
    "uid": "1", // admin user id
    "description": "",
    "context": [
      {
        "type": "batch",
        "identifier": "_batchId" // to be replaced by actual batch_id
      }
    ],
    "privileges": {
      "copyFromCategory": "134" // dummy category with batch level privileges
    },
    "subcategories": [
      {
        "name": "Annoucements",
        "description": "",
        "privileges": {
          "copyFromCategory": "120" // dummy category with batch level privileges (for anouncement)
        }
      },
      {
        "name": "General discussions",
        "description": "",
        "privileges": {
          "copyFromCategory": "121" // dummy category with batch level privileges (for GD)
        }
      }
    ]
  }
}

Response

Code Block
{
  "id": "api.forum.v3.create",
  "ver": "1.0",
  "ets": 1614939498392,
  "params": {
    "resmsgid": "4739650a-cd23-43ce-9634-0e864d243eba",
    "msgid": "",
    "status": "Success"
  },
  "responseCode": "OK",
  "result": {
    "forums": [
      {
        "sbType": "batch",
        "sbIdentifier": "batchId",
        "newCid": 9,
        "cids": [
          9
        ]
      }
    ]
  }
}

Some Usfull Apis:

  1. Access the groups and group users attached to a category.

End Point

Code Block
{{host}}/discussions/api/forum/v3/groups/users

Request Body

Code Block
{
    "request": {
        "cid": 255,
        "groups": ["Course Mentor", "kvn_001"]  // optional
    }
}

Response

Code Block
{
    "id": ".api.forum.v3.groups.users",
    "ver": "1.0",
    "ets": 1615210872732,
    "params": {
        "resmsgid": "5c9755e2-9aeb-4efd-aae1-c347803bbe48",
        "msgid": "",
        "status": "Success"
    },
    "responseCode": "OK",
    "result": {
        "groups": [
            {
                "name": "Global Moderators",
                "members": []
            },
            {
                "name": "guests",
                "members": []
            },
            {
                "name": "spiders",
                "members": []
            },
            {
                "name": "registered-users",
                "members": [
                    {
                        "uid": 24,
                        "userName": "vvaanqqeeeqnuuydddy",
                        "sbUid": "1122311135656333w"
                    },
                    {
                        "uid": 9,
                        "userName": "venkat002",
                        "sbUid": "efgh_5678"
                    },
                    {
                        "uid": 8,
                        "userName": "venkat001",
                        "sbUid": "abcd_1234"
                    },
                    {
                        "uid": 7,
                        "userName": "ven1",
                        "sbUid": null
                    },
                    {
                        "uid": 6,
                        "userName": "venkat-group 0",
                        "sbUid": null
                    },
                    {
                        "uid": 5,
                        "userName": "venkat-test",
                        "sbUid": null
                    },
                    {
                        "uid": 4,
                        "userName": "testUser",
                        "sbUid": null
                    },
                    {
                        "uid": 3,
                        "userName": "Vinu",
                        "sbUid": null
                    },
                    {
                        "uid": 26,
                        "userName": "dsbfjdsf",
                        "sbUid": "45454646461112333"
                    },
                    {
                        "uid": 25,
                        "userName": "fsbmbgbfsgs",
                        "sbUid": "4545464646"
                    },
                    {
                        "uid": 23,
                        "userName": "vvaanqqeeeqnuuyy",
                        "sbUid": "112231113565633"
                    },
                    {
                        "uid": 22,
                        "userName": "vvaanqqeeeqn",
                        "sbUid": "11223111333"
                    },
                    {
                        "uid": 21,
                        "userName": "vvaanqqqn",
                        "sbUid": "112231113"
                    },
                    {
                        "uid": 2,
                        "userName": "venkat",
                        "sbUid": null
                    },
                    {
                        "uid": 17,
                        "userName": "test-venkat-22",
                        "sbUid": "abcd_12342222211q2332322222"
                    },
                    {
                        "uid": 16,
                        "userName": "test-venkat-2",
                        "sbUid": "abcd_12342222211q233232"
                    },
                    {
                        "uid": 15,
                        "userName": "test-venkat-1",
                        "sbUid": "abcd_12342222211q2"
                    },
                    {
                        "uid": 20,
                        "userName": "vvaann",
                        "sbUid": "112233"
                    },
                    {
                        "uid": 19,
                        "userName": "venkat-btech",
                        "sbUid": "12f61a0248"
                    },
                    {
                        "uid": 18,
                        "userName": "ntptest104",
                        "sbUid": "8454cb21-3ce9-4e30-85b5-fade097880d8"
                    },
                    {
                        "uid": 1,
                        "userName": "admin",
                        "sbUid": null
                    },
                    {
                        "uid": 14,
                        "userName": "test-venkat",
                        "sbUid": "abcd_123422222"
                    },
                    {
                        "uid": 13,
                        "userName": "PublicUser",
                        "sbUid": null
                    },
                    {
                        "uid": 12,
                        "userName": "Mentor",
                        "sbUid": null
                    },
                    {
                        "uid": 11,
                        "userName": "venkat00342343",
                        "sbUid": "efgh_56785454333"
                    },
                    {
                        "uid": 10,
                        "userName": "venkat00342",
                        "sbUid": "efgh_56785454"
                    }
                ]
            },
            {
                "name": "verified-users",
                "members": [
                    {
                        "uid": 1,
                        "userName": "admin",
                        "sbUid": null
                    }
                ]
            },
            {
                "name": "unverified-users",
                "members": [
                    {
                        "uid": 9,
                        "userName": "venkat002",
                        "sbUid": "efgh_5678"
                    },
                    {
                        "uid": 8,
                        "userName": "venkat001",
                        "sbUid": "abcd_1234"
                    },
                    {
                        "uid": 4,
                        "userName": "testUser",
                        "sbUid": null
                    },
                    {
                        "uid": 26,
                        "userName": "dsbfjdsf",
                        "sbUid": "45454646461112333"
                    },
                    {
                        "uid": 7,
                        "userName": "ven1",
                        "sbUid": null
                    },
                    {
                        "uid": 6,
                        "userName": "venkat-group 0",
                        "sbUid": null
                    },
                    {
                        "uid": 5,
                        "userName": "venkat-test",
                        "sbUid": null
                    },
                    {
                        "uid": 3,
                        "userName": "Vinu",
                        "sbUid": null
                    },
                    {
                        "uid": 25,
                        "userName": "fsbmbgbfsgs",
                        "sbUid": "4545464646"
                    },
                    {
                        "uid": 24,
                        "userName": "vvaanqqeeeqnuuydddy",
                        "sbUid": "1122311135656333w"
                    },
                    {
                        "uid": 23,
                        "userName": "vvaanqqeeeqnuuyy",
                        "sbUid": "112231113565633"
                    },
                    {
                        "uid": 2,
                        "userName": "venkat",
                        "sbUid": null
                    },
                    {
                        "uid": 16,
                        "userName": "test-venkat-2",
                        "sbUid": "abcd_12342222211q233232"
                    },
                    {
                        "uid": 22,
                        "userName": "vvaanqqeeeqn",
                        "sbUid": "11223111333"
                    },
                    {
                        "uid": 21,
                        "userName": "vvaanqqqn",
                        "sbUid": "112231113"
                    },
                    {
                        "uid": 20,
                        "userName": "vvaann",
                        "sbUid": "112233"
                    },
                    {
                        "uid": 19,
                        "userName": "venkat-btech",
                        "sbUid": "12f61a0248"
                    },
                    {
                        "uid": 18,
                        "userName": "ntptest104",
                        "sbUid": "8454cb21-3ce9-4e30-85b5-fade097880d8"
                    },
                    {
                        "uid": 17,
                        "userName": "test-venkat-22",
                        "sbUid": "abcd_12342222211q2332322222"
                    },
                    {
                        "uid": 15,
                        "userName": "test-venkat-1",
                        "sbUid": "abcd_12342222211q2"
                    },
                    {
                        "uid": 14,
                        "userName": "test-venkat",
                        "sbUid": "abcd_123422222"
                    },
                    {
                        "uid": 13,
                        "userName": "PublicUser",
                        "sbUid": null
                    },
                    {
                        "uid": 12,
                        "userName": "Mentor",
                        "sbUid": null
                    },
                    {
                        "uid": 11,
                        "userName": "venkat00342343",
                        "sbUid": "efgh_56785454333"
                    },
                    {
                        "uid": 10,
                        "userName": "venkat00342",
                        "sbUid": "efgh_56785454"
                    }
                ]
            },
            {
                "name": "Course Mentor",
                "members": [
                    {
                        "uid": 9,
                        "userName": "venkat002",
                        "sbUid": "efgh_5678"
                    },
                    {
                        "uid": 8,
                        "userName": "venkat001",
                        "sbUid": "abcd_1234"
                    },
                    {
                        "uid": 12,
                        "userName": "Mentor",
                        "sbUid": null
                    },
                    {
                        "uid": 1,
                        "userName": "admin",
                        "sbUid": null
                    }
                ]
            }
        ]
    }
}

2. Add multiple users into multiple groups

End Point

Code Block
{{host}}/api/forum/v3/group/membership

Request Body

Code Block
{
    "request": {
        "groups": [
            "Course owner" // nodebb group name
        ],
        "members": [
            {
                "sbUid": "8454cb21-3ce9-4e30-85b5-fade097880d8", // sunbird user identifier
                "sbUserName": "ntptest104" // sunbird username
            }
        ]
    }
}

Response

This api will return list of users added into that group along with newly added user.

Code Block
{
    "id": ".api.forum.v3.group.membership",
    "ver": "1.0",
    "ets": 1615211148516,
    "params": {
        "resmsgid": "9f62cf7a-ec3c-4939-a0f7-aa71a0f1b233",
        "msgid": "",
        "status": "Success"
    },
    "responseCode": "OK",
    "result": {
        "groups": [
            {
                "name": "Course owner",
                "members": [
                    {
                        "uid": 2,
                        "userName": "venkat",
                        "sbUid": null
                    },
                    {
                        "uid": 18,
                        "userName": "ntptest104",
                        "sbUid": "8454cb21-3ce9-4e30-85b5-fade097880d8"
                    },
                    {
                        "uid": 17,
                        "userName": "test-venkat-22",
                        "sbUid": "abcd_12342222211q2332322222"
                    },
                    {
                        "uid": 16,
                        "userName": "test-venkat-2",
                        "sbUid": "abcd_12342222211q233232"
                    },
                    {
                        "uid": 15,
                        "userName": "test-venkat-1",
                        "sbUid": "abcd_12342222211q2"
                    },
                    {
                        "uid": 1,
                        "userName": "admin",
                        "sbUid": null
                    }
                ]
            }
        ]
    }
}

3. To check list of privileges added to a particular group with a category.

End Point

Code Block
{{host}}/api/forum/v3/category/:cid/privileges

Request

Code Block
{
    "request": {
        "groups": [
            "Owner Group",
            "registered-users"
        ]
    }
}

Response Body

Code Block
{
    "id": ".api.forum.v3.category.268.privileges",
    "ver": "1.0",
    "ets": 1615211430805,
    "params": {
        "resmsgid": "51c04946-2213-4c6f-b258-1f00425170e0",
        "msgid": "",
        "status": "Success"
    },
    "responseCode": "OK",
    "result": {
        "groups": [
            {
                "name": "Owner Group",
                "nameEscaped": "Owner Group",
                "privileges": {
                    "groups:find": false,
                    "groups:read": false,
                    "groups:topics:read": false,
                    "groups:topics:create": true,
                    "groups:topics:reply": true,
                    "groups:topics:tag": false,
                    "groups:posts:edit": false,
                    "groups:posts:history": false,
                    "groups:posts:delete": false,
                    "groups:posts:upvote": false,
                    "groups:posts:downvote": false,
                    "groups:topics:delete": false,
                    "groups:posts:view_deleted": false,
                    "groups:purge": false,
                    "groups:moderate": true
                },
                "isPrivate": true,
                "isSystem": false
            },
            {
                "name": "registered-users",
                "nameEscaped": "registered-users",
                "privileges": {
                    "groups:find": true,
                    "groups:read": true,
                    "groups:topics:read": true,
                    "groups:topics:create": false,
                    "groups:topics:reply": false,
                    "groups:topics:tag": true,
                    "groups:posts:edit": true,
                    "groups:posts:history": true,
                    "groups:posts:delete": true,
                    "groups:posts:upvote": true,
                    "groups:posts:downvote": true,
                    "groups:topics:delete": true,
                    "groups:posts:view_deleted": false,
                    "groups:purge": false,
                    "groups:moderate": false
                },
                "isPrivate": true,
                "isSystem": true
            }
        ]
    }
}