I’m doing a basic automation with scheduled reminders: I want to send a survey to every one where a certain activity is completed. For the survey I use a nice third party app: surveypal.com. As I want to personalise the survey, I need personal data from civi to surveypal to identify the response.

Surveypal has nice documentation on how to do this. The url send to a potential respondent should look like:

https://my.surveypal.com/app/form/ext?_d=0&_sid=261570634&_k=2kpdVu0Y20GKuXoMnpsCYQ6c43g82T4PWT29J4Kj5TFRIBltoKRMpAng0p iVLOtX&externalId=[ID]&meta=[{"key":"Gender","value":"Male"},{"key":"Age","value":"15"}]

where sid and k are the id’s of the survey in surveypal, externalID could be the contact_id from civi and the data in meta data could be other civi fields.

Building a message template in civimail, including some tokens for the personal data, this url so becomes:


When sending manually this message template using an individual email (activity -> send an email). This works perfect. Civi does send an email to the particular contact, and the person gets a nice link, participates the survey in surveypal and I have all the response data I need.

But, when I use this same message template to set a scheduled reminder link to an activity, then the email is send automatically correctly, but the url is changed towards something like &meta:[,,,,,,] So no personal data is transferred. The potential respondent gets an error message when clicking the url that the url does not exist.

Any idea’s: what happened, what is wrong? I’m afraid it has something to do with the {} used for tokens in civimail, while used to group data in the surveypal-url.

2 Answers 2


Indeed, seems to be an issue with the reminder trying to read the "for surveypal"...

So you need to "escape" the { } that you want to keep for the end result so they aren't processed by civi and wrongly identified as token.

I think we are using smarty to process the token for the reminders, you can try putting {ldelim} instead of "{" and {rdelim} instead of "}".

Could you try if it works using scheduled reminder?

Unfortunately, civicrm has different ways of parsing the token using different tools (smarty is one way), so you might have one working for "normal" mails and that won't work on another part (reminders), and the workaround is potentially specific for each of these, so it makes the testing a bit more complicated than "just" sending an email.


P.S. It's probably not as user friendly as surveypal, but you can quickly get something working with webform and webform_civicrm to make simple surveys directly integrated in your site, including being able to store the response as an activity of the contact.

  • Thanks, Xavier. Indeed that worked using this {ldelim} - so many thanks! Commented Oct 14, 2015 at 20:06

I think the bulk mail changes URL automatically to be a redirect, so that you could track mail click on URL.

You could achieve what you want by triggering CiviRules (together with the Email API) to send the same email, but as a transactional (single) email instead.

  • indeed, with civiRules and the API a lot more could be done (that is why I helped developing civiRules...). But my trail was actually a quick solution do start something really quickly whil still testing and builing bigger stuff with civiRules and the API Commented Oct 14, 2015 at 20:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.