Categorygithub.com/gildas/go-gcloudcx
modulepackage
0.9.4
Repository: https://github.com/gildas/go-gcloudcx.git
Documentation: pkg.go.dev

# README

go-gcloudcx

GoVersion GoDoc License Report

A Package to send requests to HTTP/REST services.

Genesys Cloud CX Client Library in GO

Have a look at the examples/ folder for complete examples on how to use this library.

Usage

You first start by creating a gcloudcx.Client that will allow to send requests to Genesys Cloud:

log    := logger.Create("gcloudcx")
client := gcloudcx.NewClient(&gcloudcx.ClientOptions{
	DeploymentID: "123abc0981234i0df8g0",
	Logger:       log,
})

You can also pass a context.Context with a logger.Logger:

log    := logger.Create("gcloudcx")
client := gcloudcx.NewClient(&gcloudcx.ClientOptions{
    Context:      log.ToContext(context.Background())
	DeploymentID: "123abc0981234i0df8g0",
})

This makes cascading logs into contexts a lot easier.

You can choose the authorization grant right away as well:

log    := logger.Create("gcloudcx")
client := gcloudcx.NewClient(&gcloudcx.ClientOptions{
	DeploymentID: "123abc0981234i0df8g0",
	Logger:       log,
}).SetAuthorizationGrant(&gcloudcx.AuthorizationCodeGrant{
	ClientID:    "hlkjshdgpiuy123387",
	Secret:      "879e8ugspojdgj",
	RedirectURL: "http://my.acme.com/token",
})

Or,

log    := logger.Create("gcloudcx")
client := gcloudcx.NewClient(&gcloudcx.ClientOptions{
	DeploymentID: "123abc0981234i0df8g0",
	Logger:       log,
}).SetAuthorizationGrant(&gcloudcx.ClientCredentialsGrant{
	ClientID: "jklsdufg89u9j234",
	Secret:   "sdfgjlskdfjglksdfjg",
})

As of today, Authorization Code and Client Credentials grants are implemented.

In the case of the Authorization Code, the best is to run a Webserver in your code and to handle the authentication requests in the router. The library provides two helpers to manage the authentication:

  • AuthorizeHandler() that can be used to ensure a page has an authenticated client,
  • LoggedInHandler() that can be used in the RedirectURL to process the results of the authentication.

They can be used like this (using the gorilla/mux router, for example):

router := mux.NewRouter()
// This route is used as the RedirectURL of the client
router.Methods("GET").Path("/token").Handler(client.LoggedInHandler()(myhandler()))

authorizedRouter := router.PathPrefix("/").Subrouter()

authorizedRouter.Use(client.AuthorizeHandler())

// This is the main route of this application, we want a fully functional gcloudcx.Client
authorizedRouter.Methods("GET").Path("/").HandlerFunc(mainRouteHandler)

In you HttpHandler, the client will be available from the request's context:

func mainRouteHandler(w http.ResponseWriter, r *http.Request) {
	client, err := gcloudcx.ClientFromContext(r.Context())
	if err != nil {
		core.RespondWithError(w, http.StatusServiceUnavailable, err)
		return
	}

	// Let's get my organization here, as an example...
	organization, err := client.GetMyOrganization(r.Context())
	if err != nil {
		core.RespondWithError(w, http.StatusServiceUnavailable, err)
		return
	}
	core.RespondWithJSON(w, http.StatusOK, struct {
		OrgName  string `json:"organization"`
	}{
		OrgName:  organization.String(),
	})
}

When using the Client Credential grant, you can configure the grant to tell when the token gets updated, allowing you to store it and re-use it in the future:

var TokenUpdateChan = make(chan gcloudcx.UpdatedAccessToken)

func main() {
	// ...
	defer close(TokenUpdateChan)

	go func() {
		for {
			data, opened := <-TokenUpdateChan

			if !opened {
				return
			}

			log.Printf("Received Token: %s\n", data.Token)

			myID, ok := data.CustomData.(string)
			if (!ok) {
				log.Printf("Shoot....\n")
			} else {
				log.Printf("myID: %s\n", myID)
			}
		}
	}()

	client := gcloudcx.NewClient(&gcloudcx.ClientOptions{
		// ...
	}).SetAuthorizationGrant(&gcloudcx.ClientCredentialsGrant{
		ClientID: "1234",
		Secret:   "s3cr3t",
		TokenUpdated: TokenUpdateChan,
		CustomData:   "myspecialID",
		Token: savedToken,
	})

	// do stuff with the client, etc.
}

