ServiceNow email notification with embeded survey - dom

I have seen other developers create an email notification and embed the first question of the survey. https://community.servicenow.com/community?id=community_question&sys_id=32f20ba1dbd8dbc01dcaf3231f961948
In my case, I am sending 5 Smiley faces from very Dissatisfied(1) to Very Satisfied(5). Each smiley face has a rating/score when the client clicks on it. when it is clicked, I want the survey rating to be populated to the corresponding rating on the survey form and then allow the user to complete the remaining questions.
I have the notification working and each smiley has the url link to the survey with appropriate grade parameter.
I have no experience with gelly or DOM.
Can anyone share appropriate code that I can use to accomplish this? Or lead me in the right direction?
It is greatly appreciated.
Notification Email

So this sounds a lot like this ask. I answered it and posted about it on my blog here.
Pretty much you would need to make the links dynamically in the email with url parameters, and handle redirection if any or the message; This could work if you links were in the following format;
https://instance.service-now.com/custom_survey_response.do?response=1&incident=INC12345
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<g2:evaluate var="jvar_unwrapped_url" jelly="true">
var currentUser = gs.getUserID();
var incidentFromURL = RP.getParameterValue('incident');
var responseFromURL = RP.getParameterValue('response');
var link = '';
var incident = new GlideRecord('incident');
if(incident.get('number', incidentFromURL)) { //found incident
// query survey tables, and do an insert on appropriate tables
// currentUser is string of user sys_id,
// incident is gliderecord of incident
// responseFromURL is the numeric value set by the url param in your notification
}
</g2:evaluate>
${gs.getMessage("Thanks for your response")}
</j:jelly>

Related

Capture HTML Form Responses in Google Sheets and send a Confirmation Email to the Form Submitter

I want the script to send the created html email template email.html to the person who last submitted the form.
Below is the success message I get in the console:
Below is the actual email that is received by the person who submits the form:
The email.html is formatted correctly and appears perfectly when sent manually.
I hope this is reprex enough.
EDIT: Maybe it's easier if I include the code
function sendEmail () {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();
var data = ss.getRange(lr,3);
var email = data.getValue();
var message = HtmlService.createTemplateFromFile('email');
var subject = "Test Subject"
GmailApp.sendEmail(email,subject, message);
}
It's not clear why you are using HtmlService.createTemplateFromFile, but from the image it's clear there at least one error, the script misses two methods:
HtmlService.HtmlTemplate.evaluate() to evaluate the Templated HTML
HtmlService.HtmlOutput.getContent() to get the HTML from the HtmlService.HtmlOutput object returned by the previous method.
Another option that looks to be an error is the use of GmailApp.sendEmail(string,string,string) method, as the third parameter should be a string to be used as the email plain text content. If you want to pass HTML, instead use GmailApp.sendEmail(string,string,string, Object)
Related
Emailing Google Sheet range (with or without formatting) as a HTML table in a Gmail message
Sending an email in HTML and plain with a Gmail Apps Script
Google script inject html into html email
References
https://developers.google.com/apps-script/guides/html
https://developers.google.com/apps-script/guides/html/templates
https://developers.google.com/apps-script/reference/gmail/gmail-app#sendEmail(String,String,String)

Passing data between form views in Pyramid

I'm making a project in pyramid framework, so i have a view which have a form in it with 2 input type texts and a submit button.
The form is a post method, so im getting them with a POST request.
I want to send them to a new view and display them on the screen.
meaning:
on 0.0.0.0:6543 is the form on first view.
I want to display the values the user insert in the input on 0.0.0.0:6543/here
I tried with HTTPfound but i guess im missing an understanding on how to really pass the variables.
Please help me...
The easiest way to accomplish is to use sessions.
You need a session backend which stores your data on a server (see pyramid_redis_session). There are also cookie-based session solutions where all data is stored on the client side.
The first view writes all passed over data to a session:
request.session["mydata"] = value
The second view reads data from the session
print(request.session["mydata"])
Another way to pass the data from one view to another is via the URL. This does not require server-side support, unlike sessions. Also, it's RESTful ;)
return HTTPFound('/here?greeting=Hello&subject=World')
In your second view you then simply get the variables from request.GET:
greeting = request.GET.get('greeting', '')
subject = request.GET.get('subject', '')
# pass the data to the template
return {
"greeting": greeting,
"subject": subject
}
Regarding your comment: You can't use HTTPFound with POST. You can, however, directly submit your form to /here using <form method="post" action="/here" ...>. In this case you'll be able to access the data using request.POST.get('greeting').

Interaction between google mail and Google Sheets

