Stream Chat Unreal SDK
Loading...
Searching...
No Matches
ChatApi.h
1// Copyright 2026 Stream.IO, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "ChannelFlags.h"
6#include "CoreMinimal.h"
7#include "Request/Channel/ChannelRequestDto.h"
8#include "Request/Channel/MessagePaginationParamsRequestDto.h"
9#include "Request/Channel/PaginationParamsRequestDto.h"
10#include "Request/Message/MessageRequestDto.h"
11#include "Request/SortParamRequestDto.h"
12#include "RequestBuilder.h"
13#include "StreamJson.h"
14
15#include <type_traits>
16
17class FHttpClient;
18class FRequestBuilder;
19class FTokenManager;
20enum class EPushProvider : uint8;
28struct FFlagResponseDto;
32struct FHttpResponse;
43struct FResponseDto;
45struct FToken;
53
54template <class T>
55using TCallback = TFunction<void(const TResponse<T>&)>;
56
62class STREAMCHATAPI_API FChatApi : public TSharedFromThis<FChatApi>
63{
64public:
65 static TSharedRef<FChatApi> Create(const FString& InApiKey, const FString& InHost, const TSharedPtr<FTokenManager>&);
66
67#pragma region Moderation
86 void BanUser(
87 const FString& TargetUserId,
88 const FString& Type = {},
89 const FString& Id = {},
90 const TOptional<FTimespan>& Timeout = {},
91 const TOptional<FString>& Reason = {},
92 bool bShadow = false,
93 bool bIpBan = false,
94 TCallback<FResponseDto> Callback = {}) const;
95
103 void UnbanUser(const FString& TargetUserId, const FString& Type = {}, const FString& Id = {}, TCallback<FResponseDto> Callback = {}) const;
104
119 void QueryBannedUsers(
120 const TSharedRef<FJsonObject>& Filter,
121 const TArray<FSortParamRequestDto>& SortOptions = {},
122 const TOptional<FDateTime> CreatedAtAfterOrEqual = {},
123 const TOptional<FDateTime> CreatedAtAfter = {},
124 const TOptional<FDateTime> CreatedAtBeforeOrEqual = {},
125 const TOptional<FDateTime> CreatedAtBefore = {},
126 TOptional<uint32> Limit = {},
127 TOptional<uint32> Offset = {},
128 TCallback<FQueryBannedUsersResponseDto> Callback = {}) const;
129
136 void Flag(const FString& TargetMessageId = {}, const FString& TargetUserId = {}, TCallback<FFlagResponseDto> Callback = {}) const;
137
144 void MuteUsers(const TArray<FString>& TargetUserIds, TOptional<FTimespan> Timeout = {}, TCallback<FMuteUserResponseDto> Callback = {}) const;
145
151 void UnmuteUsers(const TArray<FString>& TargetUserIds, TCallback<FResponseDto> Callback = {}) const;
152
159 void MuteChannels(const TArray<FString>& TargetCids, TOptional<FTimespan> Timeout = {}, TCallback<FMuteChannelResponseDto> Callback = {}) const;
160
166 void UnmuteChannels(const TArray<FString>& TargetCids, TCallback<FResponseDto> Callback = {}) const;
167
177 void BlockUser(const FString& TargetUserId, TCallback<FBlockUserResponseDto> Callback = {}) const;
178
184 void UnblockUser(const FString& TargetUserId, TCallback<FResponseDto> Callback = {}) const;
185
190 void GetBlockedUsers(TCallback<FGetBlockedUsersResponseDto> Callback = {}) const;
191
193#pragma endregion Moderation
194
195#pragma region Channels
214 void QueryChannel(
215 const FString& ChannelType,
216 const FString& ConnectionId,
218 const FChannelRequestDto& Data = {},
219 const TOptional<FString>& ChannelId = {},
220 const TOptional<FMessagePaginationParamsRequestDto> MessagePagination = {},
221 const TOptional<FPaginationParamsRequestDto> MemberPagination = {},
222 const TOptional<FPaginationParamsRequestDto> WatcherPagination = {},
223 TCallback<FChannelStateResponseDto> Callback = {}) const;
224
231 void DeleteChannel(const FString& ChannelType, const FString& ChannelId, TCallback<FDeleteChannelResponseDto> Callback = {}) const;
232
241 void PartialUpdateChannel(
242 const FString& ChannelType,
243 const FString& ChannelId,
244 const TSharedRef<FJsonObject>& Set,
245 const TArray<FString>& Unset,
246 TCallback<FUpdateChannelPartialResponseDto> Callback = {}) const;
247
255 void UpdateChannel(
256 const FString& ChannelType,
257 const FString& ChannelId,
258 const FUpdateChannelRequestDto& Data,
259 TCallback<FUpdateChannelResponseDto> Callback = {}) const;
260
269 void HideChannel(const FString& ChannelType, const FString& ChannelId, bool bClearHistory = false, TCallback<FResponseDto> Callback = {}) const;
270
277 void ShowChannel(const FString& ChannelType, const FString& ChannelId, TCallback<FResponseDto> Callback = {}) const;
278
294 void QueryChannels(
295 const FString& ConnectionId,
297 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
298 const TArray<FSortParamRequestDto>& SortOptions = {},
299 TOptional<uint32> MemberLimit = {},
300 TOptional<uint32> MessageLimit = {},
301 TOptional<uint32> Limit = {},
302 TOptional<uint32> Offset = {},
303 TCallback<FChannelsResponseDto> Callback = {}) const;
304
312 void StopWatchingChannel(const FString& ChannelType, const FString& ChannelId, const FString& ConnectionId, TCallback<FResponseDto> Callback = {}) const;
313
329 void SearchMessages(
330 const TSharedRef<FJsonObject>& ChannelFilter,
331 const TOptional<FString>& Query = {},
332 const TOptional<TSharedRef<FJsonObject>>& MessageFilter = {},
333 const TArray<FSortParamRequestDto>& Sort = {},
334 TOptional<uint32> MessageLimit = {},
335 TOptional<uint32> Offset = {},
336 TOptional<FString> Next = {},
337 TCallback<FSearchResponseDto> Callback = {}) const;
338
343 void MarkChannelsRead(TCallback<FMarkReadResponseDto> Callback = {}) const;
344
352 void MarkChannelRead(
353 const FString& ChannelType,
354 const FString& ChannelId,
355 const TOptional<FString>& MessageId = {},
356 TCallback<FMarkReadResponseDto> Callback = {}) const;
357
370 void QueryMembers(
371 const FString& ChannelType,
372 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
373 const TOptional<FString>& ChannelId = {},
374 const TOptional<TArray<FString>>& Members = {},
375 const TArray<FSortParamRequestDto>& SortOptions = {},
376 const FMessagePaginationParamsRequestDto& Pagination = {},
377 TCallback<FMembersResponseDto> Callback = {}) const;
378
389 void TruncateChannel(
390 const FString& ChannelType,
391 const FString& ChannelId,
392 bool bHardDelete = false,
393 const TOptional<FDateTime>& TruncatedAt = {},
394 const TOptional<FMessageRequestDto>& Message = {},
395 bool bSkipPush = false,
396 TCallback<FTruncateChannelResponseDto> Callback = {}) const;
397
399#pragma endregion Channels
400
401#pragma region Messages
412 void GetMessage(const FString& MessageId, TCallback<FMessageResponseDto> Callback = {}) const;
413
422 void SendNewMessage(
423 const FString& ChannelType,
424 const FString& ChannelId,
425 const FMessageRequestDto& MessageRequest,
426 bool bSkipPush = false,
427 TCallback<FMessageResponseDto> Callback = {}) const;
428
434 void UpdateMessage(const FMessageRequestDto& MessageRequest, TCallback<FMessageResponseDto> Callback = {}) const;
435
442 void DeleteMessage(const FString& Id, bool bHard = false, TCallback<FMessageResponseDto> Callback = {}) const;
443
454 void SendReaction(
455 const FString& MessageId,
456 const FName& Type,
457 bool bEnforceUnique = true,
458 TOptional<uint32> Score = {},
459 bool bSkipPush = false,
460 TCallback<FReactionResponseDto> Callback = {}) const;
461
468 void DeleteReaction(const FString& MessageId, const FName& Type, TCallback<FReactionResponseDto> Callback = {}) const;
469
477 void GetReactions(const FString& MessageId, TOptional<uint32> Limit, TOptional<uint32> Offset, TCallback<FGetReactionsResponseDto> Callback = {}) const;
478
480#pragma endregion Messages
481
482#pragma region Events
495 template <class TEvent>
496 void SendChannelEvent(const FString& ChannelType, const FString& ChannelId, const TEvent&, TCallback<FEventResponseDto> Callback = {});
497
499#pragma endregion Events
500
501#pragma region Files
508#pragma endregion Files
509
510#pragma region Users
527 void QueryUsers(
528 const FString& ConnectionId,
529 bool bPresence = true,
530 const TOptional<TSharedRef<FJsonObject>>& Filter = {},
531 const TArray<FSortParamRequestDto>& SortOptions = {},
532 TOptional<uint32> Limit = {},
533 TOptional<uint32> Offset = {},
534 TCallback<FUsersResponseDto> Callback = {}) const;
535
536 void CreateGuest(const FUserObjectRequestDto& User, TCallback<FGuestResponseDto> Callback = {}) const;
537
538 struct FPartialUpdateUser
539 {
540 const FString& UserId;
541 const TSharedRef<FJsonObject>& Set;
542 const TArray<FString>& Unset;
543 };
544
550 void PartialUpdateUsers(const TArray<FPartialUpdateUser>& Users, TCallback<FUpdateUsersResponseDto> Callback = {}) const;
551
557 void UpsertUsers(const TMap<FString, FUserObjectRequestDto>& Users, TCallback<FUpdateUsersResponseDto> Callback = {}) const;
558
560#pragma endregion Users
561
562#pragma region Devices
574 void AddDevice(const FString& DeviceId, EPushProvider PushProvider, TCallback<FResponseDto> Callback = {}) const;
575
581 void RemoveDevice(const FString& DeviceId, TCallback<FResponseDto> Callback = {}) const;
582
587 void ListDevices(TCallback<FListDevicesResponseDto> Callback = {}) const;
588
590#pragma endregion Devices
591
592private:
593 explicit FChatApi(const FString& InApiKey, const FString& InHost, const TSharedPtr<FTokenManager>&);
594 void SendChannelEventInternal(
595 const FString& ChannelType,
596 const FString& ChannelId,
597 const TSharedRef<FJsonObject>& Event,
598 TCallback<FEventResponseDto> Callback = {}) const;
599
600 FString BuildUrl(const FString& Path) const;
601
602 void AddAuth(FRequestBuilder&, const FToken& Token) const;
603 void OnRequest(FRequestBuilder&) const;
604 void OnError(const FHttpResponse&, FRequestBuilder&) const;
605
606 TSharedPtr<FTokenManager> TokenManager;
607 FString ApiKey;
608
609 TSharedPtr<FHttpClient> Client;
610 FString Scheme;
611 FString Host;
612};
613
614template <class TEvent>
615void FChatApi::SendChannelEvent(const FString& ChannelType, const FString& ChannelId, const TEvent& Event, const TCallback<FEventResponseDto> Callback)
616{
617 static_assert(
618 std::is_same_v<decltype(TEvent::StaticType()), FName>,
619 "TEvent must have a static method 'StaticType' which returns a FName to use with SendChannelEvent.");
620 SendChannelEventInternal(ChannelType, ChannelId, JsonObject::UStructToJsonObject<TEvent>(Event), Callback);
621}
All Stream Chat REST API requests can be made via this object.
Definition ChatApi.h:63
void SendChannelEvent(const FString &ChannelType, const FString &ChannelId, const TEvent &, TCallback< FEventResponseDto > Callback={})
Send a custom or built-in event on this channel.
Definition ChatApi.h:615
EChannelFlags
Additional channel actions to perform when requesting channel data from API.
Definition ChannelFlags.h:15
@ State
Return channel state in response.
@ Watch
Start watching the channel (receive events regarding this channel via WebSocket)
@ UserId
The user ID of the user that sent the message.
@ Id
Message ID.
@ Type
Type of the message.
@ Query
Matches values by performing text search with the specified value.
STREAMJSON_API TSharedRef< FJsonObject > UStructToJsonObject(const UStruct *StructDefinition, const void *Struct, ENamingConvention NamingConvention=ENamingConvention::SnakeCase)
Converts from a UStruct to a Json Object.
Definition StreamJson.cpp:8
#/components/schemas/BlockUsersResponse
Definition BlockUserResponseDto.h:16
#/components/schemas/ChannelRequest
Definition ChannelRequestDto.h:16
#/components/schemas/ChannelResponse Represents channel in chat
Definition ChannelResponseDto.h:20
The desired sort options for Channel API queries.
Definition ChannelSortOption.h:44
#/components/schemas/ChannelStateResponse
Definition ChannelStateResponseDto.h:16
#/components/schemas/ChannelsResponse
Definition ChannelsResponseDto.h:17
#/components/schemas/DeleteChannelResponse
Definition DeleteChannelResponseDto.h:17
#/components/schemas/EventResponse
Definition EventResponseDto.h:17
#/components/schemas/FlagResponse
Definition FlagResponseDto.h:17
#/components/schemas/GetBlockedUsersResponse
Definition GetBlockedUsersResponseDto.h:48
#/components/schemas/GetReactionsResponse
Definition GetReactionsResponseDto.h:17
#/components/schemas/GuestResponse
Definition GuestResponseDto.h:17
#/components/schemas/Response
Definition ListDevicesResponseDto.h:17
#/components/schemas/MarkReadRequest
Definition MarkReadRequestDto.h:18
#/components/schemas/MarkReadResponse
Definition MarkReadResponseDto.h:17
#/components/schemas/MembersResponse
Definition MembersResponseDto.h:17
#/components/schemas/MessagePaginationParamsRequest
Definition MessagePaginationParamsRequestDto.h:17
#/components/schemas/MessageRequest
Definition MessageRequestDto.h:17
#/components/schemas/MessageResponse
Definition MessageResponseDto.h:17
#/components/schemas/MuteChannelResponse
Definition MuteChannelResponseDto.h:18
#/components/schemas/MuteUserResponse
Definition MuteUserResponseDto.h:18
#/components/schemas/QueryBannedUsersResponse
Definition QueryBannedUsersResponseDto.h:17
#/components/schemas/ReactionRequest Represents user reaction to a message
Definition ReactionRequestDto.h:16
#/components/schemas/ReactionResponse
Definition ReactionResponseDto.h:18
#/components/schemas/Response
Definition ResponseDto.h:15
#/components/schemas/SearchResponse
Definition SearchResponseDto.h:18
#/components/schemas/TruncateChannelResponse
Definition TruncateChannelResponseDto.h:18
#/components/schemas/UpdateChannelPartialResponse
Definition UpdateChannelPartialResponseDto.h:17
#/components/schemas/UpdateChannelRequest
Definition UpdateChannelRequestDto.h:19
#/components/schemas/UpdateChannelResponse
Definition UpdateChannelResponseDto.h:18
#/components/schemas/UpdateUsersResponse
Definition UpdateUsersResponseDto.h:17
#/components/schemas/UserObjectRequest
Definition UserObjectRequestDto.h:16
#/components/schemas/UsersResponse
Definition UsersResponseDto.h:17