As you can see, you can even pass some custom data (interface{}, so anything really) to the grant and that data will be passed back to the func that handles the chan.

Using Go's contexts

All functions that will end up calling the Genesys Cloud API must use a context as their first argument.

This allow developers to, eventually, control timeouts, and other things.

A useful pattern is to add a logger to the context with various records, when the library function executes, it will send its logs to that logger, thus using all the records that were set:

log := logger.Create("MYAPP").Record("coolId", myID)

user := client.GetMyUser(log.ToContext(someContext))

In the logs, you will see the value of coolId in every line produced by client.GetMyUser.

If the context does not contain a logger, the client.Logger is used.

Fetch resources

The library provides a Fetch function that will fetch a resource from the Genesys Cloud API.

// Fetch a user by its ID
user, err := gcloudcx.Fetch[gcloud.User](context, client, userID) // userID is a uuid.UUID

You can use FetchBy to fetch a resource by a specific field:

integration, err := gcloudcx.FetchBy(context, client, func (integration gcloudcx.OpenMessagingIntegration) bool {
	return integration.Name == "My Integration"
})

Note: This method can be rather slow as it fetches all the resources of the type and then filters them.

You can also add query criteria to the FetchBy function:

recipient, err := gcloudcx.FetchBy(
	context,
	client,
	func (recipient gcloudcx.Recipient) bool {
		return recipient.Name == "My Recipient"
	},
	gcloudcx.Query{
		"messengerType": "open",
		"pageSize":      100,
	},
)

Finally, you can use FetchAll to fetch all the resources of a type:

integrations, err := gcloudcx.FetchAll[gcloudcx.OpenMessagingIntegration](context, client)

Again, some query criteria can be added:

integrations, err := gcloudcx.FetchAll[gcloudcx.OpenMessagingIntegration](context, client, gcloudcx.Query{
	"pageSize": 100,
})

Create Resource

You can also create a resource without fetching it:

user := gcloud.New[gcloud.User](context, client, id, log)

This will create a resource and set its ID, client, and log properly as needed.

Notifications

The Genesys Cloud Notification API is accessible via the NotificationChannel and NotificationTopic types.

Processing incoming Notification Topics is simply done in a loop by reading the TopicReceived Go chan.

Here is a quick example:

user, err := client.GetMyUser(context.Background())
if err != nil {
	log.Errorf("Failed to retrieve my User", err)
	panic(err)
}

notificationChannel, err := client.CreateNotificationChannel(context.Background())
if err != nil {
	log.Errorf("Failed to create a notification channel", err)
	panic(err)
}

topics, err := config.NotificationChannel.Subscribe(
	context.Background(),
	gcloudcx.UserPresenceTopic{}.With(user),
)
if err != nil {
	log.Errorf("Failed to subscribe to topics", err)
	panic(err)
}
log.Infof("Subscribed to topics: [%s]", strings.Join(topics, ","))

// Call the Genesys Cloud Notification Topic loop
go func() {
	for {
		select {
		case receivedTopic := notificationChannel.TopicReceived:
			if receivedTopic == nil {
				log.Infof("Terminating Topic message loop")
				return
			}
			switch topic := receivedTopic.(type) {
			case gcloudcx.UserPresenceTopic:
				log.Infof("User %s, Presence: %s", topic.User, topic.Presence)
			default:
				log.Warnf("Unknown topic: %s", topic)
			}
		case <-time.After(30 * time.Second):
			// This timer makes sure the for loop does not execute too quickly 
			//   when no topic is received for a while
			log.Debugf("Nothing in the last 30 seconds")
		}
	}
}()

Response Management (Canned Responses)

Responses canbe fetched, like any other resource, via the Fetch function:

response, err := gcloudcx.Fetch[gcloudcx.Response](context, client, responseID)

Or via the dedicated FetchByFilter function:

response, err = gcloudcx.ResponseManagementResponse{}.FetchByFilters(
	context,
	client,
	gcloudcx.ResponseManagementQueryFilter{
		Name: "name", Operator: "EQUALS", Values: []string{response.Name},
	},
)

