Rock RMS Integration

Intulse's Rock RMS integration merges your phone with your CRM (customer relationship management), RMS (relationship management system), and ChMS (church management system). There are two levels of integration between Intulse and Rock, they are detailed below.

1. Intulse Standard CRM Integration

Any screen in the Intulse Dashboard that would normally display a simple phone number automatically searches the caller ID within Rock and returns any records that match. For example, when someone calls you instead of displaying the caller id you'll see the name of the person as it appears in Rock and can click on the name to launch their account within Rock. You can quickly add call notes to a contact's activity details, the call log will automatically contain all the basic information about the call such as start time, duration, direction (inbound/outbound), and if the if the call was recorded, a link to the recording.

To experience this type of integration between Intulse and Rock RMS you will need to use the Intulse Dashboard App.

Connecting Rock RMS to the Intulse Dashboard

This guide assumes that you already have the Intulse Dashboard on your favorite device and that you are already logged in. If you need help getting into the Dashboard click here to learn more.

  1. In the Intulse Dashboard, click Profile in the main menu
  2. Click RockRMS in the Profile sub menu
  3. Enter your RockRMS Username and Password
  4. Admin's Only Required Enter the base URL of your RockRMS instance. (e.g. https://rock.mychurch.org)
  5. Admin's Only Optionally, you can enter the API URL of your RockRMS instance. You should only do this if you have a custom version of Rock running and have changed the default API URL. (e.g. https://rock.mychurch.org/customapi)
  6. Admin's Only Optionally, you can enter a default username and password for your organization that will be used when interacting with RockRMS if a user has not logged in themselves.
  7. Save your changes

2. Rock RMS Plugin from Intulse

First you will need to install the Intulse plugin from the Rock store. Then, to fully utilize the Intulse plugin, you need to configure a few things in Rock.

Installing the plugin

Coming soon...

Create New Internal Extension Phone Type

It is highly recommended that you create a new Phone Type that will store the internal extension of your staff. It will be critical that you keep these up to date so make sure that any time you have Intulse create/change extensions you also update the Person Details in Rock.

You can create a new Phone Type by going to the Admin Tools > General Settings > Defined Types page and selecting the Phone Types defined type. Once there you can add a new phone type that will contain the internal extension, which we recommend naming it "Intulse Extension". In our documentation we will refer to this new type as "Intulse Extension".

Creating new Defined Type in Rock screenshot

What you store in this phone field is the extension assigned to your Intulse phone (usally a 3 or 4 digit number).

Configure The System Settings

Navigate to your Admin Tools > System Settings > Phone Systems page. Once there you should see an entry for "Intulse" that you can click on to begin configuration.

Configuring the Intulse Plugin settings

  1. Set Active to "Yes"
  2. Set Internal Phone Type to the phone type you created to store your internal extensions.
  3. Set Intulse API Key to your Master API Key which you can obtain from the Intulse Dashboard on the Profile screen.
  4. Save your changes

Create Scheduled Job

You will need to add a new Scheduled Job under Admin Tools > System Settings > Jobs Administration in order to have Rock import the call log data from your phone system. Create a new job to match the information below.

Creating new Scheduled Job in Rock screenshot

The important parts are the Job Type, the PBX Component, and the Cron Expression settings. Set the Cron Expression to 0 0/15 * 1/1 * ? *. This will create a job that runs every 15 minutes and imports any new call logs. It is highly recommended that you mark the job as not Active initially. After you have run it one time manually to do the initial import you can change it to Active.

Caution: It is suggested that you run the job manually one time before marking it Active, and that you do so after normal business hours. This initial import can take a long time. During this initial import the your phone system is working pretty hard so there is a chance it might affect call quality while this first import is running.

Viewing Interactions (Phone Call History)

As of Rock 7.4 there is currently no existing block to view interactions on the Person Detail or the Business Detail page. You can get most of the functionality you would need by adding a Dynamic Data block to the History tab of both of those profile pages. The steps for each are SIMILAR but not exactly the same. Once it is all setup it will look similar to the image below.