I want to know if there is an application that can allow an interaction between Google Mail and a Google Sheet.
I explain myself :
I receive many e-mail from online forms and all the email are similar with the inormations about the customer I have to contact. I want to receive all the form into a Google Sheets that I can manage like a CRM.
Thank you for your help.
Regards,
Steve
There are services that can assist with this and you can use custom scripts also. It can also depend on what type of platform you're using for the contact form.
IFTTT | Zapier | Script
If the data is correctly formatted this one is an easy script to do exaclty that.
In google sheets, Tool >Script Editor >
function sendEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(' List');
var last = sheet.getLastRow();
for(var i=2;i<last+1;i++){}
var firstName = sheet.getRange(i, 1).getValue();
var email = sheet.getRange(i, 4).getValue(); // the second value is the column numbers , from left to right 1 to all
var message = 'Hola '+firstName+', message'; // Replace "Message" with your meesage and if you need to break lines use /n at the start of the new line
GmailApp.sendEmail(email, 'MPFC Schedule Assistant Bot',message);
}

titanium multiple recipients email dialog

im using titanium and need to send an email to multiple recipients. the official docs only show how to send to one individual email address.
can someone please give a more concrete example how the getToRecipients and setToRecipients methods are applied correctly so that an email is sent to multiple recipients?
https://developer.appcelerator.com/question/149943/emaildialog-gettorecipients-does-not-work
i need to pass an array (contacts) to the emailDialog.ToRecipients property:
["email#example.net","email2#example.net"]
the code below does not work with this error message (ive also tried it unsuccessfully without the "[]" in setToRecipients):
Basic functions[2807:70b]
["email#example.net","email2#example.net"]is not a valid email
address.
var emails = JSON.stringify(contacts);
var emailDialog = Ti.UI.createEmailDialog();
emailDialog.setToRecipients([emails]);
emailDialog.subject = "Hello from Titanium";
emailDialog.messageBody = '<b>Appcelerator Titanium Rocks!</b>';
emailDialog.open();
thx for any info on this!
Have you tried this?
emailDialog.setToRecipients(contacts);
The Appcelerator Documentation says that EmailDialog.toRecipients is an String [].
See u!
Why do you pass your contacts through JSON.stringify and then put it inside array with one element?
EmailDialog.setToRecipients method requires array of strings, and every single one string should be proper email address. To make it work change your code into:
var emailDialog = Ti.UI.createEmailDialog();
emailDialog.setToRecipients(contacts);
emailDialog.subject = "Hello from Titanium";
emailDialog.messageBody = "<b>Appcelerator Titanium Rocks!</b>";
emailDialog.open();
I'm assuming that contacts variable contains this array (based on your error message):
var contacts = ["email#example.net","email2#example.net"];

Sending HTML email from Joomla! component

I am developing a Joomla!3.0/3.1 component that allows people to book a golf lesson online. When they complete the booking and process paypal payment, I want to send them a receipt/confirmation email.
I can do this fine and send the information in html or plain text format. However I don't like the fact that I now have view (email content) data within my controller code.
Is it possible to have a sort of template view file which can be parsed and sent as the contents instead? or am I stuck with it in my code?
Thanks,
Chris
On admin side create a section for editing your email template with Joomla's default editor
you an create an editor on the backend and open an html file inside that, for changing the styles ,formats content etc for users.
keep your template file as an HTML file on server and email sending time something like below.
function send_mail_account_pages($email_title,$greeting_text,$subject,$email_content,$user_email){
$config = JFactory::getConfig();
$data['fromname'] = $config->get('fromname');
$data['mailfrom'] = $config->get('mailfrom');
$data['sitename'] = $config->get('sitename');
$path = JPATH_BASE."/email_tmpl/";
$fp = fopen($path."email_tmpl.html","r");
$fsize = filesize($path."email_tmpl.html");
$fcontent = fread($fp,$fsize);
fclose($fp);
$date_format = date("M.d, Y");
$fcontent = str_replace("{email_page_title}",$email_title,$fcontent);
$fcontent = str_replace("{date}",$date_format,$fcontent);
$fcontent = str_replace("{greeting_text}",$greeting_text,$fcontent);
$fcontent = str_replace("{email_content}",$email_content,$fcontent);
$fcontent = str_replace("{thanks_text}",THANKS_TEXT,$fcontent);
$return = JUtility::sendMail($data['mailfrom'], $data['fromname'], $user_email, $subject, $fcontent,1);
}
This way you can make admin users to give access to change the template styles make sure admin users do not edit the {place holders}.
Hope its helps..
Add a configuration field to your component of type textarea or editor, and let the user write the email template. You should explain which tokens are available or at least provide a default text, such as
Dear {USERNAME},
today I received {NUM_MESSAGES} messages on your behalf,
and your profile has been viewed {NUM_PROFILEVIEWS} times.
Then simply replace the {TOKENS} in your code with str_replace.