Version: Latest

Conversation API

Introduction

The Conversation API allows external access to delete and tag conversations within Rasa Studio.

Requirements

Available APIs

Query: rawConversations

Schema:

type Query {
rawConversations(input: RawConversationsInput!): RawConversationsOutput!
}
input RawConversationsInput {
assistantId: ID!
fromTime: String
toTime: String
limit: Int
offset: Int
}
type RawConversation {
id: ID!
conversationEvents: [JSON!]!
}
type RawConversationsOutput {
conversations: [RawConversation!]!
count: Int!
}

Input: RawConversationsInput

FieldDescription
assistantIdThe unique identifier of the assistant.
fromTimeOptional start time filter for the conversation retrieval in ISO 8601 UTC format (YYYY-MM-DDTHH:MM:SS.sssZ).
toTimeOptional end time filter for the conversation retrieval in ISO 8601 UTC format (YYYY-MM-DDTHH:MM:SS.sssZ).
limitLimits the number of conversations returned. Default is 10.
offsetSkips a specified number of conversations for pagination. Default is 0.

Output: RawConversationsOutput

FieldDescription
conversationsA list of raw conversation objects. Each conversation contains an id and a list of conversationEvents in JSON format.
countTotal count of conversations matching the query criteria. Count is not affected by paging arguments limit and offset.

JSON Structure for conversationEvents

The conversationEvents field contains a list of events that occur within a conversation. These events follow a specific structure that can vary depending on the type of event. For a full description of all possible events, please refer to the Rasa Events Documentation.

Here are a few examples:

Example 1: User Uttered Event
{
"sender_id": "f9e5db46255c42e8aefd7fce720d192f",
"event": "user",
"timestamp": 1692186822.4774666,
"metadata": {
"model_id": "003d55f2a67147a597cec7e1df3e96e9",
"assistant_id": "rich-response-rasa"
},
"text": "/mood_great",
"parse_data": {
"intent": {
"name": "mood_great",
"confidence": 1
},
"entities": [],
"text": "/mood_great",
"message_id": "7457d2d8174243409e39b165164c79c7",
"metadata": {},
"intent_ranking": [
{
"name": "mood_great",
"confidence": 1
}
]
},
"input_channel": "cmdline",
"message_id": "7457d2d8174243409e39b165164c79c7"
}
Example 2: Bot Uttered Event
{
"sender_id": "f9e5db46255c42e8aefd7fce720d192f",
"event": "bot",
"timestamp": 1692186813.6298656,
"metadata": {
"utter_action": "utter_greet",
"model_id": "003d55f2a67147a597cec7e1df3e96e9",
"assistant_id": "rich-response-rasa"
},
"text": "Hey! How are you?",
"data": {
"elements": null,
"quick_replies": [
{
"title": "great",
"payload": "/mood_great"
},
{
"title": "super sad",
"payload": "/mood_unhappy",
"image_url": "https://i.imgur.com/l4pF9Fb.jpg"
}
],
"buttons": [
{
"title": "great",
"payload": "/mood_great"
},
{
"title": "super sad",
"payload": "/mood_unhappy",
"image_url": "https://i.imgur.com/l4pF9Fb.jpg"
}
],
"attachment": null,
"image": null,
"custom": null
}
}
Example 3: Action Executed Event
{
"sender_id": "f9e5db46255c42e8aefd7fce720d192f",
"event": "action",
"timestamp": 1692186813.2051082,
"metadata": {
"model_id": "003d55f2a67147a597cec7e1df3e96e9",
"assistant_id": "rich-response-rasa"
},
"name": "action_session_start",
"policy": null,
"confidence": 1,
"action_text": null,
"hide_rule_turn": false
}

Example curl Request

Here's an example cURL request to the rawConversations endpoint:

curl -X POST https://<your-api-url>/api/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-access-token>" \
-d '{"query": "query rawConversations($input: RawConversationsInput!) { rawConversations(input: $input) { conversations { id, conversationEvents }, count } }", "variables": { "input": { "assistantId": "12345", "fromTime": "2024-01-01T00:00:00Z", "toTime": "2024-01-31T23:59:59Z", "limit": 10, "offset": 0 } }}'

Mutation: addConversationTagToConversation

Schema:

type Mutation {
addConversationTagToConversation(
input: AddConversationTagToConversationInput!
): Boolean!
}
input AddConversationTagToConversationInput {
conversationId: ID!
tagId: ID!
}

Input: AddConversationTagToConversationInput

FieldDescription
conversationIdThe unique identifier of the conversation to which the tag will be added.
tagIdThe unique identifier of the tag to be added to the conversation.

Output

Returns true if the tag was successfully added.

Note: If the tag already exists, the endpoint will also return true. If a non-existent conversation, tag, or resource mismatch occurs, a descriptive error message with an appropriate error code is returned.

Example curl Request

curl -X POST https://<your-api-url>/api/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-access-token>" \
-d '{"query": "mutation addConversationTagToConversation($input: AddConversationTagToConversationInput!) { addConversationTagToConversation(input: $input) }", "variables": { "input": { "conversationId": "12345", "tagId": "67890" } }}'

Mutation: removeConversationTagFromConversation

Schema:

type Mutation {
removeConversationTagFromConversation(
input: RemoveConversationTagFromConversationInput!
): Boolean!
}
input RemoveConversationTagFromConversationInput {
conversationId: ID!
tagId: ID!
}

Input: RemoveConversationTagFromConversationInput

FieldDescription
conversationIdUnique identifier of the conversation from which the tag should be removed.
tagIdUnique identifier of the tag to be removed from the conversation.

Output

Returns true if the tag was successfully removed.

Note: If the provided tagId is not linked to the conversationId, or if the provided conversationId or tagId is not present in the system, the endpoint will still return true.

Example curl Request

curl -X POST https://<your-api-url>/api/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-access-token>" \
-d '{"query": "mutation removeConversationTagFromConversation($input: RemoveConversationTagFromConversationInput!) { removeConversationTagFromConversation(input: $input) }", "variables": { "input": { "conversationId": "12345", "tagId": "67890" } }}'

Mutation: deleteConversations

Schema:

type Mutation {
deleteConversations(input: DeleteConversationsInput!): Int!
}
input DeleteConversationsInput {
conversationIds: [ID!]!
}

Input: DeleteConversationsInput

FieldDescription
conversationIdsList of conversation IDs to be deleted.

Output

Returns the count of deleted conversations.

Note: Count only counts conversations that were actually deleted. If all IDs passed to API were invalid count will be zero.

Example curl Request

curl -X POST https://<your-api-url>/api/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-access-token>" \
-d '{"query": "mutation deleteConversations($input: DeleteConversationsInput!) { deleteConversations(input: $input) }", "variables": { "input": { "conversationIds": ["12345"] } }}'