This calls the query API of Genesys Cloud, which is more efficient than fetching all the responses and then filtering them (FetchBy method).

Responses can apply substitutions to provide the final text that can be sent to the user. Custom substitutions are provided as a map[string]string to the func and default substitutions are provided by the resource itself.

text, err := response.ApplySubstitutions(context, "text/plain", map[string]string{
	"firstName": "John",
	"lastName":  "Doe",
})

The second argument allows to specify the content type of the text to be returned, that content type has to be present in the resource, otherwise an error is returned. text/plain and text/html are supported by the Genesys Cloud API as of today.

ApplySubstitutions supports both the Genesys Cloud substitutions ({{substitutionId}}) and the Go Template system, which is far more powerful. See the Go Template documentation for more information. On top of the basic features, ApplySubstitutions also provides the functions from the Sprig library, which is a collection of useful functions for templates. See the Sprig documentation for more information.

For example the following response will return the text Hello John Doe:

response := gcloudcx.ResponseManagementResponse{ // This is a fake response, just to show the template
	Texts: []gcloudcx.ResponseManagementContent{
		{
			ContentType: "text/plain",
			Content: `Hello {{firstName}} {{lastName}}`, // Genesys Cloud substitutions
		}
	},
}
text, err := response.ApplySubstitutions(context, "text/plain", map[string]string{
	"firstName": "John",
	"lastName":  "Doe",
})
assert.Equal(t, "Hello John Doe", text)

To get the same result with Go Templates:

response := gcloudcx.ResponseManagementResponse{ // This is a fake response, just to show the template
	Texts: []gcloudcx.ResponseManagementContent{
		{
			ContentType: "text/plain",
			Content: `Hello {{.firstName}} {{.lastName}}`, // Go Template substitutions
		}
	},
}
text, err := response.ApplySubstitutions(context, "text/plain", map[string]string{
	"firstName": "John",
	"lastName":  "Doe",
})
assert.Equal(t, "Hello John Doe", text)

You can mix both approaches:

response := gcloudcx.ResponseManagementResponse{ // This is a fake response, just to show the template
	Texts: []gcloudcx.ResponseManagementContent{
		{
			ContentType: "text/plain",
			Content: `
Hello {{.firstName}} {{.lastName}}, you are on {{location}}!   # Genesys Cloud and Go substitutions
{{if eq .location "Earth"}}You are on the right place!{{end}}  # Go Template condition
And you are visiting {{ default "Atlantis" .country }}.        # Sprig function
`,
		}
	},
	Substitutions: []gcloudcx.ResponseManagementSubstitution{{
		ID: "location",
		Description: "The location of the person to greet",
		Default: "Earth",
	}},
}
text, err := response.ApplySubstitutions(context, "text/plain", map[string]string{
	"firstName": "John",
	"lastName":  "Doe",
})

Agent Chat API

Guest Chat API

OpenMessaging API

TODO

This library implements only a very small set of Genesys Cloud CX's API at the moment, but I keep adding stuff...

# Packages

No description provided by the author

# Functions

ClientFromContext retrieves a Client from a context.
Fetch fetches a resource from the Genesys Cloud API # The object must implement the Fetchable interface Resources can be fetched by their ID: user, err := Fetch[gcloudcx.User](context, client, uuid.UUID) user, err := Fetch[gcloudcx.User](context, client, gcloudcx.User{ID: uuid.UUID}) or by their URI: user, err := Fetch[gcloudcx.User](context, client, gcloudcx.User{}.GetURI(uuid.UUID)).
FetchAll fetches all objects from the Genesys Cloud API The objects must implement the Fetchable interface users, err := FetchAll[gcloudcx.User](context, client) A gcloudcx.Query can be added to narrow the request: users, err := FetchAll[gcloudcx.User](context, client, gcloudcx.Query{Language: "en-US"}).
FetchBy fetches a resource from the Genesys Cloud API by a match function The resource must implement the Fetchable interface match := func(user gcloudcx.User) bool { return user.Name == "John Doe" } user, err := FetchBy(context, client, match) A gcloudcx.Query can be added to narrow the request: user, err := FetchBy(context, client, match, gcloudcx.Query{Language: "en-US"}).
New create a resource from the Genesys Cloud API # The object must implement the Initializable interface Resources can be fetched by their ID: user, err := Fetch[gcloudcx.User](context, client, uuid.UUID) user, err := Fetch[gcloudcx.User](context, client, gcloudcx.User{ID: uuid.UUID}) or by their URI: user, err := Fetch[gcloudcx.User](context, client, gcloudcx.User{}.GetURI(uuid.UUID)).
NewAccessToken creates a new AccessToken.
NewAccessTokenWithDuration creates a new AccessToken that expires in a given duration.
NewAccessTokenWithDurationAndType creates a new AccessToken with a type and that expires in a given duration.
NewAccessTokenWithType creates a new AccessToken with a type.
NewClient creates a new Gcloud Client.
NewURI creates a new URI with eventually some parameters path should be a formatter string.
NotificationTopicFrom builds a NotificationTopic from the given topicName.
UnmarshalNotificationTopic Unmarshal JSON into a NotificationTopic The result is a NotificationTopic that can be casted into the appropriate type.
No description provided by the author
No description provided by the author

