Message Feedback

Comprehensive guide to managing message feedback in the View Assistant platform, including feedback creation, retrieval, updates, and deletion for conversation messages.

Overview

Message Feedback enables users to provide feedback, ratings, and evaluations for AI-generated messages within conversations. This feature allows collection of user sentiment, quality ratings, and improvement suggestions to enhance AI model performance and conversation quality.

Message Feedback is managed via the Assistant API at [http|https]://[hostname]:[port]/v1.0/tenants/[tenant-guid]/assistant/conversations/[conversation-id]/messages/[message-id]/feedback and supports comprehensive operations including feedback creation, retrieval, updates, and deletion for optimal feedback management workflows.

API Endpoints

Message Feedback is managed via the Assistant server API at [http|https]://[hostname]:[port]/v1.0/tenants/[tenant-guid]/assistant/conversations/[conversation-id]/messages/[message-id]/feedback

Supported HTTP Methods: GET, POST, PATCH, DELETE

Important: All feedback operations require appropriate authentication tokens.

Message Feedback Object Structure

Message feedback objects contain comprehensive information about user feedback for AI-generated messages. Here's the complete structure:

{
  "feedback_id": "de1001b8-715a-48af-8995-2b07df6fbae9",
  "message_id": "dcd803bf-c596-4ab1-a430-1e84a4cf1006",
  "conversation_id": "0781ad00-9730-4477-8b57-de14ad970f92",
  "rating": "positive",
  "details": "Very helpful and accurate response",
  "tags": [
    "accurate",
    "helpful"
  ],
  "metadata": null,
  "created_at": "2025-11-07T11:05:10.048071Z",
  "updated_at": "2025-11-07T11:05:10.048071Z"
}

Field Descriptions

  • feedback_id (GUID): Globally unique identifier for the feedback object
  • message_id (GUID): Globally unique identifier for the message this feedback relates to
  • conversation_id (GUID): Globally unique identifier for the conversation containing the message
  • rating (string): Rating value for the feedback (e.g., "positive", "neutral", "negative")
  • details (string): Detailed text feedback or comment about the message
  • tags (array): Array of string tags categorizing the feedback
  • metadata (object, nullable): Additional metadata associated with the feedback (can be null)
  • created_at (datetime): UTC timestamp when the feedback was created
  • updated_at (datetime): UTC timestamp when the feedback was last updated

Supported Operations

  • Create: Create new feedback for a specific message
  • Read: Retrieve feedback for a specific message (returns single feedback or array)
  • Read All: Retrieve all feedback entries for a conversation with pagination
  • Update: Modify existing feedback for a message
  • Delete: Remove feedback for a message

Create Message Feedback

Creates new feedback for a message using POST /v1.0/tenants/[tenant-guid]/assistant/conversations/[conversation-id]/messages/[message-id]/feedback.

Request Parameters

  • conversation-id (string, Path, Required): ID of the conversation containing the message
  • message-id (string, Path, Required): ID of the message to provide feedback for

Request Body

{
  "rating": "positive",
  "details": "Very helpful and accurate response",
  "tags": ["accurate", "helpful"],
}
curl --location 'http://localhost:8000/v1.0/tenants/00000000-0000-0000-0000-000000000000/assistant/conversations/f8015792-0bd4-4fdb-990e-3b6f8554e0c8/messages/284e575f-de0c-4b6d-9f31-120da62d7a32/feedback' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
  "rating": "positive",
  "details": "Very helpful and accurate response",
  "tags": ["accurate", "helpful"]
}'
import { ViewAssistantSdk } from "view-sdk";

const api = new ViewAssistantSdk(
  "http://localhost:8000/", //endpoint
  "00000000-0000-0000-0000-000000000000", //tenant Id
  "default" //access key
);

const createFeedbackMessage = async () => {
  try {
    const response = await api.MessageFeedback.create(
      '7154795f-3683-4690-a1de-98701e456dae',
      '12345678-1234-5678-1234-567812345678',
      {
        "rating": "positive",
        "details": "Very helpful and accurate response",
        "tags": ["accurate", "helpful"]
      }
    );
    console.log(response, 'Feedback message created successfully');
  } catch (error) {
    console.log(error, 'Error creating feedback message');
  }
};

createFeedbackMessage();
import view_sdk
from view_sdk import assistant
from view_sdk.sdk_configuration import Service

sdk = view_sdk.configure(
    access_key="default",
    base_url="localhost",
    tenant_guid="00000000-0000-0000-0000-000000000000",
    service_ports={Service.DEFAULT: 8000},
)

