All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.twilio.rest.flexapi.v1.FlexFlowUpdater Maven / Gradle / Ivy

There is a newer version: 10.1.5
Show newest version
/**
 * This code was generated by
 * \ / _    _  _|   _  _
 *  | (_)\/(_)(_|\/| |(/_  v1.0.0
 *       /       /
 */

package com.twilio.rest.flexapi.v1;

import com.twilio.base.Updater;
import com.twilio.converter.Promoter;
import com.twilio.exception.ApiConnectionException;
import com.twilio.exception.ApiException;
import com.twilio.exception.RestException;
import com.twilio.http.HttpMethod;
import com.twilio.http.Request;
import com.twilio.http.Response;
import com.twilio.http.TwilioRestClient;
import com.twilio.rest.Domains;

import java.net.URI;

public class FlexFlowUpdater extends Updater {
    private final String pathSid;
    private String friendlyName;
    private String chatServiceSid;
    private FlexFlow.ChannelType channelType;
    private String contactIdentity;
    private Boolean enabled;
    private FlexFlow.IntegrationType integrationType;
    private String integrationFlowSid;
    private URI integrationUrl;
    private String integrationWorkspaceSid;
    private String integrationWorkflowSid;
    private String integrationChannel;
    private Integer integrationTimeout;
    private Integer integrationPriority;
    private Boolean integrationCreationOnMessage;
    private Boolean longLived;
    private Boolean janitorEnabled;
    private Integer integrationRetryCount;

    /**
     * Construct a new FlexFlowUpdater.
     *
     * @param pathSid The SID that identifies the resource to update
     */
    public FlexFlowUpdater(final String pathSid) {
        this.pathSid = pathSid;
    }

    /**
     * A descriptive string that you create to describe the FlexFlow resource..
     *
     * @param friendlyName A string to describe the resource
     * @return this
     */
    public FlexFlowUpdater setFriendlyName(final String friendlyName) {
        this.friendlyName = friendlyName;
        return this;
    }

    /**
     * The SID of the chat service..
     *
     * @param chatServiceSid The SID of the chat service
     * @return this
     */
    public FlexFlowUpdater setChatServiceSid(final String chatServiceSid) {
        this.chatServiceSid = chatServiceSid;
        return this;
    }

    /**
     * The channel type. Can be: `web`, `facebook`, `sms`, `whatsapp`, `line` or
     * `custom`..
     *
     * @param channelType The channel type
     * @return this
     */
    public FlexFlowUpdater setChannelType(final FlexFlow.ChannelType channelType) {
        this.channelType = channelType;
        return this;
    }

    /**
     * The channel contact's Identity..
     *
     * @param contactIdentity The channel contact's Identity
     * @return this
     */
    public FlexFlowUpdater setContactIdentity(final String contactIdentity) {
        this.contactIdentity = contactIdentity;
        return this;
    }

    /**
     * Whether the FlexFlow is enabled..
     *
     * @param enabled Whether the FlexFlow is enabled
     * @return this
     */
    public FlexFlowUpdater setEnabled(final Boolean enabled) {
        this.enabled = enabled;
        return this;
    }

    /**
     * The integration type. Can be: `studio`, `external`, or `task`..
     *
     * @param integrationType The integration type
     * @return this
     */
    public FlexFlowUpdater setIntegrationType(final FlexFlow.IntegrationType integrationType) {
        this.integrationType = integrationType;
        return this;
    }

    /**
     * The SID of the Flow when `integration_type` is `studio`..
     *
     * @param integrationFlowSid The SID of the Flow
     * @return this
     */
    public FlexFlowUpdater setIntegrationFlowSid(final String integrationFlowSid) {
        this.integrationFlowSid = integrationFlowSid;
        return this;
    }

    /**
     * The External Webhook URL when `integration_type` is `external`..
     *
     * @param integrationUrl The External Webhook URL
     * @return this
     */
    public FlexFlowUpdater setIntegrationUrl(final URI integrationUrl) {
        this.integrationUrl = integrationUrl;
        return this;
    }

    /**
     * The External Webhook URL when `integration_type` is `external`..
     *
     * @param integrationUrl The External Webhook URL
     * @return this
     */
    public FlexFlowUpdater setIntegrationUrl(final String integrationUrl) {
        return setIntegrationUrl(Promoter.uriFromString(integrationUrl));
    }

    /**
     * The Workspace SID for a new task when `integration_type` is `task`..
     *
     * @param integrationWorkspaceSid The Workspace SID for a new task
     * @return this
     */
    public FlexFlowUpdater setIntegrationWorkspaceSid(final String integrationWorkspaceSid) {
        this.integrationWorkspaceSid = integrationWorkspaceSid;
        return this;
    }

    /**
     * The Workflow SID for a new task when `integration_type` is `task`..
     *
     * @param integrationWorkflowSid The Workflow SID for a new task
     * @return this
     */
    public FlexFlowUpdater setIntegrationWorkflowSid(final String integrationWorkflowSid) {
        this.integrationWorkflowSid = integrationWorkflowSid;
        return this;
    }

    /**
     * The task channel for a new task when `integration_type` is `task`. The
     * default is `default`..
     *
     * @param integrationChannel task channel for a new task
     * @return this
     */
    public FlexFlowUpdater setIntegrationChannel(final String integrationChannel) {
        this.integrationChannel = integrationChannel;
        return this;
    }

