Skip navigation

Notify enables organizations with a Twilio account to send notifications using text and voice messages. It also allows conference calls between ServiceNow users to make group communication quick and easy. A great use for Notify is with Incident Alert Management. Notify allows you to quickly gather the right people together on a conference call to handle high-priority incidents. You can also use its messaging system to collaborate and troubleshoot issues allowing for a quicker time to resolution.

 

As a NotifyNow admin, you have the ability to set Notify properties and manage the messages coming through.

Your role allows you to:

  • View and edit Notify properties.
  • Configure Notify for Twilio.
  • View  messages made by all applications using Notify on the instance.
  • View or create questions and answers via SMS or email for bi-directional communication.

 

NotifyNow is available starting Dublin, and since Eureka, is just referred to as Notify. Starting with Fuji, Notify allows some new functionalities that makes communicating with your individuals and teams easier.

 

New in Fuji:

  • Conference calls can be made public
  • Mute and unmute participants to avoid the background noise interfering with calls
  • "Kick" out participants from a conference call

 

When Notify is active, you may find as a user with the notifynow_admin role that you don't have access to configure notify properties that you need (KB0533463). Instead, your access may be limited to a view-only account status:

notify servicenow.jpg

If you have the notifynow_admin role, you should be able to do certain tasks, such as set properties or monitor message and conference call activities. You should also be able to create and edit incident alerts and manage contact information without issue.

 

The problem you're having is due to role restrictions set on the account_status UI page and also on the notify properties read/write conditions. To access, you'll need to change the notify properties read/write conditions as well as update the account status UI Page.

 

(Note: All the steps below must be completed to use this workaround successfully.)

 

To change the notify properties read/write conditions:

  1. Log in as an admin user.
  2. Navigate to System Properties > Categories.
  3. Search for the NotifyNow category and open the record by clicking on it.
  4. At the bottom of the form in the properties related list, click on the first record to open it.
  5. Click on the reference icon near the property field to open that property's form.
  6. At the bottom of the form, add the notifynow_admin role to the Read roles and Write roles.
  7. Repeat steps 4 through 6 for all of the properties in the NotifyNow category.

To update the account_status UI Page:

  1. Log in as an admin user.
  2. Navigate to System UI > UI Pages.
  3. Search for the account_status UI page and click on the record to open it.
  4. In the HTML field, search for the lines (there should two occurrences of the line that needs to be changed):
    <j:if test="${gs.getUser().hasRole('admin')}">
  5. Change it to: <j:if test="${gs.getUser().hasRole('admin') || ${gs.getUser().hasRole('notifynow_admin')}">

 

notifynow servicenow.jpg

 

Notify is available as a separate subscription from the ServiceNow platform. To purchase a subscription, contact your ServiceNow account manager.

 

For related articles, see:

 

 

 

Notify has some new features in the Geneva release! See Geneva: Significantly Improved Notifications  by poneppo

Do you need a way to mentor others and offer feedback after an action is completed in a task-based process like incident, problem, or change management? If you do, take a look at the Coaching Loops application. This useful app enables mentors ("coaches") to help guide individual users or groups ("coachees") through their work and provide tips to improve performance.


The following terms are important in Coaching Loops:

  • Coaching discipline: process that can be coached
  • Coaching opportunity: specific points in the process that can be coached
  • Coaching assessment: coachee work review and feedback


For example, let's say the coaching discipline is incident management. Coaching opportunities in incident management could include updating an incident, changing incident priority, and closing an incident. The coaching discipline and the coaching opportunity must both exist on the same table - in this case they are both on the Incident table. When a user takes an action such as changing incident priority, an assessment record is automatically created for the user and assigned to the coach. The coach and coachee can then review the coachee task performance and enter work notes.

 

 

Creating a coaching discipline:

First, establish the process for which you want to coach users.

  1. Navigate to Coaching Loops > Coaching Disciplines.
  2. Click New.
  3. Fill in the following fields: Short description, Discipline, Coachee Group, and Coaching Group. In the following example, the discipline is incident management on the incident table. We have a Coachee group named Customer Support and a Coaching group named Incident Coaching.
    coaching_loops1.jpg
  4. Click Submit

 

 

Creating a coaching opportunity:

Second, break the process down into specific steps where users can be coached to make better decisions.

  1. Navigate to Coaching Loops > Coaching Opportunities.
  2. Click New.
  3. Fill in the Short description and Table fields.
  4. Click Submit.

In the Snapshot field on the Coaching Opportunity record, you can add a script that defines the evaluation process applied to the table specified in the Table field. Shown below is the sample coaching opportunity (on the task table) included in the the base system.

coaching_loops3.jpg

Performing a coaching assessment:

Lastly, have the coach add an evaluation of the coachee performance in an assessment record and note improvements for the future.

  1. Navigate to Coaching Loops > Assessments.
  2. Click an assessment record.
  3. Type a review of the coachee's task performance into the Work notes field.
    coaching_loops4.jpg
  4. Click Thank Coachee to save the record, close the record, and automatically send an email message to the coachee that lets them know the assessment was completed. The coachee can review all fields on the assessment record.
  5. [Optional] To continue the dialog with the coach, coachees can click Review Assessment and type text into the Work notes.

 

Additional tips and information:

 