def createFeedback():
    feedback = assistant.MessageFeedback.create(
        conversation_id="abc123-def456-ghi789",
        message_id="msg-001",
        rating="positive",
        details="Very helpful and accurate response",
        tags=["accurate", "helpful"],
        metadata=None
    )
    print("Created Feedback:")
    print(feedback)

createFeedback()
using View.Sdk;
using View.Sdk.Assistant;

ViewAssistantSdk sdk = new ViewAssistantSdk(Guid.Parse("00000000-0000-0000-0000-000000000000"), 
                                            "default", 
                                            "http://localhost:8000/");

MessageFeedbackRequest request = new MessageFeedbackRequest
{
    ConversationId = Guid.Parse("<converstaion-guid>"),
    MessageId = Guid.Parse("<mssage-guid>"),
    Rating = "positive",
    Details = "Very helpful and accurate response",
    Tags = newList<string> { "accurate", "helpful" },
    Metadata = null
};

MessageFeedback feedback = await sdk.Feedback.Create(request);

Read Message Feedback

Retrieves feedback for a specific message using GET /v1.0/tenants/[tenant-guid]/assistant/conversations/[conversation-id]/messages/[message-id]/feedback. Returns either a single feedback object or an array of feedback entries.

Request Parameters

  • conversation-id (string, Path, Required): ID of the conversation containing the message
  • message-id (string, Path, Required): ID of the message to retrieve feedback for
curl --location 'http://localhost:8000/v1.0/tenants/00000000-0000-0000-0000-000000000000/assistant/conversations/abc123-def456-ghi789/messages/msg-001/feedback' \
--header 'Authorization: ••••••'
import { ViewAssistantSdk } from "view-sdk";

const api = new ViewAssistantSdk(
  "http://localhost:8000/", //endpoint
  "00000000-0000-0000-0000-000000000000", //tenant Id
  "default" //access key
);

const readFeedback = async () => {
  try {
    const response = await api.MessageFeedback.readMessageFeedback(
      "abc123-def456-ghi789", // conversationId
      "msg-001" // messageId
    );
    console.log(response, "Feedback fetched successfully");
  } catch (err) {
    console.log("Error fetching feedback:", err);
  }
};

readFeedback();
import view_sdk
from view_sdk import assistant
from view_sdk.sdk_configuration import Service

sdk = view_sdk.configure(
    access_key="default",
    base_url="localhost",
    tenant_guid="00000000-0000-0000-0000-000000000000",
    service_ports={Service.DEFAULT: 8000},
)

def readFeedback():
    feedback = assistant.MessageFeedback.read_message_feedback(
        conversation_id="abc123-def456-ghi789",
        message_id="msg-001"
    )
    print("Retrieved Feedback:")
    print(feedback)

readFeedback()
using View.Sdk;
using View.Sdk.Assistant;

ViewAssistantSdk sdk = new ViewAssistantSdk(Guid.Parse("00000000-0000-0000-0000-000000000000"), 
                                            "default", 
                                            "http://localhost:8000/");

MessageFeedback feedback = await sdk.Feedback.Retrieve(
    "abc123-def456-ghi789",
    "msg-001"
);

Response

Returns either a single feedback object or an array of feedback entries:

Single Feedback Response:

{
  "feedback_id": "de1001b8-715a-48af-8995-2b07df6fbae9",
  "message_id": "dcd803bf-c596-4ab1-a430-1e84a4cf1006",
  "conversation_id": "0781ad00-9730-4477-8b57-de14ad970f92",
  "rating": "positive",
  "details": "Very helpful and accurate response",
  "tags": [
    "accurate",
    "helpful"
  ],
  "metadata": null,
  "created_at": "2025-11-07T11:05:10.048071Z",
  "updated_at": "2025-11-07T11:05:10.048071Z"
}

Read All Conversation Feedback

Retrieves all feedback entries for a conversation using GET /v1.0/tenants/[tenant-guid]/assistant/conversations/[conversation-id]/feedback. Returns a paginated list of all feedback entries across all messages in the conversation.

Request Parameters

  • conversation-id (string, Path, Required): ID of the conversation to retrieve feedback for
  • limit (number, Query, Optional): Number of feedback entries to retrieve (default: 100)
  • offset (number, Query, Optional): Offset for pagination (default: 0)
curl --location 'http://localhost:8000/v1.0/tenants/00000000-0000-0000-0000-000000000000/assistant/conversations/abc123-def456-ghi789/feedback?limit=100&offset=0' \
--header 'Authorization: ••••••'
import { ViewAssistantSdk } from "view-sdk";

const api = new ViewAssistantSdk(
  "http://localhost:8000/", //endpoint
  "00000000-0000-0000-0000-000000000000", //tenant Id
  "default" //access key
);

