syncMObjects
Accepte un tableau de MObjects à créer ou à mettre à jour, jusqu'à 100 par appel, et renvoie le résultat (statut) de l'opération (CREATED, UPDATED, FAILED, UNCHANGED, SKIPPED) et les identifiants Marketo des MObject(s). L’API peut être appelée dans l’un des trois modes de fonctionnement suivants :
- INSERTION - Insérer uniquement les nouveaux objets, ignorer les objets existants
- MISE À JOUR - Mettez uniquement à jour les objets existants, en ignorant les nouveaux objets.
- Pour l’objet de programme, l’API peut uniquement être appelée en mode MISE À JOUR pour ajouter de nouvelles informations de coût de période ou ajouter/mettre à jour des balises/canaux pour les programmes existants. (les balises/canaux doivent déjà être définis : impossible de créer de nouvelles balises/canaux à l’aide de l’API)
- UPSERT - Insérer de nouveaux objets et mettre à jour les objets existants
Les opérations UPDATE et UPSERT utilisent l'ID comme clé. Dans un seul appel API, certaines mises à jour peuvent réussir et d’autres échouer. Un message d’erreur est renvoyé pour chaque échec
Requête
Nom du champ
Obligatoire / Facultatif
Description
mObjectList->mObject->type
Obligatoire
Peut être l’une des valeurs suivantes :
Program
, Opportunity
ou OpportunityPersonRole
mObjectList->mObject->id
Obligatoire
ID de l’objet mobile. Vous pouvez spécifier jusqu’à 100 MObjects par appel.
mObjectList->mObject->typeAttribList->typeAttrib->attrType
Obligatoire
Coût (utilisé uniquement lors de la mise à jour de l’objet MO du programme) Peut être l’un des suivants :
Cost
, Tag
mObjectList->mObject->typeAttribList->typeAttrib->attrList->attrib->name
Obligatoire
Pour Program MObject, les attributs suivants peuvent être transmis en tant que paires nom-valeur. Pour Coût :
Month (Required)
, Amount (Required)
, Id (Cost Id - Optional)
, Note (Optional)
. Pour La Balise/Le Canal : Type (Required)
, Value (Required)
. Pour Opportunity MObject, tous les champs de la sortie de descriptionmobject peuvent être transmis en tant que paires nom-valeur. La liste ci-dessous regroupe tous les champs facultatifs et l’ensemble standard d’attributs. Vous pouvez avoir des champs supplémentaires sur l’objet d’opportunité qui ont été créés par le biais d’une demande d’assistance.- Montant
- CloseDate
- Description
- ExpectedRevenue
- ExternalCreatedDate
- Exercice
- FiscalQuarter
- FiscalYear
- ForecastCategoryName
- IsClosed
- IsWon
- LastActivityDate
- LeadSource
- Nom
- NextStep
- Probabilité
- Quantité
- Étape
- Type
Pour OpportunityPersonRole MObject, vous pouvez fournir tous les champs à partir de la sortie de descriptiveMObject comme paires nom-valeur. L’ensemble standard d’attributs sur OpportunityPersonRole MObject est répertorié ici :
- OpportunityId (Obligatoire)
- PersonId (Obligatoire)
- Correspond à l’ID de personne/contact dans Marketo.
- Rôle (Facultatif)
- ExternalCreatedDate (facultatif)
- IsPrimary (Facultatif)
- Rôle (Facultatif)
Nom du champ
Obligatoire / Facultatif
Description
mObjAssociationList->mObjAssociation->mObjType
Facultatif
Utilisé pour mettre à jour les MObjects Opportunity/OpportunityPersonRole à l’aide de l’identifiant ou de la clé externe d’un objet associé. Les objets associés peuvent être l’un des éléments suivants : Société (pour mettre à jour l’objet MO d’opportunité), Lead (pour mettre à jour l’objet MO d’OpportunityPersonRole), Opportunité (pour mettre à jour l’objet MO d’OpportunityPersonRole)
mObjAssociationList->mObjAssociation->id
Facultatif
L’identifiant de l’objet associé (Lead/Entreprise/Opportunité)
mObjAssociationList->mObjAssociation->externalKey
Facultatif
Attribut personnalisé de l’objet associé
XML de la demande
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
<SOAP-ENV:Header>
<ns1:AuthenticationHeader>
<mktowsUserId>demo17_1_809934544BFABAE58E5D27</mktowsUserId>
<requestSignature>40e6d89bd2f7f0daaddaf150ce7a7ca49788ffe7</requestSignature>
<requestTimestamp>2013-08-05T14:22:45-07:00</requestTimestamp>
</ns1:AuthenticationHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:paramsSyncMObjects>
<mObjectList>
<mObject>
<type>Program</type>
<id>1970</id>
<typeAttribList>
<typeAttrib>
<attrType>Cost</attrType>
<attrList>
<attrib>
<name>Month</name>
<value>2013-06</value>
</attrib>
<attrib>
<name>Amount</name>
<value>2000</value>
</attrib>
<attrib>
<name>Id</name>
<value>153</value>
</attrib>
</attrList>
</typeAttrib>
</typeAttribList>
</mObject>
</mObjectList>
<operation>UPDATE</operation>
</ns1:paramsSyncMObjects>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML de réponse
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/">
<SOAP-ENV:Body>
<ns1:successSyncMObjects>
<result>
<mObjStatusList>
<mObjStatus>
<id>1970</id>
<status>UPDATED</status>
</mObjStatus>
</mObjStatusList>
</result>
</ns1:successSyncMObjects>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Exemple de code - PHP
<?php
$debug = true;
$marketoSoapEndPoint = ""; // CHANGE ME
$marketoUserId = ""; // CHANGE ME
$marketoSecretKey = ""; // CHANGE ME
$marketoNameSpace = "http://www.marketo.com/mktows/";
// Create Signature
$dtzObj = new DateTimeZone("America/Los_Angeles");
$dtObj = new DateTime('now', $dtzObj);
$timeStamp = $dtObj->format(DATE_W3C);
$encryptString = $timeStamp . $marketoUserId;
$signature = hash_hmac('sha1', $encryptString, $marketoSecretKey);
// Create SOAP Header
$attrs = new stdClass();
$attrs->mktowsUserId = $marketoUserId;
$attrs->requestSignature = $signature;
$attrs->requestTimestamp = $timeStamp;
$authHdr = new SoapHeader($marketoNameSpace, 'AuthenticationHeader', $attrs);
$options = array("connection_timeout" => 15, "location" => $marketoSoapEndPoint);
if ($debug) {
$options["trace"] = 1;
}
// Create Request
////////////////////////////////
$params = prepareUpdateProgramRequest();
// -or-
//$params = prepareCreateOpptyRequest();
// -or-
//$params= prepareCreateOpptyPersonRoleRequest();
////////////////////////////////
$soapClient = new SoapClient($marketoSoapEndPoint ."?WSDL", $options);
try {
$leads = $soapClient->__soapCall('syncMObjects', array($params), $options, $authHdr);
}
catch(Exception $ex) {
var_dump($ex);
}
if ($debug) {
print "RAW request:\n" .$soapClient->__getLastRequest() ."\n";
print "RAW response:\n" .$soapClient->__getLastResponse() ."\n";
}
function prepareUpdateProgramRequest() {
$params = new stdClass();
$mObj = new stdClass();
$mObj->type = 'Program';
$mObj->id="1970";
$attrib1 = new stdClass();
$attrib1->name="Month";
$attrib1->value="2013-06";
$attrib2 = new stdClass();
$attrib2->name="Amount";
$attrib2->value="2000";
$attrib3 = new stdClass();
$attrib3->name="Id";
$attrib3->value="153";
$attribList = array ($attrib1, $attrib2, $attrib3);
$costAttrib = new stdClass();
$costAttrib->attrType="Cost";
$costAttrib->attrList = $attribList;
$mObj->typeAttribList= array($costAttrib);
$params->mObjectList = array($mObj);
$params->operation="UPDATE";
return $params;
}
function prepareCreateOpptyRequest() {
$params = new stdClass();
$mObj = new stdClass();
$mObj->type = 'Opportunity';
$attrib1 = new stdClass();
$attrib1->name="Name";
$attrib1->value="Q1 2014";
$attrib2 = new stdClass();
$attrib2->name="Amount";
$attrib2->value="2000";
$attrib3 = new stdClass();
$attrib3->name="Probability";
$attrib3->value="80%";
$attribs = array ($attrib1, $attrib2, $attrib3);
$attribList = new stdClass();
$attribList->attrib = $attribs;
$mObj->attribList = $attribList;
$params->mObjectList = array($mObj);
$params->operation="INSERT";
return $params;
}
function prepareCreateOpptyPersonRoleRequest() {
$params = new stdClass();
$mObj = new stdClass();
$mObj->type = 'OpportunityPersonRole';
$attrib1 = new stdClass();
$attrib1->name="OpportunityId";
$attrib1->value="64";
$attrib2 = new stdClass();
$attrib2->name="PersonId";
$attrib2->value="19";
$attrib3 = new stdClass();
$attrib3->name="Role";
$attrib3->value="Influencer/Champion";
$attribs = array ($attrib1, $attrib2, $attrib3);
$attribList = new stdClass();
$attribList->attrib = $attribs;
$mObj->attribList = $attribList;
$params->mObjectList = array($mObj);
$params->operation="INSERT";
return $params;
}
?>
Exemple de code - Java
import com.marketo.mktows.*;
import java.net.URL;
import javax.xml.namespace.QName;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class SyncMObjects {
public static void main(String[] args) {
try {
URL marketoSoapEndPoint = new URL("CHANGE ME" + "?WSDL");
String marketoUserId = "CHANGE ME";
String marketoSecretKey = "CHANGE ME";
QName serviceName = new QName("http://www.marketo.com/mktows/", "MktMktowsApiService");
MktMktowsApiService service = new MktMktowsApiService(marketoSoapEndPoint, serviceName);
MktowsPort port = service.getMktowsApiSoapPort();
// Create Signature
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String text = df.format(new Date());
String requestTimestamp = text.substring(0, 22) + ":" + text.substring(22);
String encryptString = requestTimestamp + marketoUserId ;
SecretKeySpec secretKey = new SecretKeySpec(marketoSecretKey.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] rawHmac = mac.doFinal(encryptString.getBytes());
char[] hexChars = Hex.encodeHex(rawHmac);
String signature = new String(hexChars);
// Set Authentication Header
AuthenticationHeader header = new AuthenticationHeader();
header.setMktowsUserId(marketoUserId);
header.setRequestTimestamp(requestTimestamp);
header.setRequestSignature(signature);
// Create Request
////////////////////////////////
ParamsSyncMObjects request = prepareUpdateProgramRequest();
// -or-
//ParamsSyncMObjects request = prepareCreateOpptyRequest();
// -or-
//ParamsSyncMObjects request = prepareCreateOpptyPersonRoleRequest();
////////////////////////////////
SuccessSyncMObjects result = port.syncMObjects(request, header);
JAXBContext context = JAXBContext.newInstance(SuccessSyncMObjects.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(result, System.out);
}
catch (Exception e) {
e.printStackTrace();
}
}
private static ParamsSyncMObjects prepareUpdateProgramRequest() {
ParamsSyncMObjects request = new ParamsSyncMObjects();
request.setOperation(SyncOperationEnum.UPDATE);
MObject mobj = new MObject();
mobj.setType("Program");
mobj.setId(1970);
TypeAttrib typeAttrib = new TypeAttrib();
typeAttrib.setAttrType("Cost");
Attrib attrib = new Attrib();
attrib.setName("Month");
attrib.setValue("2013-06");
Attrib attrib2 = new Attrib();
attrib1.setName("Amount");
attrib1.setValue("2000");
Attrib attrib3 = new Attrib();
attrib1.setName("Id");
attrib1.setValue("153");
ArrayOfAttrib attribList = new ArrayOfAttrib();
attribList.getAttribs().add(attrib);
attribList.getAttribs().add(attrib2);
attribList.getAttribs().add(attrib3);
typeAttrib.setAttrList(attribList);
ArrayOfTypeAttrib typeAttribList = new ArrayOfTypeAttrib();
typeAttribList.getTypeAttribs().add(typeAttrib);
mobj.setTypeAttribList(typeAttribList);
ArrayOfMObject objList = new ArrayOfMObject();
objList.getMObjects().add(mobj);
request.setMObjectList(objList);
return request;
}
private static ParamsSyncMObjects prepareCreateOpptyRequest() {
ParamsSyncMObjects request = new ParamsSyncMObjects();
request.setOperation(SyncOperationEnum.INSERT);
MObject mobj = new MObject();
mobj.setType("Opportunity");
Attrib attrib = new Attrib();
attrib.setName("Name");
attrib.setValue("Q1 2014");
Attrib attrib2 = new Attrib();
attrib1.setName("Amount");
attrib1.setValue("2000");
Attrib attrib3 = new Attrib();
attrib1.setName("Probability");
attrib1.setValue("80%");
ArrayOfAttrib attribList = new ArrayOfAttrib();
attribList.getAttribs().add(attrib);
attribList.getAttribs().add(attrib2);
attribList.getAttribs().add(attrib3);
mobj.setAttribList(attribList);
ArrayOfMObject objList = new ArrayOfMObject();
objList.getMObjects().add(mobj);
request.setMObjectList(objList);
return request;
}
private static ParamsSyncMObjects prepareCreateOpptyPersonRoleRequest() {
ParamsSyncMObjects request = new ParamsSyncMObjects();
request.setOperation(SyncOperationEnum.INSERT);
MObject mobj = new MObject();
mobj.setType("OpportunityPersonRole");
Attrib attrib = new Attrib();
attrib.setName("OpportunityId");
attrib.setValue("64"); // Id of the opportunity created earlier
Attrib attrib2 = new Attrib();
attrib1.setName("PersonId");
attrib1.setValue("19");
Attrib attrib3 = new Attrib();
attrib1.setName("Role");
attrib1.setValue("Influencer/Champion");
ArrayOfAttrib attribList = new ArrayOfAttrib();
attribList.getAttribs().add(attrib);
attribList.getAttribs().add(attrib2);
attribList.getAttribs().add(attrib3);
mobj.setAttribList(attribList);
ArrayOfMObject objList = new ArrayOfMObject();
objList.getMObjects().add(mobj);
request.setMObjectList(objList);
return request;
}
}
Exemple de code - Ruby
require 'savon' # Use version 1.0 Savon gem
require 'date'
mktowsUserId = "" # CHANGE ME
marketoSecretKey = "" # CHANGE ME
marketoSoapEndPoint = "" # CHANGE ME
marketoNameSpace = "http://www.marketo.com/mktows/"
#Create Signature
Timestamp = DateTime.now
requestTimestamp = Timestamp.to_s
encryptString = requestTimestamp + mktowsUserId
digest = OpenSSL::Digest.new('sha1')
hashedsignature = OpenSSL::HMAC.hexdigest(digest, marketoSecretKey, encryptString)
requestSignature = hashedsignature.to_s
#Create SOAP Header
headers = {
'ns1:AuthenticationHeader' => { "mktowsUserId" => mktowsUserId, "requestSignature" => requestSignature,
"requestTimestamp" => requestTimestamp
}
}
client = Savon.client(wsdl: 'http://app.marketo.com/soap/mktows/2_3?WSDL', soap_header: headers, endpoint: marketoSoapEndPoint, open_timeout: 90, read_timeout: 90, namespace_identifier: :ns1, env_namespace: 'SOAP-ENV')
#Create Request
request = {
:m_object_list => {
:m_object => {
:type => "Program",
:id => "1970",
:type_attrib_list => {
:type_attrib => {
:attr_type => "Cost",
:attr_list => {
:attrib => {
:name => "Month",
:value => "2013-06" },
:attrib! => {
:name => "Amount",
:value => "2000" },
:attrib! => {
:name => "Id",
:value => "153" }
}
}
}
}
},
:operation => "UPDATE"
}
response = client.call(:sync_m_objects, message: request)
puts response
recommendation-more-help
bb269a6d-047a-4bf7-9acd-23ad9a63dc59