responsys-api 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/README.md +82 -10
- data/lib/responsys/api/all.rb +17 -0
- data/lib/responsys/api/campaign.rb +26 -0
- data/lib/responsys/api/client.rb +70 -0
- data/lib/responsys/api/folder.rb +25 -0
- data/lib/responsys/api/list.rb +39 -0
- data/lib/responsys/api/object/all.rb +11 -0
- data/lib/responsys/api/object/email_format.rb +23 -0
- data/lib/responsys/api/object/field.rb +20 -0
- data/lib/responsys/api/object/field_type.rb +23 -0
- data/lib/responsys/api/object/interact_object.rb +18 -0
- data/lib/responsys/api/object/list_merge_rule.rb +41 -0
- data/lib/responsys/api/object/optional_data.rb +23 -0
- data/lib/responsys/api/object/query_column.rb +23 -0
- data/lib/responsys/api/object/recipient.rb +30 -0
- data/lib/responsys/api/object/recipient_data.rb +21 -0
- data/lib/responsys/api/object/record.rb +19 -0
- data/lib/responsys/api/object/record_data.rb +31 -0
- data/lib/responsys/api/session.rb +30 -0
- data/lib/responsys/api/table.rb +49 -0
- data/lib/responsys/configuration.rb +3 -3
- data/lib/responsys/exceptions/all.rb +1 -0
- data/lib/responsys/exceptions/parameter_exception.rb +7 -0
- data/lib/responsys/helper.rb +78 -2
- data/lib/responsys/i18n/en.yml +20 -0
- data/lib/responsys/member.rb +80 -0
- data/lib/responsys_api.rb +11 -4
- data/responsys-api.gemspec +12 -9
- data/spec/api/campaign_spec.rb +27 -0
- data/spec/api/client_spec.rb +107 -0
- data/spec/api/list_spec.rb +71 -0
- data/spec/api/object/recipient_data_spec.rb +43 -0
- data/spec/api/object/recipient_spec.rb +68 -0
- data/spec/api/object/record_data_spec.rb +28 -0
- data/spec/api/table_spec.rb +111 -0
- data/spec/fixtures/vcr_cassettes/api/campaign/login.yml +940 -0
- data/spec/fixtures/vcr_cassettes/api/client/expired_session.yml +1030 -0
- data/spec/fixtures/vcr_cassettes/api/list/login.yml +982 -0
- data/spec/fixtures/vcr_cassettes/api/list/merge.yml +134 -0
- data/spec/fixtures/vcr_cassettes/api/list/retrieve.yml +46 -0
- data/spec/fixtures/vcr_cassettes/api/list/retrieve_single.yml +133 -0
- data/spec/fixtures/vcr_cassettes/api/list/retrieve_single_single.yml +45 -0
- data/spec/fixtures/vcr_cassettes/api/profile_extension/login.yml +982 -0
- data/spec/fixtures/vcr_cassettes/api/profile_extension/merge_profile_extension_records.yml +46 -0
- data/spec/fixtures/vcr_cassettes/api/profile_extension/retrieve_profile_extension_records.yml +45 -0
- data/spec/fixtures/vcr_cassettes/api/table/create.yml +45 -0
- data/spec/fixtures/vcr_cassettes/api/table/create_with_pk.yml +45 -0
- data/spec/fixtures/vcr_cassettes/api/table/delete.yml +45 -0
- data/spec/fixtures/vcr_cassettes/api/table/delete_with_pk.yml +45 -0
- data/spec/fixtures/vcr_cassettes/member/present1.yml +982 -0
- data/spec/fixtures/vcr_cassettes/member/present2.yml +45 -0
- data/spec/fixtures/vcr_cassettes/member/present3.yml +48 -0
- data/spec/fixtures/vcr_cassettes/member/present4.yml +48 -0
- data/spec/fixtures/vcr_cassettes/member/present5.yml +48 -0
- data/spec/fixtures/vcr_cassettes/member/retrieve_profile_extension.yml +87 -0
- data/spec/member_spec.rb +136 -0
- data/spec/spec_helper.rb +28 -2
- metadata +136 -19
- data/lib/responsys/responsys_api.rb +0 -41
- data/lib/savon/savon_api.rb +0 -22
- data/spec/responsys_api_spec.rb +0 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjJjY2JmYjg3NDBmZmQ4NDBhMGM0ZWNiNDIxYzBlZjdmODQzYmQ5YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGIyMTU3ZmY5Mzg3NmIwYmJlMWFhZmViMGNhYWUxMWM5NGQ3MzMwMg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YjNiZjc5OTAwYjMwMWI2YzZjZjBkYTQyOGI0N2E4YTc5NjgzYjA4MDc5NGVj
|
10
|
+
YmFjMmIzYTQwYjQxMTIyNWQxY2NhZjNhZWJjMzY2NzcyZWE5MjcwMmM1ODll
|
11
|
+
ZmM1N2Q4MjJlZmZhMTdjMzAyMTA2Mjc0MjZhZWEzNTdiMmE0Nzk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2YwNmFhY2RkZTNkZDdmZjA1N2E4ZjJhMDc3NTcxODk3ZmEwNDlmYjU0MDQ2
|
14
|
+
NzU4OTdlMTgxODcwMzMyYjIzYzQ1OTc5NjRlOWIyM2E2MGRjMTIzYTM4MDgy
|
15
|
+
OGFjNzMwNmUwZDNhM2JiZTExMmQzZmZmMDg1ZTIzZDc1Mjc5MzM=
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,29 +1,101 @@
|
|
1
|
-
#
|
1
|
+
# ResponsysApi
|
2
2
|
|
3
|
-
|
3
|
+
A gem to help you communicate to the Responsys Interact SOAP API.
|
4
4
|
|
5
|
-
##
|
5
|
+
## Documentation
|
6
6
|
|
7
|
-
|
7
|
+
Have a look at the [wiki](https://github.com/dandemeyere/responsys-api/wiki) to understand how it works as well as special tips specially prepared for you ! If you have any questions or if you want to report a bug please create an [issue](https://github.com/dandemeyere/responsys-api/issues).
|
8
8
|
|
9
|
-
|
9
|
+
## Installation
|
10
10
|
|
11
|
-
|
11
|
+
Add this line to your application"s Gemfile:
|
12
12
|
|
13
|
-
|
13
|
+
gem "responsys-api", "~> 0.0.4"
|
14
14
|
|
15
|
-
Or install it
|
15
|
+
Or install it locally with:
|
16
16
|
|
17
17
|
$ gem install responsys-api
|
18
18
|
|
19
19
|
## Usage
|
20
|
+
### Configuration
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
# Configure ResponsysApi in your initializers (config/initializers/responsys_api.rb):
|
24
|
+
Responsys.configure do |config|
|
25
|
+
config.settings = {
|
26
|
+
username: "your_responsys_username",
|
27
|
+
password: "your_responsys_password",
|
28
|
+
wsdl: "https://wsXXXX.responsys.net/webservices/wsdl/ResponsysWS_Level1.wsdl",
|
29
|
+
debug: false
|
30
|
+
}
|
31
|
+
end
|
32
|
+
```
|
33
|
+
|
34
|
+
Note that the debug option is optional and is set to false by default.
|
35
|
+
|
36
|
+
### Example
|
37
|
+
```ruby
|
38
|
+
#!/usr/bin/env ruby
|
39
|
+
|
40
|
+
## Scenario : subscribe a user to a newsletter
|
41
|
+
## Details : the user exists in the list of your users in Responsys @ "the_folder_containing_the_list/my_customers_list". He just decided to subscribe so let's update his status !
|
42
|
+
|
43
|
+
# Require the gem
|
44
|
+
require 'responsys_api'
|
20
45
|
|
21
|
-
|
46
|
+
Responsys.configure do |config|
|
47
|
+
config.settings = {
|
48
|
+
username: "your_responsys_username",
|
49
|
+
password: "your_responsys_password",
|
50
|
+
wsdl: "https://wsXXXX.responsys.net/webservices/wsdl/ResponsysWS_Level1.wsdl"
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
# A list is an "InteractObject" according to the official API documentation
|
55
|
+
list = Responsys::Api::Object::InteractObject.new("the_folder_containing_the_list", "my_customers_list")
|
56
|
+
|
57
|
+
# The Member (or "user" for the example) record to update
|
58
|
+
member = Responsys::Member.new('user@email.com')
|
59
|
+
|
60
|
+
# Add the user to the list if he is not present.
|
61
|
+
unless member.present_in_list?(list)
|
62
|
+
puts "New user. Let's add it"
|
63
|
+
member.add_to_list(list)
|
64
|
+
else
|
65
|
+
puts "The user is in the list"
|
66
|
+
end
|
67
|
+
|
68
|
+
# Subscribe the user if he hasn't subscribed yet
|
69
|
+
unless member.subscribed?(list)
|
70
|
+
puts "Subscribing the user to the list"
|
71
|
+
member.subscribe(list)
|
72
|
+
else
|
73
|
+
puts "The user already subscribed"
|
74
|
+
end
|
75
|
+
|
76
|
+
# Check the member has a subscribed status
|
77
|
+
puts member.subscribed?(list) ? "#{member.email} has subscribed to #{list.object_name}" : "An error happened"
|
78
|
+
```
|
79
|
+
### Session
|
80
|
+
The API client used by the gem logs in as soon as a the first method is called. The same session is used as it is valid. If you want to close the API session you can manually call the log out action :
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
Responsys::Api::Client.instance.logout
|
84
|
+
```
|
22
85
|
|
23
86
|
## Contributing
|
24
87
|
|
25
88
|
1. Fork it
|
26
89
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
-
3. Commit your changes (`git commit -am
|
90
|
+
3. Commit your changes (`git commit -am "Add some feature"`)
|
28
91
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
92
|
5. Create new Pull Request
|
93
|
+
|
94
|
+
## To Do
|
95
|
+
* Add thorough tests with properly mocked out API responses
|
96
|
+
* Build out API functionality
|
97
|
+
* Member profile extension
|
98
|
+
* CRUD operations (create new key/value, update value by key, delete key/value by key)
|
99
|
+
* Tables
|
100
|
+
* CRUD operations (create new key/value, update value by key, delete key/value by key)
|
101
|
+
* Batch member profile updates
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "responsys/api/folder"
|
2
|
+
require "responsys/api/list"
|
3
|
+
require "responsys/api/session"
|
4
|
+
require "responsys/api/table"
|
5
|
+
require "responsys/api/campaign"
|
6
|
+
|
7
|
+
module Responsys
|
8
|
+
module Api
|
9
|
+
module All
|
10
|
+
include Responsys::Api::Folder
|
11
|
+
include Responsys::Api::List
|
12
|
+
include Responsys::Api::Session
|
13
|
+
include Responsys::Api::Table
|
14
|
+
include Responsys::Api::Campaign
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "responsys/api/object/all"
|
2
|
+
|
3
|
+
module Responsys
|
4
|
+
module Api
|
5
|
+
module Campaign
|
6
|
+
include Responsys::Exceptions
|
7
|
+
|
8
|
+
def trigger_message(campaign, recipients)
|
9
|
+
raise ParameterException, I18n.t("api.campaign.incorrect_recipients_type") unless recipients.is_a? Array
|
10
|
+
message = {
|
11
|
+
campaign: campaign.to_api,
|
12
|
+
recipientData: recipients.map(&:to_api)
|
13
|
+
}
|
14
|
+
api_method(:trigger_campaign_message, message)
|
15
|
+
end
|
16
|
+
|
17
|
+
def check_failures(outcome, recipients)
|
18
|
+
if outcome.respond_to?(:each_index)
|
19
|
+
outcome.each_index { |i| puts "failed:\n" + recipients[i][:recipient].to_s unless outcome[i][:success] }
|
20
|
+
else
|
21
|
+
puts "failed:\n" + recipients[:recipient].to_s unless outcome[:success]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require "responsys/configuration"
|
2
|
+
require "savon"
|
3
|
+
require "responsys/helper"
|
4
|
+
require "responsys/api/all"
|
5
|
+
require "responsys/api/object/all"
|
6
|
+
require "singleton"
|
7
|
+
|
8
|
+
module Responsys
|
9
|
+
module Api
|
10
|
+
class Client
|
11
|
+
include Singleton
|
12
|
+
include Responsys::Api::All
|
13
|
+
|
14
|
+
attr_accessor :credentials, :client, :session_id, :jsession_id, :header
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
settings = Responsys.configuration.settings
|
18
|
+
@credentials = {
|
19
|
+
username: settings[:username],
|
20
|
+
password: settings[:password]
|
21
|
+
}
|
22
|
+
|
23
|
+
if settings[:debug]
|
24
|
+
@client = Savon.client(wsdl: settings[:wsdl], element_form_default: :qualified, log_level: :debug, log: true, pretty_print_xml: true)
|
25
|
+
else
|
26
|
+
@client = Savon.client(wsdl: settings[:wsdl], element_form_default: :qualified)
|
27
|
+
end
|
28
|
+
|
29
|
+
login
|
30
|
+
end
|
31
|
+
|
32
|
+
def api_method(action, message = nil, response_type = :hash)
|
33
|
+
begin
|
34
|
+
response = run_with_credentials(action, message, jsession_id, header)
|
35
|
+
|
36
|
+
case response_type
|
37
|
+
when :result
|
38
|
+
Responsys::Helper.format_response_result(response, action)
|
39
|
+
when :hash
|
40
|
+
Responsys::Helper.format_response_hash(response, action)
|
41
|
+
end
|
42
|
+
|
43
|
+
rescue Exception => e
|
44
|
+
error_response = Responsys::Helper.format_response_with_errors(e)
|
45
|
+
|
46
|
+
if error_response[:error][:code] == "INVALID_SESSION_ID"
|
47
|
+
login
|
48
|
+
api_method(action, message, response_type)
|
49
|
+
else
|
50
|
+
error_response
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def available_operations
|
56
|
+
@client.operations
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def run(method, message)
|
62
|
+
@client.call(method.to_sym, message: message)
|
63
|
+
end
|
64
|
+
|
65
|
+
def run_with_credentials(method, message, cookie, header)
|
66
|
+
@client.call(method.to_sym, message: message, cookies: cookie, soap_header: header)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Responsys
|
2
|
+
module Api
|
3
|
+
module Folder
|
4
|
+
def list_folders
|
5
|
+
api_method(:list_folders)
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_folder(name)
|
9
|
+
api_method(:create_folder, { :folderName => name })
|
10
|
+
end
|
11
|
+
|
12
|
+
def delete_folder(name)
|
13
|
+
api_method(:delete_folder, { :folderName => name })
|
14
|
+
end
|
15
|
+
|
16
|
+
def folder_exists?(name)
|
17
|
+
all = list_folders
|
18
|
+
|
19
|
+
all.select! { |curr_folder| curr_folder[:name] == name }
|
20
|
+
|
21
|
+
!all.empty?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "responsys/api/object/all"
|
2
|
+
|
3
|
+
module Responsys
|
4
|
+
module Api
|
5
|
+
module List
|
6
|
+
include Responsys::Api::Object
|
7
|
+
def retrieve_list_members(interact_object, query_column, field_list, ids_to_retrieve)
|
8
|
+
message = {
|
9
|
+
list: interact_object.to_api,
|
10
|
+
queryColumn: query_column.to_api,
|
11
|
+
fieldList: field_list,
|
12
|
+
idsToRetrieve: ids_to_retrieve
|
13
|
+
}
|
14
|
+
|
15
|
+
api_method(:retrieve_list_members, message)
|
16
|
+
end
|
17
|
+
|
18
|
+
def merge_list_members(interact_object, record_data, merge_rule = ListMergeRule.new)
|
19
|
+
message = {
|
20
|
+
list: interact_object.to_api,
|
21
|
+
recordData: record_data.to_api,
|
22
|
+
mergeRule: merge_rule.to_api
|
23
|
+
}
|
24
|
+
|
25
|
+
api_method(:merge_list_members, message)
|
26
|
+
end
|
27
|
+
|
28
|
+
def merge_list_members_riid(interact_object, record_data, merge_rule = ListMergeRule.new)
|
29
|
+
message = {
|
30
|
+
list: interact_object.to_api,
|
31
|
+
recordData: record_data.to_api,
|
32
|
+
mergeRule: merge_rule.to_api
|
33
|
+
}
|
34
|
+
|
35
|
+
api_method(:merge_list_members_riid, message)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "responsys/api/object/interact_object"
|
2
|
+
require "responsys/api/object/list_merge_rule"
|
3
|
+
require "responsys/api/object/record"
|
4
|
+
require "responsys/api/object/record_data"
|
5
|
+
require "responsys/api/object/field"
|
6
|
+
require "responsys/api/object/field_type"
|
7
|
+
require "responsys/api/object/query_column"
|
8
|
+
require "responsys/api/object/recipient"
|
9
|
+
require "responsys/api/object/recipient_data"
|
10
|
+
require "responsys/api/object/email_format"
|
11
|
+
require "responsys/api/object/optional_data"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Responsys
|
2
|
+
module Api
|
3
|
+
module Object
|
4
|
+
class EmailFormat
|
5
|
+
include Responsys::Api::Object
|
6
|
+
attr_accessor :email_format_string
|
7
|
+
AVAILABLE_EMAIL_FORMAT = %w(TEXT_FORMAT HTML_FORMAT NO_FORMAT MULTIPART_FORMAT)
|
8
|
+
|
9
|
+
def initialize(email_format = "NO_FORMAT")
|
10
|
+
if AVAILABLE_EMAIL_FORMAT.include? email_format
|
11
|
+
@email_format_string = email_format
|
12
|
+
else
|
13
|
+
raise ParameterException, I18n.t("api.object.email_format.incorrect_email_format")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_api
|
18
|
+
@email_format_string
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Responsys
|
2
|
+
module Api
|
3
|
+
module Object
|
4
|
+
class Field
|
5
|
+
attr_accessor :field_name, :field_type, :custom, :data_extraction_key
|
6
|
+
|
7
|
+
def initialize(field_name, field_type, custom = false, data_extraction_key = false)
|
8
|
+
@field_name = field_name
|
9
|
+
@field_type = field_type
|
10
|
+
@custom = custom
|
11
|
+
@data_extraction_key = data_extraction_key
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_api
|
15
|
+
{ fieldName: @field_name, fieldType: @field_type.to_api, custom: @custom, dataExtractionKey: @data_extraction_key }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Responsys
|
2
|
+
module Api
|
3
|
+
module Object
|
4
|
+
class FieldType
|
5
|
+
include Responsys::Exceptions
|
6
|
+
attr_accessor :field_type_string
|
7
|
+
FIELD_TYPES = %w(STR500 STR4000 NUMBER TIMESTAMP INTEGER)
|
8
|
+
|
9
|
+
def initialize(field_type)
|
10
|
+
if FIELD_TYPES.include? field_type
|
11
|
+
@field_type_string = field_type
|
12
|
+
else
|
13
|
+
raise ParameterException, I18n.t("api.object.field_type.incorrect_field_type")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_api
|
18
|
+
@field_type_string
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Responsys
|
2
|
+
module Api
|
3
|
+
module Object
|
4
|
+
class InteractObject
|
5
|
+
attr_accessor :folder_name, :object_name
|
6
|
+
|
7
|
+
def initialize(folder_name, object_name)
|
8
|
+
@folder_name = folder_name
|
9
|
+
@object_name = object_name
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_api
|
13
|
+
{ folderName: @folder_name, objectName: @object_name }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Responsys
|
2
|
+
module Api
|
3
|
+
module Object
|
4
|
+
class ListMergeRule
|
5
|
+
attr_accessor :insert_on_no_match, :update_on_match, :match_column_name1, :match_column_name2, :match_column_name3, :match_operator, :optin_value, :optout_value, :html_value, :text_value, :reject_record_if_channel_empty, :default_permission_status
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
@insert_on_no_match = options[:insertOnNoMatch].nil? ? false : options[:insertOnNoMatch]
|
9
|
+
@update_on_match = options[:updateOnMatch] || "REPLACE_ALL"
|
10
|
+
@match_column_name1 = options[:matchColumnName1] || "EMAIL_ADDRESS_"
|
11
|
+
@match_column_name2 = options[:matchColumnName2] || ""
|
12
|
+
@match_column_name3 = options[:matchColumnName3] || ""
|
13
|
+
@match_operator = options[:matchOperator] || "AND"
|
14
|
+
@optin_value = options[:optinValue] || "I"
|
15
|
+
@optout_value = options[:optoutValue] || "O"
|
16
|
+
@html_value = options[:htmlValue] || "H"
|
17
|
+
@text_value = options[:textValue] || "T"
|
18
|
+
@reject_record_if_channel_empty = options[:rejectRecordIfChannelEmpty] || ""
|
19
|
+
@default_permission_status = options[:defaultPermissionStatus] || "OPTOUT"
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_api
|
23
|
+
{
|
24
|
+
insertOnNoMatch: @insert_on_no_match,
|
25
|
+
updateOnMatch: @update_on_match,
|
26
|
+
matchColumnName1: @match_column_name1,
|
27
|
+
matchColumnName2: @match_column_name2,
|
28
|
+
matchColumnName3: @match_column_name3,
|
29
|
+
matchOperator: @match_operator,
|
30
|
+
optinValue: @optin_value,
|
31
|
+
optoutValue: @optout_value,
|
32
|
+
htmlValue: @html_value,
|
33
|
+
textValue: @text_value,
|
34
|
+
rejectRecordIfChannelEmpty: @reject_record_if_channel_empty,
|
35
|
+
defaultPermissionStatus: @default_permission_status
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|