const readAllConversationFeedback = async () => {
  try {
    const response = await api.MessageFeedback.readAllConversationFeedback('7154795f-3683-4690-a1de-98701e456dae');
    console.log(response, 'All conversation feedback fetched successfully');
  } catch (error) {
    console.log(error, 'Error reading all conversation feedback');
  }
};

readAllConversationFeedback();
import view_sdk
from view_sdk import assistant
from view_sdk.sdk_configuration import Service

sdk = view_sdk.configure(
    access_key="default",
    base_url="localhost",
    tenant_guid="00000000-0000-0000-0000-000000000000",
    service_ports={Service.DEFAULT: 8000},
)

def readAllFeedback():
    feedbacks = assistant.MessageFeedback.read_all_conversation_feedback(
        conversation_id="abc123-def456-ghi789",
        limit=100,
        offset=0
    )
    print("All Feedback:")
    print(feedbacks)

readAllFeedback()
using View.Sdk;
using View.Sdk.Assistant;

ViewAssistantSdk sdk = new ViewAssistantSdk(Guid.Parse("00000000-0000-0000-0000-000000000000"), 
                                            "default", 
                                            "http://localhost:8000/");

MessageFeedbacksResponse feedbacks = await sdk.Feedback.RetrieveMany(
    "abc123-def456-ghi789",
    limit: 100,
    offset: 0
);

Response

{
    "feedback": [
        {
            "feedback_id": "de1001b8-715a-48af-8995-2b07df6fbae9",
            "message_id": "dcd803bf-c596-4ab1-a430-1e84a4cf1006",
            "conversation_id": "0781ad00-9730-4477-8b57-de14ad970f92",
            "rating": "positive",
            "details": "Very helpful and accurate response",
            "tags": [
                "accurate",
                "helpful"
            ],
            "metadata": null,
            "created_at": "2025-11-07T11:05:10.048071Z",
            "updated_at": "2025-11-07T11:05:10.048071Z"
        }
    ],
    "total": 1,
    "limit": 100,
    "offset": 0
}

Update Message Feedback

Updates existing feedback for a message using PATCH /v1.0/tenants/[tenant-guid]/assistant/conversations/[conversation-id]/messages/[message-id]/feedback.

Request Parameters

  • conversation-id (string, Path, Required): ID of the conversation containing the message
  • message-id (string, Path, Required): ID of the message to update feedback for

Request Body

Provide the fields to update:

{
  "rating": "neutral",
  "details": "Updated details - still helpful but could be more detailed",
  "tags": ["helpful", "needs-improvement"],
  "metadata": null
}
curl --location --request PUT 'http://localhost:8000/v1.0/tenants/00000000-0000-0000-0000-000000000000/assistant/conversations/0781ad00-9730-4477-8b57-de14ad970f92/messages/284e575f-de0c-4b6d-9f31-120da62d7a32/feedback' \
--header 'Content-Type: application/json' \
--header 'x-token: user-token' \
--header 'Authorization: ••••••' \
--data '{
  "rating": "negative",
  "details": "Response was not accurate",
  "tags": ["inaccurate"]
}'
import { ViewAssistantSdk } from "view-sdk";

const api = new ViewAssistantSdk(
  "http://localhost:8000/", //endpoint
  "00000000-0000-0000-0000-000000000000", //tenant Id
  "default" //access key
);

const updateFeedbackMessage = async () => {
  try {
    const response = await api.MessageFeedback.update(
      '7154795f-3683-4690-a1de-98701e456dae',
      '12345678-1234-5678-1234-567812345678',
      {
        "rating": "negative",
        "details": "Response was not accurate",
        "tags": ["inaccurate"]
      }
    );
    console.log(response, 'Feedback message updated successfully');
  } catch (error) {
    console.log(error, 'Error updating feedback message');
  }
};

updateFeedbackMessage();
import view_sdk
from view_sdk import assistant
from view_sdk.sdk_configuration import Service

sdk = view_sdk.configure(
    access_key="default",
    base_url="localhost",
    tenant_guid="00000000-0000-0000-0000-000000000000",
    service_ports={Service.DEFAULT: 8000},
)

def updateFeedback():
    feedback = assistant.MessageFeedback.update(
        conversation_id="abc123-def456-ghi789",
        message_id="msg-001",
        rating="neutral",
        details="Updated details - still helpful but could be more detailed",
        tags=["helpful", "needs-improvement"],
        metadata=None
    )
    print("Updated Feedback:")
    print(feedback)

updateFeedback()
using View.Sdk;
using View.Sdk.Assistant;

