Issue creating custom combination remarketing list using LogicalUserList

187 views
Skip to first unread message

kaushik vinay T G

unread,
Nov 16, 2015, 8:50:40 AM11/16/15
to AdWords API Forum

Hello,
   
  We are using Ruby client library for the AdWords API, currently having issues creating custom combination of existing remarketing list using LogicalUserList.
  Passing multiple Userlist as an array inside rule_operands seems to set only one of Userlist in the result.
  My problem is similar to this question previous asked by someone v201502 version can't set retargeting audience.
  Please advise on how to pass the parameters in respect to code below. 

  Thanks.

  Code:

  user_list_srv = adwords.service(:AdwordsUserListService, :v201509)
  operation = {
        :operator => 'ADD',
        :operand => {
          :xsi_type => 'LogicalUserList',
          :name => "Retargeting list",
          :description => "Custom combination list",
          :status => 'OPEN',
          :membership_life_span => '30',
          :rules => [
            {
              :operator => 'ANY',
              :rule_operands => [
                {
                  :xsi_type=>"UserList",
                  :id => 185402234
                },
                {
                  :xsi_type=>"UserList",
                  :id => 185402123
                },
                {
                  :xsi_type=>"UserList",
                  :id => 185402755
                }
              ]
            }
          ]
        }
      }
     response = user_list_srv.mutate([operation])

     result:

    {:list_return_value_type=>"UserListReturnValue", :value=>[{:id=>"185666666", :is_read_only=>"false", :name=>"Retargeting list", :description=>"Custom combination list", :status=>"OPEN", :integration_code=>nil, :access_reason=>"OWNED", :account_user_list_status=>"ACTIVE", :membership_life_span=>"30", :list_type=>"LOGICAL", :is_eligible_for_search=>"true", :user_list_type=>"LogicalUserList", :rules=>{:operator=>"ANY", :rule_operands=>{:user_list=>{:id=>"185402755", :is_read_only=>"true", :name=>"Retargeting - Commercial Sales Specialist", :list_type=>"RULE_BASED", :user_list_type=>"ExpressionRuleUserList", :rule=>{:groups=>{:items=>{:string_rule_item=>{:key=>{:name=>"url__"}, :op=>"CONTAINS", :value=>"commercial-sales-specialist"}}}}, :"@xsi:type"=>"ns2:ExpressionRuleUserList"}}}, :xsi_type=>"ns2:LogicalUserList"}]} 

Nadine Sundquist (AdWords API Team)

unread,
Nov 16, 2015, 6:10:38 PM11/16/15
to AdWords API Forum
Hi,

In order to make sure I reproduce this correctly, is this example the one that you were following when creating your request?

Best,
Nadine, AdWords API Team

kaushik vinay T G

unread,
Nov 17, 2015, 12:31:29 AM11/17/15
to AdWords API Forum
Hi Nadine,

   Yes, the example shown for "Combining multiple user lists" on that page.
Thanks.

Nadine Sundquist (AdWords API Team)

unread,
Nov 17, 2015, 4:38:35 PM11/17/15
to AdWords API Forum
Hello,

I gave this a try myself using the example, while keeping in mind what you wanted to do. This is the request and response in SOAP XML (minus the header):