    /**
     * The task timeout in seconds for a new task when `integration_type` is `task`.
     * The default is `86,400` seconds (24 hours)..
     *
     * @param integrationTimeout The task timeout in seconds for a new task
     * @return this
     */
    public FlexFlowUpdater setIntegrationTimeout(final Integer integrationTimeout) {
        this.integrationTimeout = integrationTimeout;
        return this;
    }

    /**
     * The task priority of a new task when `integration_type` is `task`. The
     * default priority is `0`..
     *
     * @param integrationPriority The task priority of a new task
     * @return this
     */
    public FlexFlowUpdater setIntegrationPriority(final Integer integrationPriority) {
        this.integrationPriority = integrationPriority;
        return this;
    }

    /**
     * Whether to create a task when the first message arrives when
     * `integration_type` is `task`. If `false`, the task is created with the
     * channel. **Note** that does not apply when channel type is `web`. Setting the
     * value to `true` for channel type `web` will result in misconfigured Flex Flow
     * and no tasks will be created..
     *
     * @param integrationCreationOnMessage Whether to create a task when the first
     *                                     message arrives
     * @return this
     */
    public FlexFlowUpdater setIntegrationCreationOnMessage(final Boolean integrationCreationOnMessage) {
        this.integrationCreationOnMessage = integrationCreationOnMessage;
        return this;
    }

    /**
     * When enabled, Flex will keep the chat channel active so that it may be used
     * for subsequent interactions with a contact identity. Defaults to `false`..
     *
     * @param longLived Reuse this chat channel for future interactions with a
     *                  contact
     * @return this
     */
    public FlexFlowUpdater setLongLived(final Boolean longLived) {
        this.longLived = longLived;
        return this;
    }

    /**
     * When enabled, the Messaging Channel Janitor will remove active Proxy sessions
     * if the associated Task is deleted outside of the Flex UI. Defaults to
     * `false`..
     *
     * @param janitorEnabled Remove active Proxy sessions if the corresponding Task
     *                       is deleted.
     * @return this
     */
    public FlexFlowUpdater setJanitorEnabled(final Boolean janitorEnabled) {
        this.janitorEnabled = janitorEnabled;
        return this;
    }

    /**
     * The number of times to retry the webhook if the first attempt fails. Can be
     * an integer between 0 and 3, inclusive, and the default is 0..
     *
     * @param integrationRetryCount The number of times to retry the webhook if the
     *                              first attempt fails
     * @return this
     */
    public FlexFlowUpdater setIntegrationRetryCount(final Integer integrationRetryCount) {
        this.integrationRetryCount = integrationRetryCount;
        return this;
    }

    /**
     * Make the request to the Twilio API to perform the update.
     *
     * @param client TwilioRestClient with which to make the request
     * @return Updated FlexFlow
     */
    @Override
    @SuppressWarnings("checkstyle:linelength")
    public FlexFlow update(final TwilioRestClient client) {
        Request request = new Request(
            HttpMethod.POST,
            Domains.FLEXAPI.toString(),
            "/v1/FlexFlows/" + this.pathSid + ""
        );

        addPostParams(request);
        Response response = client.request(request);

        if (response == null) {
            throw new ApiConnectionException("FlexFlow update failed: Unable to connect to server");
        } else if (!TwilioRestClient.SUCCESS.test(response.getStatusCode())) {
            RestException restException = RestException.fromJson(response.getStream(), client.getObjectMapper());
            if (restException == null) {
                throw new ApiException("Server Error, no content");
            }
            throw new ApiException(restException);
        }

        return FlexFlow.fromJson(response.getStream(), client.getObjectMapper());
    }

    /**
     * Add the requested post parameters to the Request.
     *
     * @param request Request to add post params to
     */
    private void addPostParams(final Request request) {
        if (friendlyName != null) {
            request.addPostParam("FriendlyName", friendlyName);
        }

        if (chatServiceSid != null) {
            request.addPostParam("ChatServiceSid", chatServiceSid);
        }

        if (channelType != null) {
            request.addPostParam("ChannelType", channelType.toString());
        }

        if (contactIdentity != null) {
            request.addPostParam("ContactIdentity", contactIdentity);
        }

        if (enabled != null) {
            request.addPostParam("Enabled", enabled.toString());
        }

        if (integrationType != null) {
            request.addPostParam("IntegrationType", integrationType.toString());
        }

        if (integrationFlowSid != null) {
            request.addPostParam("Integration.FlowSid", integrationFlowSid);
        }

        if (integrationUrl != null) {
            request.addPostParam("Integration.Url", integrationUrl.toString());
        }

        if (integrationWorkspaceSid != null) {
            request.addPostParam("Integration.WorkspaceSid", integrationWorkspaceSid);
        }

        if (integrationWorkflowSid != null) {
            request.addPostParam("Integration.WorkflowSid", integrationWorkflowSid);
        }

        if (integrationChannel != null) {
            request.addPostParam("Integration.Channel", integrationChannel);
        }

        if (integrationTimeout != null) {
            request.addPostParam("Integration.Timeout", integrationTimeout.toString());
        }

        if (integrationPriority != null) {
            request.addPostParam("Integration.Priority", integrationPriority.toString());
        }

        if (integrationCreationOnMessage != null) {
            request.addPostParam("Integration.CreationOnMessage", integrationCreationOnMessage.toString());
        }

        if (longLived != null) {
            request.addPostParam("LongLived", longLived.toString());
        }

        if (janitorEnabled != null) {
            request.addPostParam("JanitorEnabled", janitorEnabled.toString());
        }

        if (integrationRetryCount != null) {
            request.addPostParam("Integration.RetryCount", integrationRetryCount.toString());
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy