diff --git a/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/CustomerSupportPlatformIdentifier.java b/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/CustomerSupportPlatformIdentifier.java new file mode 100644 index 0000000..90e30e4 --- /dev/null +++ b/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/CustomerSupportPlatformIdentifier.java @@ -0,0 +1,87 @@ +package ai.gradientlabs.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Links a customer to their record in a third-party customer support platform. + *
+ * {@code type} is only meaningful (and only validated) for platforms that have more than one
+ * kind of identifier: intercom, zendesk, and salesforce. Omit it entirely for freshchat and
+ * freshdesk, which don't have subtypes.
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CustomerSupportPlatformIdentifier {
+
+ @JsonProperty("support_platform")
+ private SupportPlatform supportPlatform;
+
+ @JsonProperty("type")
+ private CustomerSupportPlatformIdentifierType type;
+
+ @JsonProperty("value")
+ private String value;
+
+ /**
+ * Default constructor for Jackson.
+ */
+ public CustomerSupportPlatformIdentifier() {
+ }
+
+ /**
+ * Creates a new identifier for a platform that doesn't have subtypes (e.g. freshchat, freshdesk).
+ *
+ * @param supportPlatform the support platform
+ * @param value the external ID in that platform
+ */
+ public CustomerSupportPlatformIdentifier(SupportPlatform supportPlatform, String value) {
+ this.supportPlatform = supportPlatform;
+ this.value = value;
+ }
+
+ /**
+ * Creates a new identifier with a subtype (required for intercom, zendesk, and salesforce).
+ *
+ * @param supportPlatform the support platform
+ * @param type the kind of identifier
+ * @param value the external ID in that platform
+ */
+ public CustomerSupportPlatformIdentifier(SupportPlatform supportPlatform, CustomerSupportPlatformIdentifierType type, String value) {
+ this.supportPlatform = supportPlatform;
+ this.type = type;
+ this.value = value;
+ }
+
+ public SupportPlatform getSupportPlatform() {
+ return supportPlatform;
+ }
+
+ public void setSupportPlatform(SupportPlatform supportPlatform) {
+ this.supportPlatform = supportPlatform;
+ }
+
+ public CustomerSupportPlatformIdentifierType getType() {
+ return type;
+ }
+
+ public void setType(CustomerSupportPlatformIdentifierType type) {
+ this.type = type;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return "CustomerSupportPlatformIdentifier{" +
+ "supportPlatform=" + supportPlatform +
+ ", type=" + type +
+ ", value='" + value + '\'' +
+ '}';
+ }
+}
diff --git a/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/CustomerSupportPlatformIdentifierType.java b/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/CustomerSupportPlatformIdentifierType.java
new file mode 100644
index 0000000..436fa3d
--- /dev/null
+++ b/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/CustomerSupportPlatformIdentifierType.java
@@ -0,0 +1,55 @@
+package ai.gradientlabs.client.model;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * The kind of identifier a {@link CustomerSupportPlatformIdentifier} represents, for
+ * platforms that have more than one kind of customer identifier.
+ */
+public enum CustomerSupportPlatformIdentifierType {
+ /**
+ * An Intercom lead ID.
+ */
+ INTERCOM_LEAD("intercom_lead"),
+
+ /**
+ * An Intercom user ID.
+ */
+ INTERCOM_USER("intercom_user"),
+
+ /**
+ * A Zendesk end-user ID from a messaging conversation.
+ */
+ ZENDESK_CONVERSATION_USER("zendesk_conversation_user"),
+
+ /**
+ * A Zendesk support (ticketing) user ID.
+ */
+ ZENDESK_SUPPORT_USER("zendesk_support_user"),
+
+ /**
+ * A Salesforce Contact ID.
+ */
+ SALESFORCE_CONTACT_ID("salesforce_contact_id"),
+
+ /**
+ * A Salesforce Account ID.
+ */
+ SALESFORCE_ACCOUNT_ID("salesforce_account_id");
+
+ private final String value;
+
+ CustomerSupportPlatformIdentifierType(String value) {
+ this.value = value;
+ }
+
+ @JsonValue
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public String toString() {
+ return value;
+ }
+}
diff --git a/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/SupportPlatform.java b/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/SupportPlatform.java
new file mode 100644
index 0000000..a704c54
--- /dev/null
+++ b/gradient-labs-client/src/main/java/ai/gradientlabs/client/model/SupportPlatform.java
@@ -0,0 +1,49 @@
+package ai.gradientlabs.client.model;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * A third-party customer support platform.
+ */
+public enum SupportPlatform {
+ /**
+ * Intercom.
+ */
+ INTERCOM("intercom"),
+
+ /**
+ * Zendesk.
+ */
+ ZENDESK("zendesk"),
+
+ /**
+ * Salesforce.
+ */
+ SALESFORCE("salesforce"),
+
+ /**
+ * Freshchat.
+ */
+ FRESHCHAT("freshchat"),
+
+ /**
+ * Freshdesk.
+ */
+ FRESHDESK("freshdesk");
+
+ private final String value;
+
+ SupportPlatform(String value) {
+ this.value = value;
+ }
+
+ @JsonValue
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public String toString() {
+ return value;
+ }
+}
diff --git a/gradient-labs-client/src/main/java/ai/gradientlabs/client/request/StartConversationRequest.java b/gradient-labs-client/src/main/java/ai/gradientlabs/client/request/StartConversationRequest.java
index ebe5e1d..60f6351 100644
--- a/gradient-labs-client/src/main/java/ai/gradientlabs/client/request/StartConversationRequest.java
+++ b/gradient-labs-client/src/main/java/ai/gradientlabs/client/request/StartConversationRequest.java
@@ -1,12 +1,15 @@
package ai.gradientlabs.client.request;
import ai.gradientlabs.client.model.Channel;
+import ai.gradientlabs.client.model.CustomerSupportPlatformIdentifier;
import ai.gradientlabs.client.model.ParticipantType;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.Instant;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -45,6 +48,9 @@ public class StartConversationRequest {
@JsonProperty("traffic_group_id")
private final String trafficGroupId;
+ @JsonProperty("customer_support_platform_identifiers")
+ private final List
+ * Links the customer being created to their record(s) in platforms such as Intercom
+ * or Zendesk, alongside {@code customerId}. Each identifier's {@code type} is only
+ * required (and only validated) for intercom, zendesk, and salesforce.
+ *
+ * @param customerSupportPlatformIdentifiers the customer support platform identifiers
+ * @return this builder
+ */
+ public Builder customerSupportPlatformIdentifiers(List