If you can't seem to remove canceled events from your Outlook calendar, this may be because the cancellation notification is missing a unique identifier (UID) from the original email. Outlook uses the standard iCalendar data format for calendar events. When a Change request is assigned to you, ServiceNow automatically sends you an iCalendar-formatted email. You'll see the meeting request inside of Outlook, and you can click accept to add it to your calendar.

 

Unfortunately, when an event is canceled, it can stubbornly remain in your calendar. This is because the cancellation ID does not match up to the original email ID. For example, if you create a new CHG request, the instance does the following:

  1. Sends a calendar invite with unique calendar identifier (UID) of UID:CHG00000001, for example.
  2. When the Assigned to is altered, it triggers a change.calendar.notify.remove event for the above calendar invite.
  3. It then sends a new calendar notification intended to remove the above calendar, but the UID uses a watermark string (Ref:) instead of the original UID above, for example: UID:Ref:MSG0000211.

 

Since calendar-related notifications for updates or cancellations must use the same unique ID to identify the calendar item, the cancellation request is not processed. To correct this issue, you can update the change.calendar.integration.remove email template.

 

How to remove canceled events from your calendar:

  1. In the navigation filter, enter System Policy.
  2. Go to Email > Templates.
  3. In Email Templates, open change.calendar.integration.remove.
  4. In the Message field, changeUID:${uid} to UID:${number}.


email template.png

 

This should clear up any unwanted events on your calendar.

 

For related articles, see:

ServiceNow iCal cancel requests do not remove item from customer calendar

Email templates

Change Management Integration with Outlook

RogueOnBridgeCropped.png

The very first incident I worked as a ServiceNow support engineer is an interesting subject for any customization effort; don't just code for what a mentor of mine called the "Happy Path."

 

Consider what happens if things don't go as you expect.

There is nothing quite like trying to understand why your code isn't working only to find out after much debugging that it really was working but just not quite how you expected. 

 

See the new javascript debugger available beginning with the Dublin release.

 

 

Rogue 2006-2015 On one of his "Happy Paths"

 

In brief, a query for a specific record in a script did not find a result. (See Scripting in ServiceNow.) The script's author did not account for this and thus the data from the previous iteration was used populating an incident with incorrect data.

 

In detail, a custom email inbound action, System Policy > Inbound Actions, "Some_Clever_InBound_Email_Script_Name" existed and in that script we find a query for a user as follows:

 

var userLookup = new GlideRecord('sys_user');
userLookup.addQuery('email', email.from);
userLookup.query();

while (usrlookup.next())
{
  var userID = userLookup.sys_id;
}
                            

 

Yesterday, on the plane, I saw a guy in his Seahawks jersey and hat.  It is not even close to football season but it got me fired up.  Thus explains some of the sample data I use below.

 

For great information on Email including Inbound Actions see Katharine Campbell's blog posts found here, Email, Email, and More Email

 

If the above "userlookup.query();" fails to find the record, then the loop is not entered and the userID will not be set.  In fact, it could have data from the previous run of the script or simply be undefined.  In this particular case the email came from marshawn.lynch[@]seahawks.com but in his user record his email is listed as beastmode[@]seahawks.com.  So of course no match was found.

 

Later in the script, userID is used to set opened_by on an incident and the customer was surprised to find that the data said the incident was opened by russell.wilson[@]seahawks.com When we looked into the details we found that the previous email processed was from russell.wilson[@]seahawks.com (oops!).

 

To fix this issue you can modify your script to set the userID to null or to some default user before using the result of the lookup query.

 

var userID = 'pete.carroll@seahawks.com';
while (usrlookup.next()){
  userID = usrlookup.sys_id;
}
                      

 

Or put the lookup in an "if-else" rather then a while:

 

if (userlookup.next()){
  var userID = userlookup.sys_id;
} else{
  var userID = 'pete.carroll@seahawks.com';
}
                      

 

Your choice will vary depending on your business needs; whether you use a default user or some other action, if the user lookup fails to find a record you want to make sure you account for that not so Happy Path.  Additionally, you might need to consider what you would do if more then one record is found.

 

Other areas where I have seen the "Happy Path" cause issues:

  1. "While it never happened"  - Use of a while loop without considering what to do when the loop is not entered.
  2. "Pass it to me" - When you write a function consider what will happen if the caller passes you bad data.
  3. "Bad returns" - When you call a function but don't get back what you expected.
  4. "Talk to me" - When you log a certain condition but don't log when the condition doesn't occur.

 

And finally:  "Undefined is not fine" -  This one caused a P1 incident last week.  A Glide Scriptable was being called:

 

var enc = new GlideEncrypter();
var encryptedString = enc.encrypt(source.u_stringToEncrypt);
                   

 

But source.u_stringToEncrypt was undefined.  GlideEncrypter eventually tried to make a copy of source.u_stringToEncrypt and since this string was undefined it pointed to some random place in memory.  And with nothing to terminate the string it copied and copied and copied and copied until the JVM ran out of memory.  (See #2 above.  I have submitted a problem report.)

 

When scripting in your customizations be sure to always be ready to react if you don't get what you want.  Just as Russell Wilson always has an audible ready if he doesn't get the defensive look he wants.

 

Go Hawks!

Filter Blog

By date: By tag: