Even if you have the Message Center module included in your Adobe Campaign 6.1 Cloud hosting contract, it could be quite expensive, because AC Cloud hosting fees are usually made on volume sent : so please check again carefully with your Adobe contact what costs these 12 millions of mails per week for your company, using Message Center.
And as Amit said, you may consider using alternative solution as Amazon SES if you don't need sophisticated features (you don't personalisation in your use case, you don't use html integration/customization blocks, nor interaction module).
But I do recommend having a look to Message Center if you think having other needs, other applications needing to have a transactional messaging system.
In your current use case, your recommendation engine will call the standard SOAP web service with some content parameters, the email address, the subject title and the html body. (Well, you should also have a parameter for raw text body, except if you use the standard possibility to generate txt from html, but usually better to do it yourself).
The solution of using JS (submitNotification) directly in a workflow of your marketing instance, while working technically speaking, is not adapted to large volumes to send because it would impact too much your standard campaigns management performance, as Amit Florent and me pointed out.
Hey Jean / VendimB
I've been following this thread and I just want to make understand.
If VendimB has an app that will be making a standard SOAP call with all information (email address, subject, etc) and passing that into Adobe Campaign on a regular basis. Campaign shouldn't have any issues handling that out of the box even if the volume is within 500K batches correct? or are you suggesting that Message Center be used to handle the SOAP call?
It is not a problem of SOAP call, because in allcases (Message Center or specific workflow of batch import/or dedicated WS method call), at the end there is call to submitNotification method call.
But there are 12 M of mails per week, so approximately 1.7 M per day, so it is enough large. Hence if Vendib needs real-time response time, he should use a dedicated instance, to guarantee realtime performance.
Message Center solution having distinct MTA servers than the default marketing instance, it can ensure better realtime response time, and moreover he will get other services as monitoring etc. And VendimB has already the module license included in his contract, so no problem for him (except to check the volume to send with his Adobe sales contact).
In the case of VendimB would not need realtime response time and if he could leverage the recommandation delivery sending in batch mode by importing a file of contact/email contents, it is like a standard campaign, and so he doesn't need to use submitNotification and he can generates a standard targerData personalisation and standard recurrent or continuous delivery.
(Not to mention that Message Center has also a batch mode for rcp Events).
If the volume would be, let say, about 10.000 mails per day, it could be considered to use same instance, to my mind, and have more or less acceptable response time with WS calling submitNotification directly.
Because implementing submitNotification is very easy, VendimB could have a try, and compares it to Message Center functionalities (and Amazon SES costs/functionalities suggested by Amit, as well).
do you have any example code on calling the soap just to push emails? I can look the documentation and see but I was just wandering if any of you have some sample to show how to send HTML Email content and receipient to SOAP service to send the email
So many cases that it is a bit difficult to give you correct advices and exemples codes depend on choices made.
Perhaps do you need some help from Adobe Campaign consultant team or AC integrator companies.
But let's try to sum up the different cases.
True real-time needed
Your source application and/or recommandation engine calls in real-time a Web Service (Adobe Campaign SOAP Call) for every message to an user, it means 1 SOAP call "sends" 1 message delivery to this contact.
So the WS response time must be excellent.
It means usually, for a medium volume of WS calls per day, let say, a few hundred of thousands (but it is up to Adobe company or Integrator companies that would accompany you to confirm it, even it is written as is in Adobe Campaign Message Center documentation).
It means also that you should have dedicated MTA servers/instance for this realtime behavior, not using the marketing instance.
Technically speaking, the html content (or the raw text content), in your case, is a WS parameter (XML for rtEvent Message Center, and XML or JSON for direct call to SOAP Adobe Campaign services).
In your use case, the delivery template contains nothing else than the personalisation code passed by parameter for the html content (as well for the raw text content).
Please refer to Message Center documentation if you want to know the development involved.
In case of small volume (not your case!) not using Message Center, the basic principles are the same:
1. a Web Service (you define the method to call in the methods section of the dedicated delivery mapping to use, as better way to implement it), that stores calls parameter and creates lines in the mapping target table (recipient or specifically dedicated schema)
2. there is a workflow that basically loop regularly (every 1 up to 3 minutes) on the lines created in the mapping target, and then do that kind of things:
3. the template called must be a Continuous delivery
But again, because Message Center is included in your contract, it is far better to use it than specific coding.
Batch mode only needed
You can manage high volume (as millions of mails) with your marketing instance, because all the messages to your contacts are sent in "slices", using the all the power of Adobe Campaign. Defining waves, using recurrent or continuous deliveries (to my mind continous is better).
Basically, an easy solution is to create a workflow with:
an activity to load the template
an activity to load the target contacts list
So for instance, the delivery content can be set by your JS loop either by using one of this method:
Regarding the targets list load activity, Florent has indicated in his post the different ways to do it, and I gave it also hereinbefore.
Hope I could help you enough for your architecture choice.
thanks for the explanation above. I think I am still a little confuse as the options above are more of if you are making the calls withing the campaign. My initial question and the requirements are as follow
I have an application that based on your preferences generate ( formulate) and html email for each user ( since everyone choices are different).
there is a Jenkins job that run weekly that will kick out this content to an Email provider ( in this case I want to use Adobe campaign so we can track the bounce back/opening etc)
what is the approach to accomplish that from the external call to have adobe campaign do the email sending/delivery?
do we need to set up any template in the campaign in this scenario or the html content that the job sends is enough to pass to some SOAP? the JSAPI seems to be used only internal within workflow and in my requirement the application will push ( call the campaign)
let me know if anyone can assist
Eventually you just gave more information as requested so we could help you better:
You wrote that "Jenkins job that run weekly".
So it means you don't need real-time behavior but batch mode only (the 2nd use case of my post of 1st Sep).
So please firstly, evaluate the need to do the task by web calls (SOAP calls), so 12 millions of calls on 1 day of the week, compared to a batch load of html contents on a file server acceded by Adobe Campaign applicative server (either through FTP or shared folders or Amazon S3, whatever you preferred).
Due to your use case, I strongly advise to use file folders rather than SOAP calls in that short time for such huge volume.
And so, you can do all the stuff with your marketing instance, without Message Center needed (even though there is a batch mode for rtEvents as well).
Please read again carefully what I wrote on 1st Sep in "batch mode only".
Because it doesn't seem clear, I suggest you first to modify your Jenkins job in order that it writes the html personalized data in one file per user message, in a dedicated folder.
Then do a workflow to import these html personalized contents into Adobe Campaign:
load the customized/personalized html message (if possible also raw text message, otherwise you will be able to generate with JSAPI method), either by using FTP server so workflow Transfer file activity or by using shared folders so use the Data Collection Import activity in order to load the files from that folder.
Put these different html customized messages in a dedicated table, or use the temporary xml context,as you want (dedicated tables if you want to keep history of messages or do specific reports).
In any case, you have to define the relationship between the html content to the delivery mapping targeted (either NmsRecipient or specific one), so in your workflow the additional data is linked.
Then, your delivery template is quite simple: the body is made of only one line such as <%= targetData.myContent %> that's all.
It is one way to doing that.
It avoids for you complexity of "real-time" behavior, with one call per delivery message, either using Message Center or direct submitNotification method directly.
Hope this helps.
I am trying to send an email using submit delivery method but getting an following error.
09/04/2018 09:35:41 SOP-330011 Error while executing the method 'SubmitDelivery' of service 'nms:delivery'.
09/04/2018 09:35:41 DLV-490051 Failed to analyze delivery (identifier 'unknown').
09/04/2018 09:35:41 DLV-490050 The XML document to add to the scenario does not have a valid format.
09/04/2018 09:35:41 Element 'targetPart' is unknown (see definition of element '/targets' in schema 'Deliveries (nms:delivery)').
Can I pass targets and content inside submit delivery method?
Yes, but please may you create a new ticket with your own code shared, on order to help understand the error for you?
Otherwise with older ticket it could be confusing (other subject.)