## # 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, }) response = @version.page('GET', @uri, params: params) 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 '#' 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(',') "#" end ## # Provide a detailed, user friendly representation def inspect context = @solution.map{|k, v| "#{k}: #{v}"}.join(',') "#" 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 '' 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] 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] 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] 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] 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] 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(" ") "" end ## # Provide a detailed, user friendly representation def inspect values = @properties.map{|k, v| "#{k}: #{v}"}.join(" ") "" end end end end end end end