public function addCustomIntentList(array $data)
{
$expressionUserList = new ExpressionRuleUserList();
$expressionUserList->setName('Test item');
$expressionUserList->setDescription(
'Test description'
);
$expressionUserList->setPrepopulationStatus(
RuleBasedUserListPrepopulationStatus::REQUESTED
);
$expressionUserList->setRule(self::createUserListRule($data));
$operation = new \Google\AdsApi\AdWords\v201710\rm\UserListOperation();
$operation->setOperand($expressionUserList);
$operation->setOperator(\Google\AdsApi\AdWords\v201710\cm\Operator::ADD);
return $this->mutateOperations([$operation])[0];
}
/**
* Create a user list rule composed of two rule item groups.
* @param array $data
*
* @return Rule the created rule
*/
private static function createUserListRule(array $data)
{
$ruleItems = [];
foreach ($data as $ruleItem) {
$stringRuleItem = new StringRuleItem();
$stringKey = new StringKey();
$stringKey->setName($ruleItem);
$stringRuleItem->setKey($stringKey);
$stringRuleItem->setOp(StringRuleItemStringOperator::EQUALS);
$stringRuleItem->setValue($ruleItem);
$newRuleItem = new RuleItem();
$newRuleItem->setStringRuleItem($stringRuleItem);
$ruleItems[] = $newRuleItem;
}
$multipleItemGroup = new RuleItemGroup();
$multipleItemGroup->setItems(
$ruleItems
);
$rule = new Rule();
$rule->setGroups(
[$multipleItemGroup]
);
$rule->setRuleType(UserListRuleTypeEnumsEnum::DNF);
return $rule;
}
addCustomIntentList(array $data - array of strings(domains), which I need to save via API programmatically like keywords in UI version:
Thank you for help!
<operand xmlns:ns8="https://adwords.google.com/api/adwords/rm/v201806" xsi:type="ns8:ExpressionRuleUserList">
public function createCustomIntentCriterion(array $data)
{
$operations = [];
foreach ($data as $item) {
if (!isset($item['AdGroupId'])) {
throw new AdWordsClientException('AdGroupId is not set');
}
if (!isset($item['CustomIntentId'])) {
throw new AdWordsClientException('CustomIntentId is not set');
}
$userListCriterion = new CriterionCustomIntent();
$userListCriterion->setCustomIntentId($item['CustomIntentId']);
$adGroupCriterion = new BiddableAdGroupCriterion();
$adGroupCriterion->setAdGroupId($item['AdGroupId']);
$adGroupCriterion->setCriterion($userListCriterion);
$operations[] = new AdGroupCriterionOperation(Operator::ADD, null, $adGroupCriterion);
}
return $this->mutateOperations($operations);
}
$operations = [];
foreach ($data as $item) {
if (!isset($item['AdGroupId'])) {
throw new AdWordsClientException('AdGroupId is not set');
}
if (!isset($item['CustomIntentId'])) {
throw new AdWordsClientException('CustomIntentId is not set');
}
$userListCriterion = new CriterionCustomIntent();
$userListCriterion->setCustomIntentId($item['CustomIntentId']);
$adGroupCriterion = new BiddableAdGroupCriterion();
$adGroupCriterion->setAdGroupId($item['AdGroupId']);
$adGroupCriterion->setCriterion($userListCriterion);
$operations[] = new CustomAffinityOperation(Operator::ADD, null, $adGroupCriterion);
}
return $this->mutateOperations($operations);
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><ns2:ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/rm/v201806" xmlns="https://adwords.google.com/api/adwords/cm/v201806"><requestId>00056f8b200ebf800a81ed01ae020b82</requestId><serviceName>CustomAffinityService</serviceName><methodName>mutate</methodName><operations>1</operations><responseTime>586</responseTime></ns2:ResponseHeader></soap:Header><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>[RequiredError.REQUIRED @ operations[0].operand.name]</faultstring><detail><ns2:ApiExceptionFault xmlns="https://adwords.google.com/api/adwords/cm/v201806" xmlns:ns2="https://adwords.google.com/api/adwords/rm/v201806"><message>[RequiredError.REQUIRED @ operations[0].operand.name]</message><ApplicationException.Type>ApiException</ApplicationException.Type><errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="RequiredError"><fieldPath>operations[0].operand.name</fieldPath><fieldPathElements><field>operations</field><index>0</index></fieldPathElements><fieldPathElements><field>operand</field></fieldPathElements><fieldPathElements><field>name</field></fieldPathElements><trigger></trigger><errorString>RequiredError.REQUIRED</errorString><ApiError.Type>RequiredError</ApiError.Type><reason>REQUIRED</reason></errors></ns2:ApiExceptionFault></detail></soap:Fault></soap:Body></soap:Envelope>
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://adwords.google.com/api/adwords/cm/v201806" xmlns:ns2="https://adwords.google.com/api/adwords/rm/v201806"><SOAP-ENV:Header><ns2:RequestHeader><ns1:clientCustomerId>***</ns1:clientCustomerId><ns1:developerToken>REDACTED</ns1:developerToken><ns1:userAgent>unknown (AwApi-PHP, googleads-php-lib/35.2.0, PHP/5.6.31-1~ubuntu14.04.1+deb.sury.org+1)</ns1:userAgent><ns1:validateOnly>false</ns1:validateOnly><ns1:partialFailure>false</ns1:partialFailure></ns2:RequestHeader></SOAP-ENV:Header><SOAP-ENV:Body><ns2:mutate><ns2:operations><ns1:operator>ADD</ns1:operator><ns2:operand/></ns2:operations></ns2:mutate></SOAP-ENV:Body></SOAP-ENV:Envelope>
Array
(
[0] => Array
(
[Id] => 2610756
[Status] => ENABLED
[Name] => Test Custom Audience 3
[Type] => CUSTOM_INTENT
[Description] => Test Custom Audience 3 created at 08:57:48 26:06:2018
[Tokens] => Array
(
[0] => Array
(
[CustomAffinityId] => 2610756
[CustomAffinityTokenId] => 22592718
[TokenType] => URL
[Parameter] => rere.com
)
)
)
)
[['AdGroupId' => ***, 'CustomIntentId' => 2610756]];
$operations
Array
(
[0] => Google\AdsApi\AdWords\v201806\cm\AdGroupCriterionOperation Object
(
[operand:protected] => Google\AdsApi\AdWords\v201806\cm\AdGroupCriterion Object
(
[adGroupId:protected] => ***
[criterionUse:protected] =>
[criterion:protected] => Google\AdsApi\AdWords\v201806\cm\CriterionCustomIntent Object
(
[customIntentId:protected] => 2610756
[id:protected] =>
[type:protected] =>
[CriterionType:protected] => CUSTOM_INTENT
[parameterMap:Google\AdsApi\AdWords\v201806\cm\Criterion:private] => Array
(
[Criterion.Type] => CriterionType
)
)
[labels:protected] =>
[forwardCompatibilityMap:protected] =>
[baseCampaignId:protected] =>
[baseAdGroupId:protected] =>
[AdGroupCriterionType:protected] =>
[parameterMap:Google\AdsApi\AdWords\v201806\cm\AdGroupCriterion:private] => Array
(
[AdGroupCriterion.Type] => AdGroupCriterionType
)
)
[exemptionRequests:protected] =>
[operator:protected] => ADD
[OperationType:protected] =>
[parameterMap:Google\AdsApi\AdWords\v201806\cm\Operation:private] => Array
(
[Operation.Type] => OperationType
)
)
)
$userListCriterion->setCriterionType(CriterionType::CUSTOM_INTENT);
$userListCriterion->setCriterionType(CriterionType::CUSTOM_INTENT);
<ns2:mutate><ns2:operations><ns1:operator>ADD</ns1:operator><ns2:operand/></ns2:operations></ns2:mutate>
<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""><soap:Header><ns2:ResponseHeader xmlns:ns2=""https://adwords.google.com/api/adwords/rm/v201806"" xmlns=""https://adwords.google.com/api/adwords/cm/v201806""><requestId>00057017946dc9980a0dc447e2010d3a</requestId><serviceName>CustomAffinityService</serviceName><methodName>mutate</methodName><operations>1</operations><responseTime>439</responseTime></ns2:ResponseHeader></soap:Header><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>[RequiredError.REQUIRED @ operations[0].operand.name]</faultstring><detail><ns2:ApiExceptionFault xmlns=""https://adwords.google.com/api/adwords/cm/v201806"" xmlns:ns2=""https://adwords.google.com/api/adwords/rm/v201806""><message>[RequiredError.REQUIRED @ operations[0].operand.name]</message><ApplicationException.Type>ApiException</ApplicationException.Type><errors xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""RequiredError""><fieldPath>operations[0].operand.name</fieldPath><fieldPathElements><field>operations</field><index>0</index></fieldPathElements><fieldPathElements><field>operand</field></fieldPathElements><fieldPathElements><field>name</field></fieldPathElements><trigger></trigger><errorString>RequiredError.REQUIRED</errorString><ApiError.Type>RequiredError</ApiError.Type><reason>REQUIRED</reason></errors></ns2:ApiExceptionFault></detail></soap:Fault></soap:Body></soap:Envelope>
/**
* $data example:
* [
* 'test' => 'www.test.com',
* 'test 2' => 'www.test2.com',
* ]
*
* @param array $data
* @param string $audienceName
* @return mixed
*/
public function addCustomIntentList(array $data, $audienceName)
{
$keywordsList = new CustomAffinity();
$keywordsList->setName($audienceName);
$keywordsList->setDescription(
$audienceName . ' created at ' . date('Y-m-d H:i:s')
);
$keywordsList->setType(
CustomAffinityType::CUSTOM_INTENT
);
$keywordsList->setTokens(self::createTokensList($data));
$operation = new CustomAffinityOperation();
$operation->setOperand($keywordsList);
$operation->setOperator(Operator::ADD);
return $this->mutateOperations([$operation], 'getEntries');
}
/**
* Create a intent list rule composed of keywords/urls
* @param array $data
*
* @return \Google\AdsApi\AdWords\v201806\rm\CustomAffinityToken[] $tokens
*/
private static function createTokensList(array $data)
{
$items = [];
foreach ($data as $name => $ruleItem) {
$stringKey = new CustomAffinityToken();
$stringKey->setParameter($ruleItem);
$stringKey->setTokenType(CustomAffinityTokenTokenType::URL);
$stringKey->setCustomAffinityId(1);
$items[] = $stringKey;
}
return $items;
}
/**
* $data example:
* [
* 'AdGroupId' => 12345,
* 'CustomIntentId' => 67890,
* ]
*
*
* @param array $data
* @return array
* @throws AdWordsClientException
*/
public function createCustomIntentCriterion(array $data)
{
$operations = [];
foreach ($data as $item) {
if (!isset($item['AdGroupId'])) {
throw new AdWordsClientException('AdGroupId is not set');
}
if (!isset($item['CustomIntentId'])) {
throw new AdWordsClientException('CustomIntentId is not set');
}
$intentListCriterion = new CriterionCustomIntent();
$intentListCriterion->setCustomIntentId($item['CustomIntentId']);
$intentListCriterion->setCriterionType(CriterionType::CUSTOM_INTENT);
$adGroupCriterion = new BiddableAdGroupCriterion();
$adGroupCriterion->setAdGroupId($item['AdGroupId']);
$adGroupCriterion->setCriterion($intentListCriterion);
$operation = new AdGroupCriterionOperation();
$operation->setOperand($adGroupCriterion);
$operation->setOperator(Operator::ADD);
$operations[] = $operation;
}
return $this->mutateOperations($operations);
}