[17 Nov 2015 16:26:44,075 - INFO ] Outgoing Request:
<mutate xmlns="https://adwords.google.com/api/adwords/rm/v201509"><operations><operator xmlns="https://adwords.google.com/api/adwords/cm/v201509">ADD</operator><operand xsi:type="LogicalUserList" ><name>My combination list customers #2gQCmMULSkgHd</name><rules><operator>ANY</operator><ruleOperands><UserList xsi:type="BasicUserList" ><id>66612533</id></UserList></ruleOperands><ruleOperands><UserList xsi:type="BasicUserList" ><id>66612413</id></UserList></ruleOperands><ruleOperands><UserList xsi:type="BasicUserList" ><id>66612293</id></UserList></ruleOperands></rules></operand></operations></mutate>
[17 Nov 2015 16:26:44,540 - INFO ] Incoming response:
<ns2:mutateResponse xmlns="https://adwords.google.com/api/adwords/cm/v201509" xmlns:ns2="https://adwords.google.com/api/adwords/rm/v201509"><ns2:rval><ListReturnValue.Type>UserListReturnValue</ListReturnValue.Type><ns2:value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:LogicalUserList"><ns2:id>66612653</ns2:id><ns2:isReadOnly>false</ns2:isReadOnly><ns2:name>My combination list customers #2gQCmMULSkgHd</ns2:name><ns2:description></ns2:description><ns2:status>OPEN</ns2:status><ns2:integrationCode></ns2:integrationCode><ns2:accessReason>OWNED</ns2:accessReason><ns2:accountUserListStatus>ACTIVE</ns2:accountUserListStatus><ns2:membershipLifeSpan>30</ns2:membershipLifeSpan><ns2:listType>LOGICAL</ns2:listType><ns2:isEligibleForSearch>true</ns2:isEligibleForSearch><ns2:UserList.Type>LogicalUserList</ns2:UserList.Type><ns2:rules><ns2:operator>ANY</ns2:operator><ns2:ruleOperands><ns2:UserList xsi:type="ns2:BasicUserList"><ns2:id>66612533</ns2:id><ns2:isReadOnly>true</ns2:isReadOnly><ns2:name>list #1mXn1x3VePnQ6</ns2:name><ns2:listType>REMARKETING</ns2:listType><ns2:UserList.Type>BasicUserList</ns2:UserList.Type></ns2:UserList></ns2:ruleOperands><ns2:ruleOperands><ns2:UserList xsi:type="ns2:BasicUserList"><ns2:id>66612413</ns2:id><ns2:isReadOnly>true</ns2:isReadOnly><ns2:name>list #1mlcbZAtdOeBk</ns2:name><ns2:listType>REMARKETING</ns2:listType><ns2:UserList.Type>BasicUserList</ns2:UserList.Type></ns2:UserList></ns2:ruleOperands><ns2:ruleOperands><ns2:UserList xsi:type="ns2:BasicUserList"><ns2:id>66612293</ns2:id><ns2:isReadOnly>true</ns2:isReadOnly><ns2:name>list #1mGOdnV3oZrZU</ns2:name><ns2:listType>REMARKETING</ns2:listType><ns2:UserList.Type>BasicUserList</ns2:UserList.Type></ns2:UserList></ns2:ruleOperands></ns2:rules></ns2:value></ns2:rval></ns2:mutateResponse>

The one difference I see between the two is that I'm specifying a specific kind of list rather than a UserList. Please take a look at this request, an give it a try in your own code. Just as a quick note, certain types of user lists cannot be combined with other types of user lists. For example, CRM based user lists cannot be combined with other types of user lists. I'm just mentioning this because based on your request, I can't tell what kinds of lists you're using. Hopefully, that will help as well.

Regards,
Nadine, AdWords API Team

kaushik vinay T G

unread,
Nov 18, 2015, 9:26:22 AM11/18/15
to AdWords API Forum
Hi Nadine,

   I tried to send the parameters as u mentioned, but Im unable to create it using ruby client library, please let me know if im passing the right syntax

   user_list_srv = adwords.service(:AdwordsUserListService, :v201509)
   operation = {
          :operator => 'ADD',
          :operand => {
            :xsi_type => 'LogicalUserList',
            :name => "Retargeting list",
            :description => "Custom combination list",
            :status => 'OPEN',
            :membership_life_span => '30',
            :rules => [
              {
                :operator => 'ANY',
                :rule_operands => [
                  {
                    :user_list => {
                      :xsi_type => "ExpressionRuleUserList",
                      :id => 185402532
                    }
                  },
                  {
                    :user_list => {
                      :xsi_type => "ExpressionRuleUserList",
                      :id => 185402652
                    }
                  },
                  {
                    :user_list => {
                      :xsi_type => "ExpressionRuleUserList",
                      :id => 185402772
                    }
                  }
                ]
              }
            ]
          }
        }
   response = user_list_srv.mutate([operation])


