Overview
Shortcodes are keywords that serviceminder uses to insert pieces of information into email and print templates. For example, an organization may want the service agent's name and appointment date/time included on an email template. So the same template can be used, and the different service agents and appointments will be diplayed any time that template is used. These keys are so useful for automating business processes!
Organization Shortcodes and Contact & Managed By Shortcodes can be used with any template in serviceminder. All other Shortcodes are restricted to templates that are the corresponding "type." For example, Appointment Shortcodes can only be used on Appointment-type templates (i.e., Appointment Renewals, Appointment Tickets, Appointment Cover, etc).
This article will review:
- Organization Shortcodes
- Contact and Managed By Shortcodes
- Appointment Shortcodes
- Part Shortcodes
- Proposal Shortcodes
- Invoice Shortcodes
- Recurring Billing Shortcodes
- Installment Payment Shortcodes
- Custom Field Shortcodes
- Ad Hoc Email Writing Shortcodes
- Taskboard Item Shortcodes
- Shortcode Filters
- Liquid Models
- FAQs
Organization Shortcodes
These largely pull from Control Panel> Settings and can be used with any template.
Shortcode | Description |
---|---|
{organization.name} | |
{organization.email} | |
{organization.phone} | |
{organization.textingnumber} | The formatted texting number. |
{organization.businessnumber} | |
{organization.service_phone} | |
{organization.address1} | |
{organization.address2} | |
{organization.city} | |
{organization.state} | |
{organization.zip} | |
{organization.fullwarehouseaddress} | |
{organization.warehouseaddress1} | |
{organization.warehouseaddress2} | |
{organization.warehousecity} | |
{organization.warehousestate} | |
{organization.warehousezip} | |
{organization.warehousecitystatezip} | |
{organization.vcard-url} | A URL that can be used to download the organization's contact card (vcard format) |
{organization.account-manager.name} | The name of the organization's account manager (if therre is now -- empty string if not) |
{current_date} | Displays today's date (MM/DD/YYYY). |
{organization.region} | Your organization's assigned Region name |
{organization.global_appointment_flash} | The Global Appointment Flash |
{logo} | Displays your organization's logo if it's set. You can set this on your organization's settings page here. |
{brand_logo} | Only available if your organization belongs to a branding. Will be replaced with your branding's logo.. |
{organization.website} | The configured URL for your website. |
{organization.facebook_url} | The configured URL for your Facebook page. |
{organization.instagram_url} | The configured URL for your Instagram page. |
{organization.thumbtack_url} | The configured URL for your Thumbtack page. |
{organization.twitter_url} | The configured URL for your Twitter page. |
{organization.youtube_url} | The configured URL for your YouTube page. |
{organization.houzz_url} | The configured URL for your Houzz page. |
{organization.pinterest_url} | The configured URL for your Pinterest page. |
{organization.yelp_url} | The configured URL for your Yelp page. |
{organization.nextdoor_url} | The configured URL for your NextDoor page. |
{organization.homestars_url} | The configured URL for your HomeStars page. |
{organization.google_review_url} | The configured URL for your Goggle review page. |
{organization.facebook_review_url} | The configured URL for your Facebook review page. |
{organization.houzz_review_url} | The configured URL for your Houzz review page. |
{organization.angies_list_review_url} | The configured URL for your Angie's List review page. |
{organization.yelp_review_url} | The configured URL for your Yelp review page. |
{organization.bbb_review_url} | The configured URL for your BBB review page. |
{organization.home_advisor_review_url} | The configured URL for your Home Advisor review page. |
{organization.selfserviceurl} |
The organization self scheduling URL. |
Address Info
serviceminder also has keys to format and collapse your address lines, as if they were being printed on a letter. serviceminder will reserve up to five address lines for formatting. Take this address for example:
- Address 1: 1234 Fake Address Ln
- City: Test City
- State: Some State
- Zip: 00000
This address would reserve the first line for address one, and the second line for city, state, and zip. Your organization's phone number would be placed on line three, and if you have your organization's website set on the settings page, that will be placed on line four. A fifth line will only be made if the address in question has an address two field. In that case, address two will be placed in between address one and city, state, and zip, bringing the total number of lines up to five. Once all is said and done, it should look something like this:
1234 Fake Address Ln
(Address 2 would go here)
Test City, SS 00000
www.myorganizationwebsite.com
(000) 000 - 000
To actually use this in your letters and templates, you would need to use {organization.addressline'*'}. Replace '*' with the address line you want to display. ( would display 'Test City, SS 00000')
Contact and Managed By Shortcodes
These short codes will be available on every template that involves a contact. If you're sending something to a contact, you can be sure that these keys will be allowed. Appointment, invoice, and proposal based templates will all inherit these keys. Note that the first_name and last_name fields are parsed from the Name field, so they may not always produce the expected value depending on the contents.
Codes that are in bold are similar to ones used for information about who the contact is managed by. Simply stick .managedby after contact and before .code. Example: contact.managedby.address1
Shortcode | Description |
---|---|
{name} |
|
{nickname} |
|
{contact.name} |
|
{contact.first_name} |
|
{contact.last_name} |
|
{contact.title} |
|
{contact.companyname} |
|
{contact.email} |
|
{contact.phone} |
|
{contact.altphone} |
|
{contact.leadsource} |
|
{contact.category} |
|
{nextservicedate} |
|
{lastservicedate} |
|
{contact.address1} |
|
{contact.address2} |
|
{contact.city} |
|
{contact.state} |
|
{contact.zip} | Service address zip/postal code |
{contact.community} | Service address community |
{contact.county} | Service address county |
{contact.billingaddressname} |
|
{contact.billingaddress1} |
|
{contact.billingaddress2} |
|
{contact.billingcity} |
|
{contact.billingstate} |
|
{contact.billingzip} |
|
{contact.citystatezip} | City, State Zip |
{fullserviceaddress} | Address 1 | City, State Zip |
{contact.id} | The internal identifier for the contact |
{contact.hash} | A globally unique indentifer that can be used for form completions and contact sharing between organizations. |
{unsubscribe_url} | A URL generated for the contact to unsubscribe from receiving emails in the future. |
{contact.notes_table} | Generates a print-template friendly table with the contact's notes. Intended for print templates only. |
{contact.next_appointment_link} | A link to the next appointment (great to include on Task Boards) |
{contact.next_appointment_summary} | A summary of the next appointment (service and scheduled date/time) |
{contact.next_appointment_date} | Displays a date for the contact's next active appointment |
{contact.next_appointment_time} | Displays a time for the contact's next active appointment |
{contact.next_task_link} | A clickable link to the task |
{contact.next_task_summary} | A summary of the task including the type of task |
{contact.next_task_due} | The task's due date/time |
{contact.refer_url} | The URL to collect referrals. Any referrals will be Referred By this contact. |
{contact.schedule_url} | The URL for a contact to view a summary their current and upcoming appointments and payments. You may include ?p=0 after this shortcode to suppress display of the scheduled payments. |
{contact.statement_url} | The URL for a contact to view their Statement on Account and pay all or some of those invoices listed. |
{contact.update_payment_url} | Use this URL to let the contact add or update their card on file. This works in any kind of email. |
{contact.flashmessage} | The contact's Flash message. |
{contact.created_by} | The user that created the contact (or blank if none.) |
{contact.owner_name} | The contact owner's name (or blank if none.) |
{contact.owner_email} | The contact owner's email (or blank if none.) |
{contact.owner_phone} | The contact owner's phone (or blank if none.) |
{contact.routingconstraints} | Any routing constraints configured for this contact. |
{contact.appointments.FIELD NAME GOES HERE} | Display an Appointment-level custom field with an aggregation setting (e.g. Average of all fields on all appointments). |
You can also generate address lines in the same manner as your organization's address lines. Instead of {organization.addressline1}, you'd use {contact.addressline1}.
Appointment Shortcodes
This includes the Appointment Renewal, Appointment Ticket, and Appointment Cover print templates, as well as the Appointment Complete, Appointment Confirmation, and Appointment Renewal email templates.
Shortcode | Description |
---|---|
{appointment.date} | The date and time of the appointment. |
{appointment.date_approximate} | Formats the date to a more generalized statement. (Monday morning, Thursday evening, etc.) |
{appointment.time} | The time of the appointment. |
{service.name} | The name of the service for this appointment. |
{service.description} | The description of the service or service line for this appointment. |
{service_agent.name} | The name of the primary service agent. |
{service_agent.names} | All agents assigned to the appointment. |
{service_agent.email} | The agent's email. |
{service_agent.phone} | The service agent's phone number. |
{service_agent.picture} | Generates an HTML table containing the service agent's picture. |
{service_agent.picture_url} | Generates a URL pointing to the service agent's picture, if one exists. |
{service_agent.bio} | The text entered into the service agent's Bio field. |
{service_agent.license} | The text entered into the service agent's License field. |
{service_agent.additionalnames} | List of additional agents. |
{service_agent.additional_agents_licenses} | List of additional agents with license numbers included. |
{appointment.scheduled_start} | This displays the date and time that the appointment is scheduled to start. |
{appointment.scheduled_start_short} | Similar to scheduled_start, but is slightly more friendly to look at. |
{appointment.scheduled_start_date} | This displays only the date and not the time for the scheduled starting date. |
{appointment.drivetime} | Estimated drive time based on preceding appointment's address. |
{appointment.drivemiles} | Calculated distance from preceding appointment's address. |
{appointment.previous_date} | The date of the prior appointment. This will be empty if there is no previous date. |
{appointment.nextservicedate} | The next scheduled date that the associated contact for this appointment is expected to require a service. |
{appointment.is_first_appt} | This will return "Yes" if this is the first appointment of the calendar year. Otherwise it will return "No". |
{appointment.is_last_appt} | This will return "Yes" if this is the last appointment currently scheduled for the calendar year. Otherwise it will return "No". |
{appointment.duration} | How long the appointment is expected to last. |
{appointment.tracking_url} | The URL of a page that can provide live tracking for the client on when the agent(s) will arrive, including a count of the number of appointments ahead of them. It should be used as the HREF value for a link tag. |
{appointment.confirm_url} | The URL of a page that allows a client to confirm the appointment. It should be used as the HREF value for a link tag. |
{appointment.communication_pref_url} | The URL of a page that allows a client to update their communication preferences. This is an appointment-related shortcode so would be appropriate to include in appointment confirmations. It should be used as the HREF value for a link tag. This page supports updating the preferences for just the linked appointment or can also include all future appointments (updating the contact's defaults). |
{appointment.report_url} | The URL of a page that allows a client to view a report on the appointment. It should be used as the HREF value for a link tag. |
{appointment.ical_download_url} | The URL of the iCalendar file that allows a client to download an ICS file to add the appointment to their calendar. It should be used as the HREF value for a link tag. |
{appointment.forms_url} | The URL of a page for ad hoc forms attached to an appointment (since multiple can be attached.) It should be used as the HREF value for a link tag. |
{appointment.signature_image_url} | The url of the signature image taken at the finish of an appointment. |
{appointment.actualstart} | Shows the actual start date/time of the appointment. |
{appointment.actualduration} | The actual duration of the appointment. |
{appointment.actualfinish} | The actual finish date/time of the appointment. |
{appointment.subtotal} | The subtotal of the appointment. |
{appointment.tax} | The tax of the appointment. |
{appointment.price} | The total of the appointment. Will be hidden if you hide pricing from your service agents. |
{appointment.total} | The total of the appointment. Will always display even if pricing is hidden from your service agents. |
{appointment.total_paid} | The total amount paid in deposits or payments made on the invoice thus far. |
{appointment.third-party-url} | The contents of the ThirdPartyUrl value that can be set via the API. |
{appointment.tip_url} | Link that lets the customer pay a tip via a portal. |
{appointment_items_table} | Creates a table that displays the service and parts being used, as well as their prices and total costs. |
{appointment_option_items_table} | Same as appointment_items_table but with an Option name column added. |
{appointment_notes_table} | Similar to the appointment_items_table key, this displays any notes attached to the appointment. |
{appointment.internal_notes} | Includes all appointment notes with no formatting, just a line break between each note. |
{appointment.flash_message} | Flash message on the appointment. |
{appointment.customer_note} | The Customer Notes value entered when finishing an appointment. |
{appointment_cf_table} | Like the other tables, but this one displays any and all custom fields that were used during the appointment, as well as their values. |
{appointment.invoicenumber} | Will display the invoice number should an invoice exist. |
{appointment.job_number} | The contents of the Job Number field on the appointment. |
{appointment.parts_list} | A comma separated list of the unique parts on the appointment. |
{appointment.options_list} | A comma separated list of all options, selected and unselected. |
{appointment.selected_options_list} | All selected options. |
{appointment.unselected_options_list} | All unselected options. |
{appointment.id} | Outputs the internal ID value for the appointment. |
{appointment.contact.*} | Access contact data through the appointment. |
Appointment En Route Shortcodes
Shortcode | Description |
---|---|
{drivetime} | The formatted drive time (e.g., "17 minutes"). |
{arrivaltime} | The full date/time of the estimated arrival. Suitable for using with shortcode filters for math and formatting. |
{appointment.arrival_time} | Just the time portion of the estimated arrival time. |
Appointment Coversheet Shortcodes
Shortcode | Description |
---|---|
{route.date} | The date for the day's route. |
{route.depart_time} | When using Teams and Routing, this is the scheduled depart time. |
{route.return_time} | When using Teams and Routing, this is the scheduled return time. |
Part Shortcodes
These will pull from Control Panel > Parts / Add-Ons.
Shortcode | Description |
---|---|
{part.unit_price} | You can use this in pricing band forumlas, eliminating the need to update pricing formulas when the unit price changes |
Proposal Shortcodes
This includes the Proposal letter template, as well as the Proposal Reminder and Contact Proposal email templates.
Shortcode | Description |
---|---|
{appointment.nextservicedate} |
|
{service.name} |
|
{service.description} |
|
{appointment.duration} |
|
{proposal.subtotal} |
|
{proposal.tax} |
|
{proposal.total} |
|
{proposal.title} |
|
{appointment_items_table} | Functions like its appointment-based counterpart, but with solution prices included. |
{pricing_summary_table} | This will display pricing information based on the selected pricing solutions. |
{appointment_notes_table} | Functions exactly like its appointment-based counterpart. |
{url} | URL for viewing the proposal online |
{proposal.customer_notes} | The Customer Notes section of the proposal |
{proposal.date} | The date of the proposal |
{proposal.accepted_date} | The date the proposal was accepted |
{proposal.expiration-date} | Unformatted expiration date |
{proposal.url} | The URL for viewing the proposal online |
{proposal.pdf_url} | The URL of a PDF version of the proposal |
{proposal.parts_list} | A comma separated list of the unique parts on the proposal. |
{proposal.options_list} | A comma separated list of all options, selected and unselected. |
{proposal.selected_options_list} | All selected options. |
{proposal.unselected_options_list} | All unselected options. |
{proposal.id} | Outputs the internal ID for the proposal |
{proposal.owner_name} | The name of the user who owns the proposal |
{proposal.owner_email} | The owner's email |
{proposal.owner_phone} | The owner's phone (formatted) |
{proposal.deposit_amount} |
|
{proposal.deposit_date} |
|
{proposal.deposit_payment_method} |
|
{proposal.balance_due} | Grand total minus any deposit. |
{proposal.job_number} | The contents of the Job Number field on the proposal. |
{proposal.walkthrough-url} | The URL of the walkthrough form (valid only if a walkthrough template exists). |
{proposal.walkthrough-signature-image-url} | The URL for the image that was captured as part of the walkthrough signature. |
Invoice Shortcodes
This includes the Invoice Reminder letter template, as well as the Contact Invoice and Invoice Reminder email templates.
Shortcode | Description |
---|---|
{invoice.number} |
|
{invoice.job_number} | The contents of the Job Number field on the invoice. |
{invoice.date} |
|
{invoice.subtotal} |
|
{invoice.tax} |
|
{invoice.total} |
|
{invoice.total_due} |
|
{invoice.total_paid} | How much the customer paid. |
{invoice.balancedue} | How much the customer has left to pay. |
{invoice.latest_payment_amount} | The amount of their last payment made on this invoice. |
{invoice.notes} |
|
{invoice.terms} | The Terms for the invoice. |
{receipt_message} | The accept payment "Customer Message" value. |
{invoice_items_table} | Works very similarly to the appointment and proposal versions, but is based off the invoice instead. |
{url} | A link to view the invoice or receipt online |
{invoice.pdf_url} | A link to a PDF version of the invoice or receipt (clicking will download a PDF). |
{invoice.parts_list} | A comma separated list of the unique parts on the appointment. |
{invoice.options_list} | A comma separated list of all options, selected and unselected. |
{invoice.schedule_url} | A URL that will show a contact's schedule related to the invoice. |
{invoice.owner_name} | The name of the user who owns the invoice. |
{invoice.owner_email} | The owner's email. |
Recurring Billing Shortcodes
The following codes may be used by those organization wanting to send Recurring Billing Reminder emails ahead of a recurring billing date.
Shortcode | Description |
---|---|
{recurring_billing.amount} | The amount which will be billed |
{recurring_billing.date} | The date that the client's card/bank account will be charged |
{recurring_billing.name} | This is the name of the recurring billing template, not the name of the contact! |
{recurring_billing.service} | The service name |
An organization must have the Email Campaigns feature active to create these reminders.
Installment Payment Shortcodes
The following codes are used for the Installment Payment Failure, Reminder, and Success templates. In addition to these codes, you also have all Invoice short codes available.
Shortcode | Description |
---|---|
{installment_payment_amount} | The balance due of the installment payment. |
{installment_payment_date} | The due date of the payment. |
{failure_reason} | Only used in the Failure template. |
{installment_payment_retry_message} | A short sentence explaining whether or not the payment will be automatically retried the next day. Only declined payments will be retried. Only used in the Failure template. |
{update_payment_url} | This will output a URL that the contact can use to update their payment information online. Only used in the Failure template. |
{message} | (Success template) A short message thanking the customer for their payment. Includes the payment amount and date and will also inform them of their next scheduled payment date if any. |
{message} | (Reminder template) A small sentence telling the customer when their upcoming payment is due. |
Custom Field Shortcodes
It is also possible to insert custom fields into your print templates. The proper way to insert a custom field is as follows:
Shortcode | Description |
---|---|
{contact.cust_FIELD NAME GOES HERE} |
|
{contact.cust_contactphone3} | Your field name must be stripped of all spaces and entirely lowercase. |
You can do the same thing with any other custom field types. For example, instead of the word 'contact', you would use the word 'appointment' for those type of custom fields.
If you're unsure what the shortcode should be, you can find this on the Custom Field's details page.
Ad Hoc Email Writing Shortcodes
When using the Email menu strip icon to send an ad hoc email to a contact, you have a few additional shortcodes available:
Shortcode | Description |
---|---|
{user.name} | The current user's name |
{user.email} | The current user's email address |
TaskBoard Item Shortcodes
TaskBoard item content can be templated and supports all shortcodes related to the item on the TaskBoard (contacts or proposals). In addition to those, the following shortcodes are available that are specific to the items themselves:
Shortcode | Description |
---|---|
{taskitem.created} | The timestamp the item was added to the TaskBoard |
{taskitem.entered} | The timestamp the item was added to the current state |
Shortcode Filters
Shortcode filters enable additional formatting of the output of shortcodes. You can use filters to change the case of the content, replace text, manipulate date, time and currency formatting. Parameters for filters are separated by colons. To add a filter to a shortcode, use the following syntax:
{shortcode|filter}
You may chain multiple filters together to do additional transformations of the shortcode value, separating each filter with a vertical line.
An example of using this to indicate a range of time for a +/- one hour appointment arrival window would be something like this:
{appointment.scheduled-start|addtime:-1:hour|short_time} - {appointment.scheduled-start|addtime:1:hour|short_time}
Shortcode Filter | Description |
---|---|
addtime |
This takes a raw date/time value and then lets you add hours, minutes, days, etc to the value. Use a negative number to subtract time. |
downcase | This will take the text and covert it to lowercase. |
duration | This will take a numeric duration value in minutes and convert it to our standard xxx hours yyy minutes format. |
friendly | This takes a datetime value and converts it to a relative friendly format, including the day of the week. |
friendly_date |
This takes a date/time value and converts it to a relative friendly format, including the day of the week excluding the time. |
html-encode | This takes the text and propertly encodes it for use in HTML documents (such as email templates). |
markdown | Interprets the value as markdown and returns the corresponding html. For example: {service_agent.bio | markdown} |
url-encode |
Returns the parameter URL encoded for cases where a parameter needs to be added to a URL. |
replace | The replace filter takes two parameters. The first parameter is the text to search for in the value. The second parameter is what to replace it with. |
short_date | This takes a datetime value and converts it to mm/dd/yyyy format. |
short_time | This takes a datetime value and converts it to h:mm tt format (12 hour format). |
to_utc | This takes the timestamp and converts it to UTC time. |
strip_newline | This removes any line breaks from the value. |
titlecase | This will capitalize the first letter of each word. |
upcase | This will take the text and convert it to uppercase. |
xml_encode | This takes the text and properly encodes it for use in XML documents, such as print templates. |
Liquid Models
In addition to shortcodes, serviceminder.io templates also support Liquid scripting, a common scripting language used in lots of templating systems and was originally built by Shopify. Each template accepts a model parameter which represents the core entity for that template (such as a contact, an appointment, invoice or proposal).
The various objects exposed by the model parameter can be viewed here: Liquid Models
FAQs
Is it possible to set up en route messages to send a text with a time frame?
Yes, in the En Route field (in Control Panel > Automated Voice/Text) they can utilize shortcode filters to set up a time frame. This would take the appt scheduled start time and deduct and hour, and then add an hour. So a 2:00pm start time would show a range of 1-3.
{appointment.scheduled-start|addtime:-1:hour|short_time} - {appointment.scheduled-start|addtime:1:hour|short_time}
It can also be in minutes, so something like addtime:-20|minutes|short_time instead.
You can also do this with the arrival time shortcode:
{appointment.arrival_time|addtime:-1:hour|short_time} - {appointment.arrival_time|addtime:1:hour|short_time}