Rock Dynamic Data block screenshot

Editing the Person Detail Page

Go to the Person Detail (any person is fine) page and flip over to the History tab. Add a new block wherever you want it to show up, for example the C1 section. The block we will be adding is the Dynamic Data block. Give it the name Phone Call History.

Once it's added, edit the Block settings (the Gear icon) and change the Update Page setting to "No". Flip over to the Advanced Settings tab and add this to the Pre-HTML:

<div class="panel panel-block">
    <div class="panel-heading">
        <h1 class="panel-title"><i class="fa fa-phone"></i> Phone Call History</h1>
    </div>
    <div class="panel-body">

And then add this to the Post-HTML:

    </div>
</div>

Save those settings. Now edit the block's custom settings (the Pencil icon). Set the Parameters to the value PersonId=0. Then set the Query to the following select statement:

SELECT DISTINCT
    CASE
        WHEN P.Id = @PersonId
            THEN CONCAT(P2.NickName, ' ', P2.LastName)
        ELSE CONCAT(P.NickName, ' ', P.LastName)
    END AS Person,
    CASE
        WHEN P.Id = @PersonId
            THEN
            CASE
                WHEN LEN(PN2.Number) = 10
                    THEN  CONCAT('(', LEFT(PN2.Number, 3), ') ', SUBSTRING(PN2.Number, 4, 3), '-', RIGHT(PN2.Number, 4))
                ELSE PN2.Number
            END
        ELSE
            CASE
                WHEN LEN(PN.Number) = 10
                    THEN  CONCAT('(', LEFT(PN.Number, 3), ') ', SUBSTRING(PN.Number, 4, 3), '-', RIGHT(PN.Number, 4))
                ELSE PN.Number
            END
    END AS Number,
    I.InteractionDateTime AS [Date]
    --,CONVERT(VARCHAR, DATEADD(s, CAST(JSON_VALUE(I.InteractionData, '$.Duration') AS INT), 0), 108) AS Duration
	, LTRIM(CONCAT(P2.NickName, ' ', P2.LastName)) + ' (' + 
		CASE
			WHEN LEN(PN2.Number) = 10
				THEN  CONCAT('(', LEFT(PN2.Number, 3), ') ', SUBSTRING(PN2.Number, 4, 3), '-', RIGHT(PN2.Number, 4))
			ELSE PN2.Number
		END
		+ ') called ' + 
		LTRIM(CONCAT(P.NickName, ' ', P.LastName)) + ' (' +
		CASE
            WHEN LEN(PN.Number) = 10
                THEN  CONCAT('(', LEFT(PN.Number, 3), ') ', SUBSTRING(PN.Number, 4, 3), '-', RIGHT(PN.Number, 4))
            ELSE PN.Number
        END
		+ ')' 
		AS [Description]
FROM Interaction I
LEFT JOIN PersonAlias PA
    ON PA.Id = I.PersonAliasId
LEFT JOIN Person P
    ON P.Id = PA.PersonId
LEFT JOIN 
	(
		SELECT DISTINCT
		PersonId,
		CAST(MIN(CAST(Number AS NUMERIC)) AS VARCHAR) AS Number
		FROM PhoneNumber
		GROUP BY PersonId
	) PN
	ON PN.PersonId = P.Id
LEFT JOIN PersonAlias PA2
    ON PA2.Id = I.EntityId
LEFT JOIN Person P2
    ON P2.Id = PA2.PersonId
LEFT JOIN 
	(
		SELECT DISTINCT
		PersonId,
		CAST(MIN(CAST(Number AS NUMERIC)) AS VARCHAR) AS Number
		FROM PhoneNumber
		GROUP BY PersonId
	) PN2
	ON PN2.PersonId = P2.Id
