##
#    This code was generated by
#    ___ _ _ _ _ _    _ ____    ____ ____ _    ____ ____ _  _ ____ ____ ____ ___ __   __
#     |  | | | | |    | |  | __ |  | |__| | __ | __ |___ |\ | |___ |__/ |__|  | |  | |__/
#     |  |_|_| | |___ | |__|    |__| |  | |    |__] |___ | \| |___ |  \ |  |  | |__| |  \
#
#    Twilio - Messaging
#    This is the public Twilio REST API.
#
#    NOTE: This class is auto generated by OpenAPI Generator.
#    https://openapi-generator.tech
#    Do not edit the class manually.
#


module Twilio
    module REST
        class Messaging < MessagingBase
            class V1 < Version
                class ServiceContext < InstanceContext

                     class UsAppToPersonList < ListResource
                
                    ##
                    # Initialize the UsAppToPersonList
                    # @param [Version] version Version that contains the resource
                    # @return [UsAppToPersonList] UsAppToPersonList
                    def initialize(version, messaging_service_sid: nil)
                        super(version)
                        # Path Solution
                        @solution = { messaging_service_sid: messaging_service_sid }
                        @uri = "/Services/#{@solution[:messaging_service_sid]}/Compliance/Usa2p"
                        
                    end
                    ##
                    # Create the UsAppToPersonInstance
                    # @param [String] brand_registration_sid A2P Brand Registration SID
                    # @param [String] description A short description of what this SMS campaign does. Min length: 40 characters. Max length: 4096 characters.
                    # @param [String] message_flow Required for all Campaigns. Details around how a consumer opts-in to their campaign, therefore giving consent to receive their messages. If multiple opt-in methods can be used for the same campaign, they must all be listed. 40 character minimum. 2048 character maximum.
                    # @param [Array[String]] message_samples An array of sample message strings, min two and max five. Min length for each sample: 20 chars. Max length for each sample: 1024 chars.
                    # @param [String] us_app_to_person_usecase A2P Campaign Use Case. Examples: [ 2FA, EMERGENCY, MARKETING..]
                    # @param [Boolean] has_embedded_links Indicates that this SMS campaign will send messages that contain links.
                    # @param [Boolean] has_embedded_phone Indicates that this SMS campaign will send messages that contain phone numbers.
                    # @param [String] opt_in_message If end users can text in a keyword to start receiving messages from this campaign, the auto-reply messages sent to the end users must be provided. The opt-in response should include the Brand name, confirmation of opt-in enrollment to a recurring message campaign, how to get help, and clear description of how to opt-out. This field is required if end users can text in a keyword to start receiving messages from this campaign. 20 character minimum. 320 character maximum.
                    # @param [String] opt_out_message Upon receiving the opt-out keywords from the end users, Twilio customers are expected to send back an auto-generated response, which must provide acknowledgment of the opt-out request and confirmation that no further messages will be sent. It is also recommended that these opt-out messages include the brand name. This field is required if managing opt out keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). 20 character minimum. 320 character maximum.
                    # @param [String] help_message When customers receive the help keywords from their end users, Twilio customers are expected to send back an auto-generated response; this may include the brand name and additional support contact information. This field is required if managing help keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). 20 character minimum. 320 character maximum.
                    # @param [Array[String]] opt_in_keywords If end users can text in a keyword to start receiving messages from this campaign, those keywords must be provided. This field is required if end users can text in a keyword to start receiving messages from this campaign. Values must be alphanumeric. 255 character maximum.
                    # @param [Array[String]] opt_out_keywords End users should be able to text in a keyword to stop receiving messages from this campaign. Those keywords must be provided. This field is required if managing opt out keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). Values must be alphanumeric. 255 character maximum.
                    # @param [Array[String]] help_keywords End users should be able to text in a keyword to receive help. Those keywords must be provided as part of the campaign registration request. This field is required if managing help keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). Values must be alphanumeric. 255 character maximum.
                    # @param [Boolean] subscriber_opt_in A boolean that specifies whether campaign has Subscriber Optin or not.
                    # @param [Boolean] age_gated A boolean that specifies whether campaign is age gated or not.
                    # @param [Boolean] direct_lending A boolean that specifies whether campaign allows direct lending or not.
                    # @return [UsAppToPersonInstance] Created UsAppToPersonInstance
                    def create(
                        brand_registration_sid: nil, 
                        description: nil, 
                        message_flow: nil, 
                        message_samples: nil, 
                        us_app_to_person_usecase: nil, 
                        has_embedded_links: nil, 
                        has_embedded_phone: nil, 
                        opt_in_message: :unset, 
                        opt_out_message: :unset, 
                        help_message: :unset, 
                        opt_in_keywords: :unset, 
                        opt_out_keywords: :unset, 
                        help_keywords: :unset, 
                        subscriber_opt_in: :unset, 
                        age_gated: :unset, 
                        direct_lending: :unset
                    )

                        data = Twilio::Values.of({
                            'BrandRegistrationSid' => brand_registration_sid,
                            'Description' => description,
                            'MessageFlow' => message_flow,
                            'MessageSamples' => Twilio.serialize_list(message_samples) { |e| e },
                            'UsAppToPersonUsecase' => us_app_to_person_usecase,
                            'HasEmbeddedLinks' => has_embedded_links,
                            'HasEmbeddedPhone' => has_embedded_phone,
                            'OptInMessage' => opt_in_message,
                            'OptOutMessage' => opt_out_message,
                            'HelpMessage' => help_message,
                            'OptInKeywords' => Twilio.serialize_list(opt_in_keywords) { |e| e },
                            'OptOutKeywords' => Twilio.serialize_list(opt_out_keywords) { |e| e },
                            'HelpKeywords' => Twilio.serialize_list(help_keywords) { |e| e },
                            'SubscriberOptIn' => subscriber_opt_in,
                            'AgeGated' => age_gated,
                            'DirectLending' => direct_lending,
                        })

                        headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
                        
                        
                        
                        
                        
                        payload = @version.create('POST', @uri, data: data, headers: headers)
                        UsAppToPersonInstance.new(
                            @version,
                            payload,
                            messaging_service_sid: @solution[:messaging_service_sid],
                        )
                    end

                
                    ##
                    # Lists UsAppToPersonInstance records from the API as a list.
                    # Unlike stream(), this operation is eager and will load `limit` records into
                    # memory before returning.
                    # @param [Integer] limit Upper limit for the number of records to return. stream()
                    #    guarantees to never return more than limit.  Default is no limit
                    # @param [Integer] page_size Number of records to fetch per request, when
                    #    not set will use the default value of 50 records.  If no page_size is defined
                    #    but a limit is defined, stream() will attempt to read the limit with the most
                    #    efficient page size, i.e. min(limit, 1000)
                    # @return [Array] Array of up to limit results
                    def list(limit: nil, page_size: nil)
                        self.stream(
                            limit: limit,
                            page_size: page_size
                        ).entries
                    end

                    ##
                    # Streams Instance records from the API as an Enumerable.
                    # This operation lazily loads records as efficiently as possible until the limit
                    # is reached.
                    # @param [Integer] limit Upper limit for the number of records to return. stream()
                    #    guarantees to never return more than limit.  Default is no limit
                    # @param [Integer] page_size Number of records to fetch per request, when
                    #    not set will use the default value of 50 records.  If no page_size is defined
                    #    but a limit is defined, stream() will attempt to read the limit with the most
                    #    efficient page size, i.e. min(limit, 1000)
                    # @return [Enumerable] Enumerable that will yield up to limit results
                    def stream(limit: nil, page_size: nil)
                        limits = @version.read_limits(limit, page_size)

                        page = self.page(
                            page_size: limits[:page_size], )

                        @version.stream(page, limit: limits[:limit], page_limit: limits[:page_limit])
                    end

                    ##
                    # When passed a block, yields UsAppToPersonInstance records from the API.
                    # This operation lazily loads records as efficiently as possible until the limit
                    # is reached.
                    def each
                        limits = @version.read_limits

                        page = self.page(page_size: limits[:page_size], )

                        @version.stream(page,
                            limit: limits[:limit],
                            page_limit: limits[:page_limit]).each {|x| yield x}
                    end

                    ##
                    # Retrieve a single page of UsAppToPersonInstance records from the API.
                    # Request is executed immediately.
                    # @param [String] page_token PageToken provided by the API
                    # @param [Integer] page_number Page Number, this value is simply for client state
                    # @param [Integer] page_size Number of records to return, defaults to 50
                    # @return [Page] Page of UsAppToPersonInstance
                    def page(page_token: :unset, page_number: :unset, page_size: :unset)
                        params = Twilio::Values.of({
                            'PageToken' => page_token,
                            'Page' => page_number,
                            'PageSize' => page_size,
                        })
                        headers = Twilio::Values.of({})
                        
                        

                        response = @version.page('GET', @uri, params: params, headers: headers)

                        UsAppToPersonPage.new(@version, response, @solution)
                    end

                    ##
                    # Retrieve a single page of UsAppToPersonInstance records from the API.
                    # Request is executed immediately.
                    # @param [String] target_url API-generated URL for the requested results page
                    # @return [Page] Page of UsAppToPersonInstance
                    def get_page(target_url)
                        response = @version.domain.request(
                            'GET',
                            target_url
                        )
                    UsAppToPersonPage.new(@version, response, @solution)
                    end
                    


                    # Provide a user friendly representation
                    def to_s
                        '#<Twilio.Messaging.V1.UsAppToPersonList>'
                    end
                end


                class UsAppToPersonContext < InstanceContext
                    ##
                    # Initialize the UsAppToPersonContext
                    # @param [Version] version Version that contains the resource
                    # @param [String] messaging_service_sid The SID of the [Messaging Service](https://www.twilio.com/docs/messaging/services/api) to update the resource from.
                    # @param [String] sid The SID of the US A2P Compliance resource to update `QE2c6890da8086d771620e9b13fadeba0b`.
                    # @return [UsAppToPersonContext] UsAppToPersonContext
                    def initialize(version, messaging_service_sid, sid)
                        super(version)

                        # Path Solution
                        @solution = { messaging_service_sid: messaging_service_sid, sid: sid,  }
                        @uri = "/Services/#{@solution[:messaging_service_sid]}/Compliance/Usa2p/#{@solution[:sid]}"

                        
                    end
                    ##
                    # Delete the UsAppToPersonInstance
                    # @return [Boolean] True if delete succeeds, false otherwise
                    def delete

                        headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
                        
                        
                        
                        @version.delete('DELETE', @uri, headers: headers)
                    end

                    ##
                    # Fetch the UsAppToPersonInstance
                    # @return [UsAppToPersonInstance] Fetched UsAppToPersonInstance
                    def fetch

                        headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
                        
                        
                        
                        
                        
                        payload = @version.fetch('GET', @uri, headers: headers)
                        UsAppToPersonInstance.new(
                            @version,
                            payload,
                            messaging_service_sid: @solution[:messaging_service_sid],
                            sid: @solution[:sid],
                        )
                    end

                    ##
                    # Update the UsAppToPersonInstance
                    # @param [Boolean] has_embedded_links Indicates that this SMS campaign will send messages that contain links.
                    # @param [Boolean] has_embedded_phone Indicates that this SMS campaign will send messages that contain phone numbers.
                    # @param [Array[String]] message_samples An array of sample message strings, min two and max five. Min length for each sample: 20 chars. Max length for each sample: 1024 chars.
                    # @param [String] message_flow Required for all Campaigns. Details around how a consumer opts-in to their campaign, therefore giving consent to receive their messages. If multiple opt-in methods can be used for the same campaign, they must all be listed. 40 character minimum. 2048 character maximum.
                    # @param [String] description A short description of what this SMS campaign does. Min length: 40 characters. Max length: 4096 characters.
                    # @param [Boolean] age_gated A boolean that specifies whether campaign requires age gate for federally legal content.
                    # @param [Boolean] direct_lending A boolean that specifies whether campaign allows direct lending or not.
                    # @return [UsAppToPersonInstance] Updated UsAppToPersonInstance
                    def update(
                        has_embedded_links: nil, 
                        has_embedded_phone: nil, 
                        message_samples: nil, 
                        message_flow: nil, 
                        description: nil, 
                        age_gated: nil, 
                        direct_lending: nil
                    )

                        data = Twilio::Values.of({
                            'HasEmbeddedLinks' => has_embedded_links,
                            'HasEmbeddedPhone' => has_embedded_phone,
                            'MessageSamples' => Twilio.serialize_list(message_samples) { |e| e },
                            'MessageFlow' => message_flow,
                            'Description' => description,
                            'AgeGated' => age_gated,
                            'DirectLending' => direct_lending,
                        })

                        headers = Twilio::Values.of({'Content-Type' => 'application/x-www-form-urlencoded', })
                        
                        
                        
                        
                        
                        payload = @version.update('POST', @uri, data: data, headers: headers)
                        UsAppToPersonInstance.new(
                            @version,
                            payload,
                            messaging_service_sid: @solution[:messaging_service_sid],
                            sid: @solution[:sid],
                        )
                    end


                    ##
                    # Provide a user friendly representation
                    def to_s
                        context = @solution.map{|k, v| "#{k}: #{v}"}.join(',')
                        "#<Twilio.Messaging.V1.UsAppToPersonContext #{context}>"
                    end

                    ##
                    # Provide a detailed, user friendly representation
                    def inspect
                        context = @solution.map{|k, v| "#{k}: #{v}"}.join(',')
                        "#<Twilio.Messaging.V1.UsAppToPersonContext #{context}>"
                    end
                end

                class UsAppToPersonPage < Page
                    ##
                    # Initialize the UsAppToPersonPage
                    # @param [Version] version Version that contains the resource
                    # @param [Response] response Response from the API
                    # @param [Hash] solution Path solution for the resource
                    # @return [UsAppToPersonPage] UsAppToPersonPage
                    def initialize(version, response, solution)
                        super(version, response)

                        # Path Solution
                        @solution = solution
                    end

                    ##
                    # Build an instance of UsAppToPersonInstance
                    # @param [Hash] payload Payload response from the API
                    # @return [UsAppToPersonInstance] UsAppToPersonInstance
                    def get_instance(payload)
                        UsAppToPersonInstance.new(@version, payload, messaging_service_sid: @solution[:messaging_service_sid])
                    end

                    ##
                    # Provide a user friendly representation
                    def to_s
                        '<Twilio.Messaging.V1.UsAppToPersonPage>'
                    end
                end
                class UsAppToPersonInstance < InstanceResource
                    ##
                    # Initialize the UsAppToPersonInstance
                    # @param [Version] version Version that contains the resource
                    # @param [Hash] payload payload that contains response from Twilio
                    # @param [String] account_sid The SID of the
                    #   {Account}[https://www.twilio.com/docs/iam/api/account] that created this UsAppToPerson
                    #   resource.
                    # @param [String] sid The SID of the Call resource to fetch.
                    # @return [UsAppToPersonInstance] UsAppToPersonInstance
                    def initialize(version, payload , messaging_service_sid: nil, sid: nil)
                        super(version)
                        
                        # Marshaled Properties
                        @properties = { 
                            'sid' => payload['sid'],
                            'account_sid' => payload['account_sid'],
                            'brand_registration_sid' => payload['brand_registration_sid'],
                            'messaging_service_sid' => payload['messaging_service_sid'],
                            'description' => payload['description'],
                            'message_samples' => payload['message_samples'],
                            'us_app_to_person_usecase' => payload['us_app_to_person_usecase'],
                            'has_embedded_links' => payload['has_embedded_links'],
                            'has_embedded_phone' => payload['has_embedded_phone'],
                            'subscriber_opt_in' => payload['subscriber_opt_in'],
                            'age_gated' => payload['age_gated'],
                            'direct_lending' => payload['direct_lending'],
                            'campaign_status' => payload['campaign_status'],
                            'campaign_id' => payload['campaign_id'],
                            'is_externally_registered' => payload['is_externally_registered'],
                            'rate_limits' => payload['rate_limits'],
                            'message_flow' => payload['message_flow'],
                            'opt_in_message' => payload['opt_in_message'],
                            'opt_out_message' => payload['opt_out_message'],
                            'help_message' => payload['help_message'],
                            'opt_in_keywords' => payload['opt_in_keywords'],
                            'opt_out_keywords' => payload['opt_out_keywords'],
                            'help_keywords' => payload['help_keywords'],
                            'date_created' => Twilio.deserialize_iso8601_datetime(payload['date_created']),
                            'date_updated' => Twilio.deserialize_iso8601_datetime(payload['date_updated']),
                            'url' => payload['url'],
                            'mock' => payload['mock'],
                            'errors' => payload['errors'],
                        }

                        # Context
                        @instance_context = nil
                        @params = { 'messaging_service_sid' => messaging_service_sid  || @properties['messaging_service_sid']  ,'sid' => sid  || @properties['sid']  , }
                    end

                    ##
                    # Generate an instance context for the instance, the context is capable of
                    # performing various actions.  All instance actions are proxied to the context
                    # @return [UsAppToPersonContext] CallContext for this CallInstance
                    def context
                        unless @instance_context
                            @instance_context = UsAppToPersonContext.new(@version , @params['messaging_service_sid'], @params['sid'])
                        end
                        @instance_context
                    end
                    
                    ##
                    # @return [String] The unique string that identifies a US A2P Compliance resource `QE2c6890da8086d771620e9b13fadeba0b`.
                    def sid
                        @properties['sid']
                    end
                    
                    ##
                    # @return [String] The SID of the [Account](https://www.twilio.com/docs/iam/api/account) that the Campaign belongs to.
                    def account_sid
                        @properties['account_sid']
                    end
                    
                    ##
                    # @return [String] The unique string to identify the A2P brand.
                    def brand_registration_sid
                        @properties['brand_registration_sid']
                    end
                    
                    ##
                    # @return [String] The SID of the [Messaging Service](https://www.twilio.com/docs/messaging/api/service-resource) that the resource is associated with.
                    def messaging_service_sid
                        @properties['messaging_service_sid']
                    end
                    
                    ##
                    # @return [String] A short description of what this SMS campaign does. Min length: 40 characters. Max length: 4096 characters.
                    def description
                        @properties['description']
                    end
                    
                    ##
                    # @return [Array<String>] An array of sample message strings, min two and max five. Min length for each sample: 20 chars. Max length for each sample: 1024 chars.
                    def message_samples
                        @properties['message_samples']
                    end
                    
                    ##
                    # @return [String] A2P Campaign Use Case. Examples: [ 2FA, EMERGENCY, MARKETING, SOLE_PROPRIETOR...]. SOLE_PROPRIETOR campaign use cases can only be created by SOLE_PROPRIETOR Brands, and there can only be one SOLE_PROPRIETOR campaign created per SOLE_PROPRIETOR Brand.
                    def us_app_to_person_usecase
                        @properties['us_app_to_person_usecase']
                    end
                    
                    ##
                    # @return [Boolean] Indicate that this SMS campaign will send messages that contain links.
                    def has_embedded_links
                        @properties['has_embedded_links']
                    end
                    
                    ##
                    # @return [Boolean] Indicates that this SMS campaign will send messages that contain phone numbers.
                    def has_embedded_phone
                        @properties['has_embedded_phone']
                    end
                    
                    ##
                    # @return [Boolean] A boolean that specifies whether campaign has Subscriber Optin or not.
                    def subscriber_opt_in
                        @properties['subscriber_opt_in']
                    end
                    
                    ##
                    # @return [Boolean] A boolean that specifies whether campaign is age gated or not.
                    def age_gated
                        @properties['age_gated']
                    end
                    
                    ##
                    # @return [Boolean] A boolean that specifies whether campaign allows direct lending or not.
                    def direct_lending
                        @properties['direct_lending']
                    end
                    
                    ##
                    # @return [String] Campaign status. Examples: IN_PROGRESS, VERIFIED, FAILED.
                    def campaign_status
                        @properties['campaign_status']
                    end
                    
                    ##
                    # @return [String] The Campaign Registry (TCR) Campaign ID.
                    def campaign_id
                        @properties['campaign_id']
                    end
                    
                    ##
                    # @return [Boolean] Indicates whether the campaign was registered externally or not.
                    def is_externally_registered
                        @properties['is_externally_registered']
                    end
                    
                    ##
                    # @return [Hash] Rate limit and/or classification set by each carrier, Ex. AT&T or T-Mobile.
                    def rate_limits
                        @properties['rate_limits']
                    end
                    
                    ##
                    # @return [String] Details around how a consumer opts-in to their campaign, therefore giving consent to receive their messages. If multiple opt-in methods can be used for the same campaign, they must all be listed. 40 character minimum. 2048 character maximum.
                    def message_flow
                        @properties['message_flow']
                    end
                    
                    ##
                    # @return [String] If end users can text in a keyword to start receiving messages from this campaign, the auto-reply messages sent to the end users must be provided. The opt-in response should include the Brand name, confirmation of opt-in enrollment to a recurring message campaign, how to get help, and clear description of how to opt-out. This field is required if end users can text in a keyword to start receiving messages from this campaign. 20 character minimum. 320 character maximum.
                    def opt_in_message
                        @properties['opt_in_message']
                    end
                    
                    ##
                    # @return [String] Upon receiving the opt-out keywords from the end users, Twilio customers are expected to send back an auto-generated response, which must provide acknowledgment of the opt-out request and confirmation that no further messages will be sent. It is also recommended that these opt-out messages include the brand name. This field is required if managing opt out keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). 20 character minimum. 320 character maximum.
                    def opt_out_message
                        @properties['opt_out_message']
                    end
                    
                    ##
                    # @return [String] When customers receive the help keywords from their end users, Twilio customers are expected to send back an auto-generated response; this may include the brand name and additional support contact information. This field is required if managing help keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). 20 character minimum. 320 character maximum.
                    def help_message
                        @properties['help_message']
                    end
                    
                    ##
                    # @return [Array<String>] If end users can text in a keyword to start receiving messages from this campaign, those keywords must be provided. This field is required if end users can text in a keyword to start receiving messages from this campaign. Values must be alphanumeric. 255 character maximum.
                    def opt_in_keywords
                        @properties['opt_in_keywords']
                    end
                    
                    ##
                    # @return [Array<String>] End users should be able to text in a keyword to stop receiving messages from this campaign. Those keywords must be provided. This field is required if managing opt out keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). Values must be alphanumeric. 255 character maximum.
                    def opt_out_keywords
                        @properties['opt_out_keywords']
                    end
                    
                    ##
                    # @return [Array<String>] End users should be able to text in a keyword to receive help. Those keywords must be provided as part of the campaign registration request. This field is required if managing help keywords yourself (i.e. not using Twilio's Default or Advanced Opt Out features). Values must be alphanumeric. 255 character maximum.
                    def help_keywords
                        @properties['help_keywords']
                    end
                    
                    ##
                    # @return [Time] The date and time in GMT when the resource was created specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
                    def date_created
                        @properties['date_created']
                    end
                    
                    ##
                    # @return [Time] The date and time in GMT when the resource was last updated specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
                    def date_updated
                        @properties['date_updated']
                    end
                    
                    ##
                    # @return [String] The absolute URL of the US App to Person resource.
                    def url
                        @properties['url']
                    end
                    
                    ##
                    # @return [Boolean] A boolean that specifies whether campaign is a mock or not. Mock campaigns will be automatically created if using a mock brand. Mock campaigns should only be used for testing purposes.
                    def mock
                        @properties['mock']
                    end
                    
                    ##
                    # @return [Array<Hash>] Details indicating why a campaign registration failed. These errors can indicate one or more fields that were incorrect or did not meet review requirements.
                    def errors
                        @properties['errors']
                    end
                    
                    ##
                    # Delete the UsAppToPersonInstance
                    # @return [Boolean] True if delete succeeds, false otherwise
                    def delete

                        context.delete
                    end

                    ##
                    # Fetch the UsAppToPersonInstance
                    # @return [UsAppToPersonInstance] Fetched UsAppToPersonInstance
                    def fetch

                        context.fetch
                    end

                    ##
                    # Update the UsAppToPersonInstance
                    # @param [Boolean] has_embedded_links Indicates that this SMS campaign will send messages that contain links.
                    # @param [Boolean] has_embedded_phone Indicates that this SMS campaign will send messages that contain phone numbers.
                    # @param [Array[String]] message_samples An array of sample message strings, min two and max five. Min length for each sample: 20 chars. Max length for each sample: 1024 chars.
                    # @param [String] message_flow Required for all Campaigns. Details around how a consumer opts-in to their campaign, therefore giving consent to receive their messages. If multiple opt-in methods can be used for the same campaign, they must all be listed. 40 character minimum. 2048 character maximum.
                    # @param [String] description A short description of what this SMS campaign does. Min length: 40 characters. Max length: 4096 characters.
                    # @param [Boolean] age_gated A boolean that specifies whether campaign requires age gate for federally legal content.
                    # @param [Boolean] direct_lending A boolean that specifies whether campaign allows direct lending or not.
                    # @return [UsAppToPersonInstance] Updated UsAppToPersonInstance
                    def update(
                        has_embedded_links: nil, 
                        has_embedded_phone: nil, 
                        message_samples: nil, 
                        message_flow: nil, 
                        description: nil, 
                        age_gated: nil, 
                        direct_lending: nil
                    )

                        context.update(
                            has_embedded_links: has_embedded_links, 
                            has_embedded_phone: has_embedded_phone, 
                            message_samples: message_samples, 
                            message_flow: message_flow, 
                            description: description, 
                            age_gated: age_gated, 
                            direct_lending: direct_lending, 
                        )
                    end

                    ##
                    # Provide a user friendly representation
                    def to_s
                        values = @params.map{|k, v| "#{k}: #{v}"}.join(" ")
                        "<Twilio.Messaging.V1.UsAppToPersonInstance #{values}>"
                    end

                    ##
                    # Provide a detailed, user friendly representation
                    def inspect
                        values = @properties.map{|k, v| "#{k}: #{v}"}.join(" ")
                        "<Twilio.Messaging.V1.UsAppToPersonInstance #{values}>"
                    end
                end

             end
            end
        end
    end
end