Result:
AdsCommon::Errors::TypeMismatchError: AdsCommon::Errors::TypeMismatchError: expected: 'choice subtype', provided: '' for field '{:user_list=>{:xsi_type=>"ExpressionRuleUserList", :id=>185402532}}'

Michael Cloonan (AdWords API Team)

unread,
Nov 18, 2015, 10:57:33 AM11/18/15
to AdWords API Forum
Hello,

You shouldn't need to define :user_list => within the array of :rule_operands. Instead, just define the user list directly. This is what "choice" type means; you can populate the data with one of many possible classes. This is why an explicit :xsi_type is required, as well. So, for example, rather than the way you have :rules populated above, try this:

:rules => [
 
{
   
:operator => 'ANY',
   
:rule_operands => [
     
{

       
:xsi_type => "ExpressionRuleUserList",
       
:id => 185402532
     
},
     
{

       
:xsi_type => "ExpressionRuleUserList",
       
:id => 185402652
     
},
     
{

       
:xsi_type => "ExpressionRuleUserList",
       
:id => 185402772
     
}
   
]
 
}
]

Regards,
Mike, AdWords API Team

kaushik vinay T G

unread,
Nov 18, 2015, 11:12:01 AM11/18/15
to AdWords API Forum
Hello Mike,
   
   I tried that before and gave it a try again now, this is what i got as response

   AdsCommon::Errors::TypeMismatchError: AdsCommon::Errors::TypeMismatchError: expected: 'choice subtype', provided: 'ExpressionRuleUserList' for field '{:id=>185402532}'

Michael Cloonan (AdWords API Team)

unread,
Nov 18, 2015, 12:51:52 PM11/18/15
to AdWords API Forum
Hello,

In your initial email, you mentioned that the library validation worked and that you got a response from the API. Try that same syntax, but using the specific :xsi_type (ExpressionRuleUserList) rather than the generic "UserList". If that's already what you've tried, please provide the exact code you're using, with those changes in place, so that I can try troubleshooting further.

Regards,
Mike, AdWords API Team

kaushik vinay T G

unread,
Nov 18, 2015, 1:32:41 PM11/18/15
to AdWords API Forum
Hi,
   I was only able to pass :xsi_type as "UserList", anything other than that throws an error

user_list_srv = adwords.service(:AdwordsUserListService,  :v201509)
operation = {
          :operator => 'ADD',
          :operand => {
            :xsi_type => 'LogicalUserList',
            :name => "Retargeting list",
            :description => "Custom combination list",
            :status => 'OPEN',
            :membership_life_span => '30',
            :rules => [
              {
                :operator => 'ANY',
                :rule_operands => [
                  {
                    :xsi_type => "ExpressionRuleUserList",
                    :id => 185402532
                  },
                  {
                    :xsi_type => "ExpressionRuleUserList",
                    :id => 185402652
                  },
                  {
                    :xsi_type => "ExpressionRuleUserList",
                    :id => 185402772
                  }
                ]
              }
            ]
          }
        }

response = user_list_srv.mutate([operation])

Michael Cloonan (AdWords API Team)

unread,
Nov 18, 2015, 1:37:41 PM11/18/15
to AdWords API Forum
Hello,

Looking at the WSDL, I believe that hash is supposed to work. We only recently added choice support for requests to the ruby library, but only tested it for a different use case, not LogicalUserLists. I believe this to be a bug with the ruby library itself.


Thanks,
-Mike, AdWords API Team

kaushik vinay T G

unread,
Nov 18, 2015, 3:20:35 PM11/18/15
to AdWords API Forum
Hello Mike,

    Thanks for the update, had my head cracking on this, will file for an issue now.

Regards,
Kaushik Vinay 
Reply all
Reply to author
Forward
0 new messages