Table of Contents

Class SupportMessage

Namespace
Tharga.Team
Assembly
Tharga.Team.dll

One entry in a support case's transcript.

public record SupportMessage : IEquatable<SupportMessage>
Inheritance
SupportMessage
Implements
Inherited Members

Remarks

The author is recorded twice, and both are needed. AuthorIdentity is the stable subject that survives everything and can be matched exactly; AuthorName is a snapshot taken when the message was written, so the transcript stays readable after the author is deleted or leaves the team. The audit trail carries the same pair, for the same reason — see AuditEntry.CallerUserIdentity and AuditEntry.CallerIdentity.

Properties

AsSupport

Written from the support side — a support page or a support channel — whoever wrote it. Such a message answers the case even when its writer is also the one who raised it.

public bool AsSupport { get; init; }

Property Value

bool

AssistantCalls

The service calls the assistant made for this answer, in order; empty for any other entry, and for an answer that looked nothing up.

public SupportAssistantCall[] AssistantCalls { get; init; }

Property Value

SupportAssistantCall[]

AssistantUsage

The tokens the model reported for this answer, or null for any other entry and when it reported none.

public SupportAssistantUsage AssistantUsage { get; init; }

Property Value

SupportAssistantUsage

Attachments

The files this entry carries, in the order they arrived; empty for none.

public SupportAttachment[] Attachments { get; init; }

Property Value

SupportAttachment[]

AuthorIdentity

The author's stable authentication subject, or null for a System entry.

public string AuthorIdentity { get; init; }

Property Value

string

AuthorName

The author's display name as it was when the message was written.

public string AuthorName { get; init; }

Property Value

string

Body

The entry as plain text, which every reader can use; with BodyHtml set it is that HTML's plain-text rendering, or a received mail's own text part.

public required string Body { get; init; }

Property Value

string

BodyHtml

The entry's formatting as sanitized HTML beside Body, or null for a plain entry; show it only through the sanitizer again.

public string BodyHtml { get; init; }

Property Value

string

Delivery

Whether this entry reached the case's external channel.

public SupportMessageDelivery Delivery { get; init; }

Property Value

SupportMessageDelivery

Remarks

A message that arrived from a channel is Sent by definition — it is already there, and posting it back would echo it.

DeliveryError

Why the entry did not reach its channel, as the channel put it; null unless Delivery is Failed.

public string DeliveryError { get; init; }

Property Value

string

Remarks

Kept because "not delivered" alone cannot be acted on. A recipient the server refused, a bounce saying the sending domain failed SPF and a policy withholding mail outside production are three different fixes, and only the reason says which one is needed.

Kind

public required SupportMessageKind Kind { get; init; }

Property Value

SupportMessageKind

Rating

How the person the assistant answered rated this answer; only the assistant's answers are rated.

public SupportAnswerRating Rating { get; init; }

Property Value

SupportAnswerRating

SentAt

public required DateTime SentAt { get; init; }

Property Value

DateTime

Sequence

Position in the case's transcript, from 1. Also the paging cursor.

public required int Sequence { get; init; }

Property Value

int

Source

The channel this entry arrived from, or null when it was written through the application itself.

public SupportChannelType? Source { get; init; }

Property Value

SupportChannelType?

Remarks

Where a message came from is not the same question as who wrote it. Kind says whether a person or the toolkit produced the entry; this says which door it came through, and the two vary independently.

It carries how much the attribution can be trusted, which is why it is worth surfacing rather than logging. An entry written through the application was authored by an authenticated caller. One from Email was not: mail is accepted on a sender match, because nothing about a From: header authenticates anybody. A reader deciding how much weight to put on a name needs to be able to tell those apart.