Kevin Hu
writinwaters
commited on
Commit
·
f2b6717
1
Parent(s):
68148fe
Add user_id for third-party system to record sessions. (#4206)
Browse files### What problem does this PR solve?
### Type of change
- [x] New Feature (non-breaking change which adds functionality)
- [x] Documentation Update
---------
Co-authored-by: writinwaters <[email protected]>
- api/apps/sdk/session.py +5 -3
- api/db/db_models.py +10 -3
- api/db/services/api_service.py +6 -3
- api/db/services/conversation_service.py +16 -13
- docs/references/http_api_reference.md +23 -5
api/apps/sdk/session.py
CHANGED
|
@@ -47,7 +47,8 @@ def create(tenant_id, chat_id):
|
|
| 47 |
"id": get_uuid(),
|
| 48 |
"dialog_id": req["dialog_id"],
|
| 49 |
"name": req.get("name", "New session"),
|
| 50 |
-
"message": [{"role": "assistant", "content": dia[0].prompt_config.get("prologue")}]
|
|
|
|
| 51 |
}
|
| 52 |
if not conv.get("name"):
|
| 53 |
return get_error_data_result(message="`name` can not be empty.")
|
|
@@ -71,7 +72,7 @@ def create_agent_session(tenant_id, agent_id):
|
|
| 71 |
return get_error_data_result("Agent not found.")
|
| 72 |
|
| 73 |
if not UserCanvasService.query(user_id=tenant_id,id=agent_id):
|
| 74 |
-
return
|
| 75 |
|
| 76 |
if not isinstance(cvs.dsl, str):
|
| 77 |
cvs.dsl = json.dumps(cvs.dsl, ensure_ascii=False)
|
|
@@ -197,11 +198,12 @@ def list_session(tenant_id, chat_id):
|
|
| 197 |
page_number = int(request.args.get("page", 1))
|
| 198 |
items_per_page = int(request.args.get("page_size", 30))
|
| 199 |
orderby = request.args.get("orderby", "create_time")
|
|
|
|
| 200 |
if request.args.get("desc") == "False" or request.args.get("desc") == "false":
|
| 201 |
desc = False
|
| 202 |
else:
|
| 203 |
desc = True
|
| 204 |
-
convs = ConversationService.get_list(chat_id, page_number, items_per_page, orderby, desc, id, name)
|
| 205 |
if not convs:
|
| 206 |
return get_result(data=[])
|
| 207 |
for conv in convs:
|
|
|
|
| 47 |
"id": get_uuid(),
|
| 48 |
"dialog_id": req["dialog_id"],
|
| 49 |
"name": req.get("name", "New session"),
|
| 50 |
+
"message": [{"role": "assistant", "content": dia[0].prompt_config.get("prologue")}],
|
| 51 |
+
"user_id": req.get("user_id", "")
|
| 52 |
}
|
| 53 |
if not conv.get("name"):
|
| 54 |
return get_error_data_result(message="`name` can not be empty.")
|
|
|
|
| 72 |
return get_error_data_result("Agent not found.")
|
| 73 |
|
| 74 |
if not UserCanvasService.query(user_id=tenant_id,id=agent_id):
|
| 75 |
+
return get_error_data_result("You cannot access the agent.")
|
| 76 |
|
| 77 |
if not isinstance(cvs.dsl, str):
|
| 78 |
cvs.dsl = json.dumps(cvs.dsl, ensure_ascii=False)
|
|
|
|
| 198 |
page_number = int(request.args.get("page", 1))
|
| 199 |
items_per_page = int(request.args.get("page_size", 30))
|
| 200 |
orderby = request.args.get("orderby", "create_time")
|
| 201 |
+
user_id = request.args.get("user_id")
|
| 202 |
if request.args.get("desc") == "False" or request.args.get("desc") == "false":
|
| 203 |
desc = False
|
| 204 |
else:
|
| 205 |
desc = True
|
| 206 |
+
convs = ConversationService.get_list(chat_id, page_number, items_per_page, orderby, desc, id, name, user_id)
|
| 207 |
if not convs:
|
| 208 |
return get_result(data=[])
|
| 209 |
for conv in convs:
|
api/db/db_models.py
CHANGED
|
@@ -31,7 +31,6 @@ from peewee import (
|
|
| 31 |
)
|
| 32 |
from playhouse.pool import PooledMySQLDatabase, PooledPostgresqlDatabase
|
| 33 |
|
| 34 |
-
|
| 35 |
from api.db import SerializedType, ParserType
|
| 36 |
from api import settings
|
| 37 |
from api import utils
|
|
@@ -926,6 +925,7 @@ class Conversation(DataBaseModel):
|
|
| 926 |
name = CharField(max_length=255, null=True, help_text="converastion name", index=True)
|
| 927 |
message = JSONField(null=True)
|
| 928 |
reference = JSONField(null=True, default=[])
|
|
|
|
| 929 |
|
| 930 |
class Meta:
|
| 931 |
db_table = "conversation"
|
|
@@ -1070,13 +1070,13 @@ def migrate_db():
|
|
| 1070 |
pass
|
| 1071 |
try:
|
| 1072 |
migrate(
|
| 1073 |
-
migrator.add_column("tenant_llm","max_tokens",IntegerField(default=8192,index=True))
|
| 1074 |
)
|
| 1075 |
except Exception:
|
| 1076 |
pass
|
| 1077 |
try:
|
| 1078 |
migrate(
|
| 1079 |
-
migrator.add_column("api_4_conversation","dsl",JSONField(null=True, default={}))
|
| 1080 |
)
|
| 1081 |
except Exception:
|
| 1082 |
pass
|
|
@@ -1105,3 +1105,10 @@ def migrate_db():
|
|
| 1105 |
)
|
| 1106 |
except Exception:
|
| 1107 |
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
)
|
| 32 |
from playhouse.pool import PooledMySQLDatabase, PooledPostgresqlDatabase
|
| 33 |
|
|
|
|
| 34 |
from api.db import SerializedType, ParserType
|
| 35 |
from api import settings
|
| 36 |
from api import utils
|
|
|
|
| 925 |
name = CharField(max_length=255, null=True, help_text="converastion name", index=True)
|
| 926 |
message = JSONField(null=True)
|
| 927 |
reference = JSONField(null=True, default=[])
|
| 928 |
+
user_id = CharField(max_length=255, null=True, help_text="user_id", index=True)
|
| 929 |
|
| 930 |
class Meta:
|
| 931 |
db_table = "conversation"
|
|
|
|
| 1070 |
pass
|
| 1071 |
try:
|
| 1072 |
migrate(
|
| 1073 |
+
migrator.add_column("tenant_llm", "max_tokens", IntegerField(default=8192, index=True))
|
| 1074 |
)
|
| 1075 |
except Exception:
|
| 1076 |
pass
|
| 1077 |
try:
|
| 1078 |
migrate(
|
| 1079 |
+
migrator.add_column("api_4_conversation", "dsl", JSONField(null=True, default={}))
|
| 1080 |
)
|
| 1081 |
except Exception:
|
| 1082 |
pass
|
|
|
|
| 1105 |
)
|
| 1106 |
except Exception:
|
| 1107 |
pass
|
| 1108 |
+
try:
|
| 1109 |
+
migrate(
|
| 1110 |
+
migrator.add_column("conversation", "user_id",
|
| 1111 |
+
CharField(max_length=255, null=True, help_text="user_id", index=True))
|
| 1112 |
+
)
|
| 1113 |
+
except Exception:
|
| 1114 |
+
pass
|
api/db/services/api_service.py
CHANGED
|
@@ -41,11 +41,14 @@ class API4ConversationService(CommonService):
|
|
| 41 |
|
| 42 |
@classmethod
|
| 43 |
@DB.connection_context()
|
| 44 |
-
def get_list(cls,dialog_id, tenant_id,
|
| 45 |
-
page_number, items_per_page,
|
| 46 |
-
|
|
|
|
| 47 |
if id:
|
| 48 |
sessions = sessions.where(cls.model.id == id)
|
|
|
|
|
|
|
| 49 |
if desc:
|
| 50 |
sessions = sessions.order_by(cls.model.getter_by(orderby).desc())
|
| 51 |
else:
|
|
|
|
| 41 |
|
| 42 |
@classmethod
|
| 43 |
@DB.connection_context()
|
| 44 |
+
def get_list(cls, dialog_id, tenant_id,
|
| 45 |
+
page_number, items_per_page,
|
| 46 |
+
orderby, desc, id, user_id=None):
|
| 47 |
+
sessions = cls.model.select().where(cls.model.dialog_id == dialog_id)
|
| 48 |
if id:
|
| 49 |
sessions = sessions.where(cls.model.id == id)
|
| 50 |
+
if user_id:
|
| 51 |
+
sessions = sessions.where(cls.model.user_id == user_id)
|
| 52 |
if desc:
|
| 53 |
sessions = sessions.order_by(cls.model.getter_by(orderby).desc())
|
| 54 |
else:
|
api/db/services/conversation_service.py
CHANGED
|
@@ -28,12 +28,14 @@ class ConversationService(CommonService):
|
|
| 28 |
|
| 29 |
@classmethod
|
| 30 |
@DB.connection_context()
|
| 31 |
-
def get_list(cls,dialog_id,page_number, items_per_page, orderby, desc, id ,
|
| 32 |
-
sessions = cls.model.select().where(cls.model.dialog_id ==dialog_id)
|
| 33 |
if id:
|
| 34 |
sessions = sessions.where(cls.model.id == id)
|
| 35 |
if name:
|
| 36 |
sessions = sessions.where(cls.model.name == name)
|
|
|
|
|
|
|
| 37 |
if desc:
|
| 38 |
sessions = sessions.order_by(cls.model.getter_by(orderby).desc())
|
| 39 |
else:
|
|
@@ -52,15 +54,16 @@ def structure_answer(conv, ans, message_id, session_id):
|
|
| 52 |
|
| 53 |
def get_value(d, k1, k2):
|
| 54 |
return d.get(k1, d.get(k2))
|
|
|
|
| 55 |
chunk_list = [{
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
|
| 65 |
reference["chunks"] = chunk_list
|
| 66 |
ans["id"] = message_id
|
|
@@ -88,10 +91,11 @@ def completion(tenant_id, chat_id, question, name="New session", session_id=None
|
|
| 88 |
if not session_id:
|
| 89 |
session_id = get_uuid()
|
| 90 |
conv = {
|
| 91 |
-
"id":session_id
|
| 92 |
"dialog_id": chat_id,
|
| 93 |
"name": name,
|
| 94 |
-
"message": [{"role": "assistant", "content": dia[0].prompt_config.get("prologue")}]
|
|
|
|
| 95 |
}
|
| 96 |
ConversationService.save(**conv)
|
| 97 |
yield "data:" + json.dumps({"code": 0, "message": "",
|
|
@@ -226,4 +230,3 @@ def iframe_completion(dialog_id, question, session_id=None, stream=True, **kwarg
|
|
| 226 |
API4ConversationService.append_message(conv.id, conv.to_dict())
|
| 227 |
break
|
| 228 |
yield answer
|
| 229 |
-
|
|
|
|
| 28 |
|
| 29 |
@classmethod
|
| 30 |
@DB.connection_context()
|
| 31 |
+
def get_list(cls, dialog_id, page_number, items_per_page, orderby, desc, id, name, user_id=None):
|
| 32 |
+
sessions = cls.model.select().where(cls.model.dialog_id == dialog_id)
|
| 33 |
if id:
|
| 34 |
sessions = sessions.where(cls.model.id == id)
|
| 35 |
if name:
|
| 36 |
sessions = sessions.where(cls.model.name == name)
|
| 37 |
+
if user_id:
|
| 38 |
+
sessions = sessions.where(cls.model.user_id == user_id)
|
| 39 |
if desc:
|
| 40 |
sessions = sessions.order_by(cls.model.getter_by(orderby).desc())
|
| 41 |
else:
|
|
|
|
| 54 |
|
| 55 |
def get_value(d, k1, k2):
|
| 56 |
return d.get(k1, d.get(k2))
|
| 57 |
+
|
| 58 |
chunk_list = [{
|
| 59 |
+
"id": get_value(chunk, "chunk_id", "id"),
|
| 60 |
+
"content": get_value(chunk, "content", "content_with_weight"),
|
| 61 |
+
"document_id": get_value(chunk, "doc_id", "document_id"),
|
| 62 |
+
"document_name": get_value(chunk, "docnm_kwd", "document_name"),
|
| 63 |
+
"dataset_id": get_value(chunk, "kb_id", "dataset_id"),
|
| 64 |
+
"image_id": get_value(chunk, "image_id", "img_id"),
|
| 65 |
+
"positions": get_value(chunk, "positions", "position_int"),
|
| 66 |
+
} for chunk in reference.get("chunks", [])]
|
| 67 |
|
| 68 |
reference["chunks"] = chunk_list
|
| 69 |
ans["id"] = message_id
|
|
|
|
| 91 |
if not session_id:
|
| 92 |
session_id = get_uuid()
|
| 93 |
conv = {
|
| 94 |
+
"id": session_id,
|
| 95 |
"dialog_id": chat_id,
|
| 96 |
"name": name,
|
| 97 |
+
"message": [{"role": "assistant", "content": dia[0].prompt_config.get("prologue")}],
|
| 98 |
+
"user_id": kwargs.get("user_id", "")
|
| 99 |
}
|
| 100 |
ConversationService.save(**conv)
|
| 101 |
yield "data:" + json.dumps({"code": 0, "message": "",
|
|
|
|
| 230 |
API4ConversationService.append_message(conv.id, conv.to_dict())
|
| 231 |
break
|
| 232 |
yield answer
|
|
|
docs/references/http_api_reference.md
CHANGED
|
@@ -1721,6 +1721,7 @@ Creates a session with a chat assistant.
|
|
| 1721 |
- `'Authorization: Bearer <YOUR_API_KEY>'`
|
| 1722 |
- Body:
|
| 1723 |
- `"name"`: `string`
|
|
|
|
| 1724 |
|
| 1725 |
##### Request example
|
| 1726 |
|
|
@@ -1741,6 +1742,8 @@ curl --request POST \
|
|
| 1741 |
The ID of the associated chat assistant.
|
| 1742 |
- `"name"`: (*Body parameter*), `string`
|
| 1743 |
The name of the chat session to create.
|
|
|
|
|
|
|
| 1744 |
|
| 1745 |
#### Response
|
| 1746 |
|
|
@@ -1793,6 +1796,7 @@ Updates a session of a specified chat assistant.
|
|
| 1793 |
- `'Authorization: Bearer <YOUR_API_KEY>'`
|
| 1794 |
- Body:
|
| 1795 |
- `"name`: `string`
|
|
|
|
| 1796 |
|
| 1797 |
##### Request example
|
| 1798 |
|
|
@@ -1815,6 +1819,8 @@ curl --request PUT \
|
|
| 1815 |
The ID of the session to update.
|
| 1816 |
- `"name"`: (*Body Parameter*), `string`
|
| 1817 |
The revised name of the session.
|
|
|
|
|
|
|
| 1818 |
|
| 1819 |
#### Response
|
| 1820 |
|
|
@@ -1846,7 +1852,7 @@ Lists sessions associated with a specified chat assistant.
|
|
| 1846 |
#### Request
|
| 1847 |
|
| 1848 |
- Method: GET
|
| 1849 |
-
- URL: `/api/v1/chats/{chat_id}/sessions?page={page}&page_size={page_size}&orderby={orderby}&desc={desc}&name={session_name}&id={session_id}`
|
| 1850 |
- Headers:
|
| 1851 |
- `'Authorization: Bearer <YOUR_API_KEY>'`
|
| 1852 |
|
|
@@ -1876,6 +1882,8 @@ curl --request GET \
|
|
| 1876 |
The name of the chat session to retrieve.
|
| 1877 |
- `id`: (*Filter parameter*), `string`
|
| 1878 |
The ID of the chat session to retrieve.
|
|
|
|
|
|
|
| 1879 |
|
| 1880 |
#### Response
|
| 1881 |
|
|
@@ -2000,7 +2008,8 @@ Asks a specified chat assistant a question to start an AI-powered conversation.
|
|
| 2000 |
- Body:
|
| 2001 |
- `"question"`: `string`
|
| 2002 |
- `"stream"`: `boolean`
|
| 2003 |
-
- `"session_id"`: `string`
|
|
|
|
| 2004 |
|
| 2005 |
##### Request example
|
| 2006 |
|
|
@@ -2038,6 +2047,8 @@ curl --request POST \
|
|
| 2038 |
- `false`: Disable streaming.
|
| 2039 |
- `"session_id"`: (*Body Parameter*)
|
| 2040 |
The ID of session. If it is not provided, a new session will be generated.
|
|
|
|
|
|
|
| 2041 |
|
| 2042 |
#### Response
|
| 2043 |
|
|
@@ -2162,6 +2173,8 @@ Creates a session with an agent.
|
|
| 2162 |
- Body:
|
| 2163 |
- the required parameters:`str`
|
| 2164 |
- the optional parameters:`str`
|
|
|
|
|
|
|
| 2165 |
|
| 2166 |
##### Request example
|
| 2167 |
If `begin` component in the agent doesn't have required parameters:
|
|
@@ -2337,6 +2350,7 @@ Asks a specified agent a question to start an AI-powered conversation.
|
|
| 2337 |
- `"question"`: `string`
|
| 2338 |
- `"stream"`: `boolean`
|
| 2339 |
- `"session_id"`: `string`
|
|
|
|
| 2340 |
- other parameters: `string`
|
| 2341 |
##### Request example
|
| 2342 |
If the `begin` component doesn't have parameters, the following code will create a session.
|
|
@@ -2388,6 +2402,8 @@ curl --request POST \
|
|
| 2388 |
- `false`: Disable streaming.
|
| 2389 |
- `"session_id"`: (*Body Parameter*)
|
| 2390 |
The ID of the session. If it is not provided, a new session will be generated.
|
|
|
|
|
|
|
| 2391 |
- Other parameters: (*Body Parameter*)
|
| 2392 |
The parameters in the begin component.
|
| 2393 |
#### Response
|
|
@@ -2538,7 +2554,7 @@ Failure:
|
|
| 2538 |
|
| 2539 |
### List agent sessions
|
| 2540 |
|
| 2541 |
-
**GET** `/api/v1/agents/{agent_id}/sessions?page={page}&page_size={page_size}&orderby={orderby}&desc={desc}&id={session_id}`
|
| 2542 |
|
| 2543 |
Lists sessions associated with a specified agent.
|
| 2544 |
|
|
@@ -2553,7 +2569,7 @@ Lists sessions associated with a specified agent.
|
|
| 2553 |
|
| 2554 |
```bash
|
| 2555 |
curl --request GET \
|
| 2556 |
-
--url http://{address}/api/v1/agents/{agent_id}/sessions?page={page}&page_size={page_size}&orderby={orderby}&desc={desc}&id={session_id} \
|
| 2557 |
--header 'Authorization: Bearer <YOUR_API_KEY>'
|
| 2558 |
```
|
| 2559 |
|
|
@@ -2573,7 +2589,9 @@ curl --request GET \
|
|
| 2573 |
Indicates whether the retrieved sessions should be sorted in descending order. Defaults to `true`.
|
| 2574 |
- `id`: (*Filter parameter*), `string`
|
| 2575 |
The ID of the agent session to retrieve.
|
| 2576 |
-
|
|
|
|
|
|
|
| 2577 |
#### Response
|
| 2578 |
|
| 2579 |
Success:
|
|
|
|
| 1721 |
- `'Authorization: Bearer <YOUR_API_KEY>'`
|
| 1722 |
- Body:
|
| 1723 |
- `"name"`: `string`
|
| 1724 |
+
- `"user_id"`: `string`(optional)
|
| 1725 |
|
| 1726 |
##### Request example
|
| 1727 |
|
|
|
|
| 1742 |
The ID of the associated chat assistant.
|
| 1743 |
- `"name"`: (*Body parameter*), `string`
|
| 1744 |
The name of the chat session to create.
|
| 1745 |
+
- `"user_id"`: (*Body parameter*), `string`
|
| 1746 |
+
Optional user-defined ID.
|
| 1747 |
|
| 1748 |
#### Response
|
| 1749 |
|
|
|
|
| 1796 |
- `'Authorization: Bearer <YOUR_API_KEY>'`
|
| 1797 |
- Body:
|
| 1798 |
- `"name`: `string`
|
| 1799 |
+
- `"user_id`: `string`(optional)
|
| 1800 |
|
| 1801 |
##### Request example
|
| 1802 |
|
|
|
|
| 1819 |
The ID of the session to update.
|
| 1820 |
- `"name"`: (*Body Parameter*), `string`
|
| 1821 |
The revised name of the session.
|
| 1822 |
+
- `"user_id"`: (*Body parameter*), `string`
|
| 1823 |
+
Optional user-defined ID.
|
| 1824 |
|
| 1825 |
#### Response
|
| 1826 |
|
|
|
|
| 1852 |
#### Request
|
| 1853 |
|
| 1854 |
- Method: GET
|
| 1855 |
+
- URL: `/api/v1/chats/{chat_id}/sessions?page={page}&page_size={page_size}&orderby={orderby}&desc={desc}&name={session_name}&id={session_id}&user_id={user_id}`
|
| 1856 |
- Headers:
|
| 1857 |
- `'Authorization: Bearer <YOUR_API_KEY>'`
|
| 1858 |
|
|
|
|
| 1882 |
The name of the chat session to retrieve.
|
| 1883 |
- `id`: (*Filter parameter*), `string`
|
| 1884 |
The ID of the chat session to retrieve.
|
| 1885 |
+
- `user_id`: (*Filter parameter*), `string`
|
| 1886 |
+
The optional user-defined ID passed in when creating session.
|
| 1887 |
|
| 1888 |
#### Response
|
| 1889 |
|
|
|
|
| 2008 |
- Body:
|
| 2009 |
- `"question"`: `string`
|
| 2010 |
- `"stream"`: `boolean`
|
| 2011 |
+
- `"session_id"`: `string`(optional)
|
| 2012 |
+
- `"user_id`: `string`(optional)
|
| 2013 |
|
| 2014 |
##### Request example
|
| 2015 |
|
|
|
|
| 2047 |
- `false`: Disable streaming.
|
| 2048 |
- `"session_id"`: (*Body Parameter*)
|
| 2049 |
The ID of session. If it is not provided, a new session will be generated.
|
| 2050 |
+
- `"user_id"`: (*Body parameter*), `string`
|
| 2051 |
+
The optional user-defined ID. Valid *only* when no `session_id` is provided.
|
| 2052 |
|
| 2053 |
#### Response
|
| 2054 |
|
|
|
|
| 2173 |
- Body:
|
| 2174 |
- the required parameters:`str`
|
| 2175 |
- the optional parameters:`str`
|
| 2176 |
+
- `"user_id"`: `string`
|
| 2177 |
+
The optional user-defined ID.
|
| 2178 |
|
| 2179 |
##### Request example
|
| 2180 |
If `begin` component in the agent doesn't have required parameters:
|
|
|
|
| 2350 |
- `"question"`: `string`
|
| 2351 |
- `"stream"`: `boolean`
|
| 2352 |
- `"session_id"`: `string`
|
| 2353 |
+
- `"user_id"`: `string`(optional)
|
| 2354 |
- other parameters: `string`
|
| 2355 |
##### Request example
|
| 2356 |
If the `begin` component doesn't have parameters, the following code will create a session.
|
|
|
|
| 2402 |
- `false`: Disable streaming.
|
| 2403 |
- `"session_id"`: (*Body Parameter*)
|
| 2404 |
The ID of the session. If it is not provided, a new session will be generated.
|
| 2405 |
+
- `"user_id"`: (*Body parameter*), `string`
|
| 2406 |
+
The optional user-defined ID. Valid *only* when no `session_id` is provided.
|
| 2407 |
- Other parameters: (*Body Parameter*)
|
| 2408 |
The parameters in the begin component.
|
| 2409 |
#### Response
|
|
|
|
| 2554 |
|
| 2555 |
### List agent sessions
|
| 2556 |
|
| 2557 |
+
**GET** `/api/v1/agents/{agent_id}/sessions?page={page}&page_size={page_size}&orderby={orderby}&desc={desc}&id={session_id}&user_id={user_id}`
|
| 2558 |
|
| 2559 |
Lists sessions associated with a specified agent.
|
| 2560 |
|
|
|
|
| 2569 |
|
| 2570 |
```bash
|
| 2571 |
curl --request GET \
|
| 2572 |
+
--url http://{address}/api/v1/agents/{agent_id}/sessions?page={page}&page_size={page_size}&orderby={orderby}&desc={desc}&id={session_id}&user_id={user_id} \
|
| 2573 |
--header 'Authorization: Bearer <YOUR_API_KEY>'
|
| 2574 |
```
|
| 2575 |
|
|
|
|
| 2589 |
Indicates whether the retrieved sessions should be sorted in descending order. Defaults to `true`.
|
| 2590 |
- `id`: (*Filter parameter*), `string`
|
| 2591 |
The ID of the agent session to retrieve.
|
| 2592 |
+
- `user_id`: (*Filter parameter*), `string`
|
| 2593 |
+
The optional user-defined ID passed in when creating session.
|
| 2594 |
+
|
| 2595 |
#### Response
|
| 2596 |
|
| 2597 |
Success:
|