# Constants

APP is the name of the application.
ClientContextKey is the key to store Client in context.Context.

# Variables

AuthenticationRequestTimeoutError means the request timed out.
AuthenticationRequiredError means the request should authenticate first.
BadCredentialsError means the credentials are invalid.
BadRequestError means the request was badly formed.
ChatConversationStateError means the conversation does not permit the request.
ChatCreateConversationRequestRoutingTargetError means the routing target is not valid.
ChatDeploymentBadAuthError means the authentication failed.
ChatDeploymentDisabledError means the deployment is disabled.
ChatDeploymentRequireAuth means the deployment requires some authentication.
ChatInvalidQueueError means the queue is not valid.
ChatMemberStateError means the chat member does not permit the request.
CredentialsExpiredError means the credentials are expired.
GeneralError means the request failed for a general reason.
InternalServerError means the server experiences an internal error.
InvalidDateError means the given date was invalid.
InvalidDestination means the destination is invalid.
InvalidMediaContentLength means the media content length is invalid.
InvalidMessageStructure means the message structure is invalid.
InvalidValueError means the value was invalid.
MediaTypeNotAllowed means the media type is not allowed.
MessageExpired means the message has expired.
MessageNotAllowed means the message is not allowed.
MissingAnyPermissionsError means the request was missing some permissions.
MissingPermissionsError means the request was missing some permissions.
NotAuthorizedError means the request was not authorized.
NotFoundError means the wanted resource was not found.
RateLimited means the request was rate limited.
RecipientOptedOut means the recipient opted out.
RequestTimeoutError means the request timed out.
ServerError means the server failed.
ServiceUnavailableError means the service is not available.
TooManyRequestsError means the client sent too many requests and should wait before sending more.
UnknownMessage means the message is unknown.
UnsupportedMediaTypeError means the media type is not supported.
UnsupportedMessage means the message is not supported.
VERSION is the version of this application.

# Structs