ViewAssistantSdk sdk = new ViewAssistantSdk(Guid.Parse("00000000-0000-0000-0000-000000000000"), 
                                            "default", 
                                            "http://localhost:8000/");

MessageFeedbackRequest request = new MessageFeedbackRequest
{
    ConversationId = Guid.Parse("<converstaion-guid>"),
    MessageId = Guid.Parse("<mssage-guid>"),
    Rating = "neutral",
    Details = "Updated details - still helpful but could be more detailed",
    Tags = new List<string> { "helpful", "needs-improvement" },
    Metadata = null
};

MessageFeedback feedback = await sdk.Feedback.Update(request);

Response

Returns the updated feedback object:

{
  "feedback_id": "de1001b8-715a-48af-8995-2b07df6fbae9",
  "message_id": "dcd803bf-c596-4ab1-a430-1e84a4cf1006",
  "conversation_id": "0781ad00-9730-4477-8b57-de14ad970f92",
  "rating": "neutral",
  "details": "Updated details - still helpful but could be more detailed",
  "tags": [
    "helpful",
    "needs-improvement"
  ],
  "metadata": null,
  "created_at": "2025-11-07T11:05:10.048071Z",
  "updated_at": "2025-11-07T11:15:20.048071Z"
}

Delete Message Feedback

Deletes feedback for a message using DELETE /v1.0/tenants/[tenant-guid]/assistant/conversations/[conversation-id]/messages/[message-id]/feedback. This permanently removes the feedback entry.

Request Parameters

  • conversation-id (string, Path, Required): ID of the conversation containing the message
  • message-id (string, Path, Required): ID of the message to delete feedback for

Note: Deleting feedback removes it permanently. This action cannot be undone.

curl --location --request DELETE 'http://localhost:8000/v1.0/tenants/00000000-0000-0000-0000-000000000000/assistant/conversations/abc123-def456-ghi789/messages/msg-001/feedback' \
--header 'Authorization: ••••••'
import { ViewAssistantSdk } from "view-sdk";

const api = new ViewAssistantSdk(
  "http://localhost:8000/", //endpoint
  "00000000-0000-0000-0000-000000000000", //tenant Id
  "default" //access key
);

const deleteFeedback = async () => {
  try {
    const response = await api.MessageFeedback.delete(
      "abc123-def456-ghi789", // conversationId
      "msg-001" // messageId
    );
    console.log(response, "Feedback deleted successfully");
  } catch (err) {
    console.log("Error deleting feedback:", err);
  }
};

deleteFeedback();
import view_sdk
from view_sdk import assistant
from view_sdk.sdk_configuration import Service

sdk = view_sdk.configure(
    access_key="default",
    base_url="localhost",
    tenant_guid="00000000-0000-0000-0000-000000000000",
    service_ports={Service.DEFAULT: 8000},
)

def deleteFeedback():
    result = assistant.MessageFeedback.delete(
        conversation_id="abc123-def456-ghi789",
        message_id="msg-001"
    )
    print("Deleted Feedback:", result)

deleteFeedback()
using View.Sdk;
using View.Sdk.Assistant;

ViewAssistantSdk sdk = new ViewAssistantSdk(Guid.Parse("00000000-0000-0000-0000-000000000000"), 
                                            "default", 
                                            "http://localhost:8000/");

bool deleted = await sdk.MessageFeedback.Delete("abc123-def456-ghi789","msg-001");

Best Practices

When managing message feedback in the View Assistant platform, consider the following recommendations for optimal feedback collection and management:

  • Feedback Collection: Encourage users to provide feedback for AI responses to improve model performance and conversation quality
  • Rating Systems: Use consistent rating values (e.g., "positive", "neutral", "negative") to enable meaningful analysis
  • Details Analysis: Leverage text details to identify common issues and improvement areas
  • Feedback Aggregation: Use conversation-level feedback endpoints to analyze overall conversation quality
  • User Privacy: Respect user privacy when collecting and storing feedback data
  • Feedback Lifecycle: Implement appropriate retention policies for feedback data
  • Analytics Integration: Aggregate feedback data for insights into AI model performance and user satisfaction
  • Error Handling: Implement robust error handling for feedback operations, especially when feedback may not exist

Next Steps

After successfully managing message feedback, you can:

  • Model Improvement: Use feedback data to identify areas for AI model enhancement and training
  • Quality Analytics: Analyze feedback patterns to understand conversation quality trends
  • User Experience: Leverage feedback to improve user experience and conversation flows
  • Reporting: Build dashboards and reports showing feedback metrics and trends
  • Feedback Loops: Implement automated feedback loops to continuously improve AI responses
  • Platform Integration: Integrate feedback data with other View platform services for comprehensive analytics