WHERE
    I.Source = 'Intulse'
    AND (P.Id = @PersonId
        OR p2.Id = @PersonId)
ORDER BY
    I.InteractionDateTime DESC
There is a line in the query that begins with --. If you are running SQL Server 2016+ or Azure SQL then you can remove those -- and it will include the duration of the call. The JSON_VALUE command on that line does not exist in SQL version before 2016.

Editing the Business Detail Page

Go to the Business Detail (any business is fine) page and flip over to the History tab. Add a new block wherever you want it to show up, for example the C1 section. The block we will be adding is the Dynamic Data block. Give it the name Phone Call History.

Once it's added, edit the Block settings (the Gear icon) and change the Update Page setting to "No". Flip over to the Advanced Settings tab and add this to the Pre-HTML:

<div class="panel panel-block">
    <div class="panel-heading">
        <h1 class="panel-title"><i class="fa fa-phone"></i> Phone Call History</h1>
    </div>
    <div class="panel-body">

And then add this to the Post-HTML:

    </div>
</div>

Save those settings. Now edit the block's custom settings (the Pencil icon). Set the Parameters to the value businessId=0. Then set the Query to the following select statement:

SELECT
    CASE
        WHEN P.Id = @businessId
            THEN CONCAT(P2.NickName, ' ', P2.LastName)
        ELSE CONCAT(P.NickName, ' ', P.LastName)
    END AS Person,
    CASE
        WHEN P.Id = @businessId
            THEN
            CASE
                WHEN LEN(PN2.Number) = 10
                    THEN  CONCAT('(', LEFT(PN2.Number, 3), ') ', SUBSTRING(PN2.Number, 4, 3), '-', RIGHT(PN2.Number, 4))
                ELSE PN2.Number
            END
        ELSE
            CASE
                WHEN LEN(PN.Number) = 10
                    THEN  CONCAT('(', LEFT(PN.Number, 3), ') ', SUBSTRING(PN.Number, 4, 3), '-', RIGHT(PN.Number, 4))
                ELSE PN.Number
            END
    END AS Number,
    I.InteractionDateTime AS [Date]
    --,CONVERT(VARCHAR, DATEADD(s, CAST(JSON_VALUE(I.InteractionData, '$.Duration') AS INT), 0), 108) AS Duration
FROM Interaction I
LEFT JOIN PersonAlias PA
    ON PA.Id = I.PersonAliasId
LEFT JOIN Person P
    ON P.Id = PA.PersonId
LEFT JOIN 
	(
		SELECT DISTINCT
		PersonId,
		CAST(MIN(CAST(Number AS NUMERIC)) AS VARCHAR) AS Number
		FROM PhoneNumber
		GROUP BY PersonId
	) PN
	ON PN.PersonId = P.Id
LEFT JOIN PersonAlias PA2
    ON PA2.Id = I.EntityId
LEFT JOIN Person P2
    ON P2.Id = PA2.PersonId
LEFT JOIN 
	(
		SELECT DISTINCT
		PersonId,
		CAST(MIN(CAST(Number AS NUMERIC)) AS VARCHAR) AS Number
		FROM PhoneNumber
		GROUP BY PersonId
	) PN2
	ON PN2.PersonId = P2.Id
WHERE
    I.Source = 'Intulse'
    AND (P.Id = @businessId
        OR p2.Id = @businessId)
ORDER BY
    I.InteractionDateTime DESC
There is a line in the query that begins with --. If you are running SQL Server 2016+ or Azure SQL then you can remove those -- and it will include the duration of the call. The JSON_VALUE command on that line does not exist in SQL version before 2016.

Important Last Steps

  • It is critical that each of your users have their Intulse Extension entered correctly on their profile.
  • You should create a Business (go to Finance > Businesses) that represents your church. Make sure that your churches telephone number is listed as one of it's phone number's (usually the Work number).

For more information about Rock RMS, check out their website!

Rev. August 12, 2018