AccessToken is used to consume the GCloud API It must be obtained via an AuthorizationGrant.
ACWSettings defines the After Call Work settings of a Queue.
Address describes an Address (telno, etc).
AddressableEntityRef describes an Entity that can be addressed.
AgentlessMessage sends an agentless outbound text message to a Messenger address See https://developer.genesys.cloud/api/rest/v2/conversations/#post-api-v2-conversations-messages-agentless.
AgentlessMessageResult describes the results of the send action on an AgentlessMessage.
AnswerOption describes an Answer Option.
APIError represents an error from the Gcloud API.
APIErrorDetails contains the details of an APIError.
Attachment describes an Email Attachment.
Authorization contains the login options to connect the client to GCloud.
AuthorizationCodeGrant implements Gcloud's Client Authorization Code Grants See: https://developer.mypurecloud.com/api/rest/authorization/use-authorization-code.html.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
AuthorizationScope represents a scope for a client See https://developer.genesys.cloud/authorization/platform-auth/scopes#scope-descriptions.
AuthorizationSubject describes the roles and permissions of a Subject.
Biography describes a User's biography.
Calibration describe a Calibration.
ChatMember describes a Chat Member.
Client is the primary object to use Gcloud.
ClientCredentialsGrant implements GCloud's Client Credentials Grants When the Token is updated, the new token is sent to the TokenUpdated chan along with the CustomData See: https://developer.mypurecloud.com/api/rest/authorization/use-client-credentials.html.
ClientOptions contains the options to create a new Client.
CobrowseSession describes a Cobrowse Session (like belonging to Participant).
Contact describes something that can be contacted.
Conversation contains the details of a live conversation See: https://developer.mypurecloud.com/api/rest/v2/conversations.
ConversationACDEndTopic describes a Topic about a Conversation ACD End See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--acd-end.
ConversationACDStartTopic describes a Topic about a Conversation ACD Start See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--acd-start.
ConversationACWTopic describes a Topic about a Conversation After Call Work See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--acw.
ConversationAttributesTopic describes a Topic about a Conversation Attribute Update See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--attributes.
ConversationCall describes a Call (like belonging to Participant).
ConversationCallback describes a Callback (like belonging to Participant).
ConversationChat describes a Agent-side Chat.
ConversationGuestChatMemberTopic describes a Topic about User's Presence.
ConversationChatMessageTopic describes a Topic about User's Presence.
ConversationContactTopic describes a Topic about a Conversation Contact Update See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--contact.
ConversationCustomerEndTopic describes a Topic about a Conversation Customer End See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--customer-end.
ConversationCustomerStartTopic describes a Topic about a Conversation Customer Start See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--customer-start.
ConversationEmail describes an Email (like belonging to Participant).
ConversationFlowEndTopic describes a Topic about a Conversation Flow End See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--flow-end.
ConversationFlowStartTopic describes a Topic about a Conversation Flow Start See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--flow-start.
ConversationGuestChat describes a Guest Chat.
ConversationMessage describes a Message (like belonging to Participant).
ConversationOutboundTopic describes a Topic about a Conversation Outbound Initialized See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--outbound.
ConversationRoutingData defines routing details of a Conversation.
ConversationUserEndTopic describes a Topic about a Conversation User End See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--user-end.
ConversationUserStartTopic describes a Topic about a Conversation User Start See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--user-start.
ConversationVideo describes a Video (like belonging to Participant).
ConversationVoicemailEndTopic describes a Topic about a Conversation Voicemail End See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--voicemail-end.
ConversationVoicemailStartTopic describes a Topic about a Conversation Voicemail Start See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--voicemail-start.
ConversationWrapupTopic describes a Topic about a Conversation Wrapup See: https://developer.genesys.cloud/notificationsalerts/notifications/available-topics#v2-detail-events-conversation--id--wrapup.
DataTable describes Data tables used by Architect See: https://developer.genesys.cloud/routing/architect/flows.
No description provided by the author
No description provided by the author
DialerPreview describes a Diapler Preview.
DisconnectReason describes the reason of a disconnect.
Division describes an Authorization Division.
DomainEntityListingEvaluationForm describes ...
DomainEntityRef describes a DomainEntity Reference.
DomainRole describes a Role in a Domain.
EmployerInfo describes Employer Information.
No description provided by the author
EntityRef describes an Entity that has an ID.
ErrorBody describes errors in PureCloud objects.
ErrorDetail describes the details of an error.
Evaluation describes an Evaluation (like belonging to Participant).
EvaluationForm describes an Evaluation Form.
EvaluationQuestion describe an Evaluation Question.
EvaluationQuestionGroup describes a Group of Evaluation Questions.
EvaluationScoringSet describes an Evaluation Scoring Set.
FaxStatus describes a FAX status.
No description provided by the author
GeoLocation describes a location with coordinates.
Group describe a Group of users.
Jabber describe a Jabber ID for chats.
JourneyContext describes a Journey Context.
Location describes a location in a building.
LocationAddress describes the address of a Location.
LocationDefinition describes a location (office, etc).
LocationEmergencyNumber describes a Location's Emergency Number.
LocationImage describes the image of a Location.
MediaParticipantRequest describes a request Media Participant.
MediaSetting defines a media setting in a Queue.
MediaSummary describes a Media summary.
MediaSummaryDetail describes the details about a MediaSummary.
MessageDetails describes details of a Message in a Message Conversation.
MessageMedia describes the Media of a Message.
MessageSticker describes a Message Sticker.
MessagingTemplate describes the Template to use (WhatsApp Template, for example).
MetadataTopic describes a Topic about the channel itself.
NotificationChannel defines a Notification Channel See: https://developer.mypurecloud.com/api/rest/v2/notifications/notification_service.html.
NotificationChannelTopicState describes a Topic subscription channel See https://developer.genesys.cloud/api/rest/v2/notifications/notification_service#topic-subscriptions.
NotificationTopicDefinition defines a Notification Topic that can subscribed to.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
OpenMessageText is a text message sent or received by the Open Messaging API See https://developer.genesys.cloud/commdigital/digital/openmessaging/inboundEventMessages.
No description provided by the author
OpenMessageReceipt is the message receipt returned by the Open Message Integration API.
OpenMessageStructed describes a structured message See: https://developer.genesys.cloud/api/rest/v2/conversations/#post-api-v2-conversations-messages-inbound-open.
OpenMessageTemplate describes a template for an OpenMessage.
OpenMessageText is a text message sent or received by the Open Messaging API See: https://developer.genesys.cloud/api/rest/v2/conversations/#post-api-v2-conversations-messages-inbound-open.
No description provided by the author
OpenMessageTypingEvent is a typing event sent or received by the Open Messaging API.
OpenMessagingIntegration describes an GCloud OpenMessaging Integration See https://developer.genesys.cloud/api/digital/openmessaging.
Organization describes a GCloud Organization.
OutOfOffice describes the Out Of Office status.
Participant describes a Chat Participant.
PresenceDefinition defines Presence.
ProcessAutomationCriteria is a Process Automation Criteria.
ProcessAutomationTarget is a Process Automation Target.
ProcessAutomationTrigger is a Process Automation Trigger See: https://developer.genesys.cloud/commdigital/taskmanagement/task-management-maestro See: https://developer.genesys.cloud/platform/process-automation/trigger-apis.
Queue defines a GCloud Queue.
ResourcePermissionPolicy describes...
ResponseManagementContent represent a Response Management Content See https://developer.genesys.cloud/api/rest/v2/responsemanagement.
ResponseManagementLibrary is the interface for the Response Management Library See https://developer.genesys.cloud/api/rest/v2/responsemanagement.
No description provided by the author
No description provided by the author
ResponseManagementResponse is the interface for the Response Management Response See https://developer.genesys.cloud/api/rest/v2/responsemanagement.
ResponseManagementSubstitution is the interface for the Response Management Substitution See https://developer.genesys.cloud/api/rest/v2/responsemanagement.
No description provided by the author
RoutingStatus describes a Routing Status.
RoutingTarget describes a routing target.
ScreenShare describes a Screen Share (like belonging to Participant).
Segment describes a fragment of a Conversation.
ServiceLevel defines a Service Level.
SocialExpression describes a SocialExpression (like belonging to Participant).
No description provided by the author
TemplateParameter describes a template parameter.
UpdatedAccessToken describes an updated Access Token This object is sent by the AuthorizationGrant.Authorize() when the token is updated.
User describes a GCloud User.
UserActivityTopic describes a Topic about User's Activity.
UserAuthorization desribes authorizations for a User.
UserConversationChatTopic describes a Topic about User's Presence.
UserConversationSummary describes the summary of a User's conversations.
UserImage represents a User's Avatar image.
UserPresence describes the Presence of a User.
UserPresenceTopic describes a Topic about User's Presence.
UserRoutingLanguage describe a Routing Language for a User.
UserRoutingSkill describe a Routing Skill for a User.
UserStation describes a User Station.
UserStations describes the stations of a user.
VisibilityCondition describes visibility conditions.
Voicemail describes a voicemail.
Wrapup describes a Wrapup.

# Interfaces

Addressable describes things that carry a URI (typically /api/v2/things/{{uuid}}).
Authorizer describes what a grants should do.
Disconnecter describes objects that can disconnect an Identifiable from themselves.
Fetchable describes things that can be fetched from the Genesys Cloud API.
Identifiable describes that can get their Identifier as a UUID.
Initializable describes things that can be initialized.
NotificationTopic describes a Notification Topic received on a WebSocket.
No description provided by the author
No description provided by the author
StateUpdater describes objects than can update the state of an Identifiable.
Transferrer describes objects that can transfer an Identifiable somewhere else.

# Type aliases

DataTableRow describes a row in a Data Table.
MediaSettings is a map of media names and settings.
Query represents a query string for URIs.
URI represents the Path of a URL (used in SelfURI or in requests, for example).