Version 4.5: Workflow

Version 4.5 (August 2019) introduces new ways to share work within a legislative office.

Many legislative offices have a point person who manages the legislator’s inbox while other staff members may take responsibility for responses to particular emails and the legislator or chief of staff has responsibility for approving outgoing emails. This release improves support for that typical division of labor. The video explains how the new pieces can fit together in an office work flow. See also Configuring Access to Capabilities

Here is a summary of the basic changes in the Workflow release:

  • The email inbox has three new default tabs
    • Team — emails matching rules entered in the Team Emails tab of the Inbox controls. See screen print and additional notes below.
    • Assigned –for a logged-in user without Access all email capability, the inbox emails assigned to the user; for a logged-in user with Access all email capability, emails assigned to any user or to the user selected from a drop-down.
    • Ready — those assigned emails that have been approved.
  • In the Inbox, any reply text entered will be saved as draft automatically. So, you can start replies in the inbox and leave them there to come back to or for others to approve.
  • All users can now access the inbox, including those without the Access all email capability. Those without the Access all email capability will see only the Ready and Assigned tabs and only the emails assigned to them.
  • Users can now only access those constituent and issues that are assigned to them, unless their role has the Access Unassigned capability. They can only access emails that are assigned to them unless their role has the Access all email capability.
  • A new “Thumbs up” button to mark drafts as approved.
  • The dashboard now includes a new status overview of assigned cases, issues and emails to support management of overdue assignments.

When a logged-in user with the Access all email capability views the inbox, the Assigned/Ready tabs will include all inbox emails with the exact same subject line as one assigned to any user or to the user selected from drop-down. This serves to move to the assigned tab those emails that will likely get trained replies once a response has been drafted to the assigned emails.

The assignment of a constituent to a user for case management will not affect whether emails from that user appear in the assigned tab. Email assignment is for particular emails and intended to support the delegation of drafting of a response to a particular email (or a group of emails with the same subject). If a staff members is engaging in ongoing correspondence with a constituent, they should user their own office email address.

Team Emails

Screen print of Email>Controls>Team Emails Tab

Messages from emails entered in the Team Emails field will appear in the Team Tab in the inbox. You change the rules at any time and refresh the inbox to apply the new rules.

Emails in the Team Emails field should be separated with the pipe ‘|’ character. You can use the wildcard % sign. So, the following string would pull to the team tab any emails from emails containing any of the four last names.


You could also choose to put all .gov emails into the Team Tab, with this addition:


Configuring Access to Capabilities

Revised to reflect configuration of record level access in Version 4.5, target release date August 28, 2019.

Configuration of access is based on each person’s role and the capabilities given to that role. WP Issues CRM also allows you to limit access to constituents and issues assigned to a particular user. The user in the screen shot below is being assigned the role Subscriber.

WordPress defines five roles (from most powerful, i.e., most capabilities, to least powerful):

  • Administrator
  • Editor
  • Author
  • Contributor
  • Subscriber

WP Issues CRM adds one additional role ‘Constituent Manager’ which has no WordPress capabilities, but may be given WP Issues CRM capabilities.

WP Issues CRM defines six different kinds of capabilities:

  • WP Issues CRM (update assigned constituents, issues and activities and read assigned emails; can draft but not send email replies).
  • Access unassigned (access any constituent issue or activity, but only assigned emails)
  • Bulk downloads/deletes
  • View all email — unassigned and additional tabs/pages
  • Reply to email; send email — full authority to send and archive emails
  • Send email to lists — use the list functions from activity and constituent lists

To set WP Issues CRM capabilities go to ‘Configure’ underneath WP Issues CRM on the WordPress Menu (formerly known as ‘Main Settings’), then select the Security tab. Make changes. Save all settings.

If you give a WP Issues CRM capability to a WordPress role, then all more capable WordPress roles also have that capability. So, if, for example, you give Contributors the WP Issues CRM download capability, then Authors, Editors and Administrators will have that capability but not Subscribers.

Individual constituents and issues can be assigned to team members under the management tab on their update forms.

To assign team members to an email, open the email in the inbox and click the person icon in the top middle of the form and you will see this popup:

Sample Legislative Office Configuration

For a legislative office, one possible combination of roles and capabilities appears below (consistent with the screen shot above).

Office roles vs. WordPress roles in user profiles:

  • Chief of Staff: Administrator — all capability
  • Communications Director: Editor
  • Experienced staff: Author
  • Junior Staff: Contributor
  • Interns: Subscriber.

Access settings in the Configure/Security tab:

  • Send email to lists: Administrator
  • Send and reply to email: Editors
  • Access all email: Editors
  • Bulk downloads/deletes: Authors
  • Access unassigned: Contributors
  • Basic WP Issues CRM: Subscribers

Personalized Greetings — the Dear Token

In version 4.4, we have brought back the “Dear Token”.

What is the Dear Token?

The “Dear Token” is just a text string: |||*Dear*|||

What is the Dear Token good for?

It allows you to personalize greetings in replies from the inbox and list sends.

Exactly how does the Dear Token behave?

Version 4.4 adds a “Salutation” field for constituents. This field appears on the constituent screen and you can also upload to it. You can put whatever you want in the salutation field. You can use it to be more formal or less formal. For example, if you have a constituent named ‘Elizabeth Smith’, you could choose the formal salutation ‘Dr. Smith’ or the informal ‘Betsy’.

When WP Issues CRM sees the Dear Token in an inbox reply or a list send, it will replace it as it puts the message in the outbox with one of the following:

  1. “Dear Salutation,”
  2. If no Salutation is present: “Dear Firstname,” (converting database value for first name automatically to proper case).
  3. If neither Salutation nor Firstname is present, the token will just be removed.

The Dear Token adds the trailing comma in the first two cases. The Dear Token does not add a new paragraph mark, so insert it where you would like it to show with a new line after it. Experiment by sending a message to yourself and then replying to it or test a list send to a short list of office mates.

The token will not be replaced until you actually send the email. The replacement occurs after you send, as WP Issues CRM puts the message(s) in the outbox.

What is the easy way to add the Dear Token?

The editor will show you a “Dear” button when you are editing any of the following:

  • A reply to a message.
  • A draft of a message to a list.
  • A Saved message reply template.

When you click the Dear button, the Dear Token will be inserted at the cursor position (which initially is always at the start of the message).

Are there places where the Dear Token doesn’t work?

Yes. The Dear Token does not work . . .

  • . . . if you are simply composing a new message.
  • . . . if you are replying to a message that has already been sent or archived, as opposed to replying from the inbox.
  • . . . the second time it appears in a message.

How can I remember where it works?

In general, if the editor shows you a Dear button, it will work. If it doesn’t, it won’t. So, just use the Dear Button — don’t enter a Dear Token manually.

Should I use the Dear Token?

In general, you should use the Dear Token if your work flow allows you to properly define Salutations for most constituents. In many offices, the original constituent list, likely a voter list, contains only formal first names — William instead of Will, Elizabeth instead of Betsy. For people who use their nick names to sign most correspondence, a reply that uses their formal first name may be perceived as impersonal and therefore ignored. Conversely, for a few constituents, use of first name may be perceived as unduly familiar.

Some feel that the best practice is to find another way to begin emails unless you consistently know the appropriate salutation for your constituents. For example, instead of saying “Dear William,” just start right in with “Thanks for reaching out.” However, others feel that best practice is to always use a salutation and take a few risks of getting the salutation wrong. It depends a lot on the style of the emails you tend to send — more conversational emails do not need a salutation. More lengthy and formal emails may call for a salutation. You can vary your practice, using the Dear Token in some templates but not in others.

Mapping Addresses

WP Issues CRM supports the presentation any list of found constituents on maps. You can add layers (like district boundaries) that will be displayed on all maps. If political party is coded, found constituents will show as red, blue or purple.

There are three parts to making this work.

First, all presentation of maps relies entirely on the Google Maps API — so an API Key needs to installed, following the instructions on your WP Issues CRM Main Settings geocoding tab.

Second, although the Google Maps API can do geocoding, it is not designed to support real time geocoding of a large number of points, so we need to geocode all the addresses in advance to be ready for presentation. One economical service that does geocoding is Gecodio. If you get yourself a Geocodio API key and install it in main settings, WP Issues CRM will do the rest.

Please note that the geocoding process handles batches of 10,000 addresses every five minutes, so that if you add 120,000 records to your database, it will take approximately an hour to geocode them all.

If you are running multi site, you can install either or both the Google Maps and Geocodio keys in your wp-config.php and they will be available to all sites on your installation. Just plug your keys into these two lines and add them to wp-config.php somewhere above “/* That’s all, stop editing! Happy blogging. */”:


If you configure the Geocodio API centrally, then all sites will share looked up addresses, saving costs — once an address has been geocoded by one site, it will be saved in a central cache for others to use.

Especially in a central installation, it may make sense to install a cron tab to assure that geocoding continues while the site is idle. Place the following line in your wp-config.php:

define( 'WIC_GEOCODING_CRON_RUN_KEY', 'some_long_string_letters_and_numbers');

And then set up a cron tab through CPanel to run every five minutes:

wget -q -O - http://yoursiteurl/?wic_geocoding_cron_run_key='the_same_long_random_string'

The results of geocoding runs can be monitored in the file named wp_issues_crm_geocoding_log which will appear in the wp-content directory.

You can also write your own geocoding function to user your preferred geocoding data source instead of Geocodio. Just name it wp_wic_lookup_geocodes_local and install it as a WordPress plugin and WP Issues CRM will turn to that function. Refer to the code for WIC_Entity_Geocode::update_geocode_address_cache as a model.

Finally, to add layers, you must encode them in geojson format and then point to them in the wp-config.php file by carefully following this example:

array (
array( 'layerTitle' => 'Senate Districts', 'layerURL' => 'http://localhost/senatedistricts.geojson'),
array( 'layerTitle' => 'House Districts', 'layerURL' => 'http://localhost/repdistricts.geojson'),
array( 'layerTitle' => 'Municipalities', 'layerURL' => 'http://localhost/town351.geojson'),

Customizing mail tabs

The WP Issues CRM inbox will, without any customization, segregate any trained messages under the ‘Advocacy’ tab. The advocacy tab is so populated regardless of any further customization below.

WP Issues CRM allows you to further segregate messages into custom tabs based on whatever message content or header data you wish to parse. This requires creating a special purpose plugin. A simple example plugin that adds a ‘Social’ tab appears below. You may be able to go much further by referencing data in the spam filter headers created by the spam filter installed on your mail server.

Write the plugin php code and then place it within a .php file within a subdirectory of the wp-content/plugins directory of your site. This code will then be invoked in the message parsing process to assign a category to each message.

Sample code module:

Plugin Name: WP Issues CRM Sample Social Tab plugin
Plugin URI:
Description: Sample code to demonstrate model for create custom tabs
Version: 0.1
Author: Will Brownsberger
Author URI:
Text Domain: wp-issues-crm
License: Not Licensed
License URI: Not Licensed
Text Domain: wp-issues-crm

// category filter hook -- hooks your function into the parsing process for WP Issues CRM
add_filter( 'wp_issues_crm_local_category_filter', 'social_mail_filter', 10, 3 );

// category filter
function social_mail_filter( $category, $email_object, $constituent_id ) {

// list social domains
$group_social = array (
if ( in_array( $email_object->from_domain, $group_social ) ) {
// default if not social

* local_tab_definition() is called when inbox produced
* tab names must correspond to category names --
* as 'General' corresponds to 'CATEGORY_GENERAL'
function local_tab_definition() {
$tabs_array = array(
'Social', );
  return $tabs_array;

Multisite Activesync configuration

In a multisite installation where all sites are reading email accounts on the same email server, you may wish to control the polling process and the delivery process to manage mail server work load.

WP Issues CRM includes a mechanism for managing server work load that is especially tailored for ActiveSync on Exchange. It involves replacing the random WordPress cron cycles of the various sites with a single cron job that runs periodically to do read and send for all sites. The process divides the requests of each user into manageable chunks and maximizes the chances that all users make read and send progress in every cycle.

The steps for configuring this mechanism are as follows:

(1) place the following lines in wp-config.php above the line that reads /* That’s all, stop editing! Happy blogging.

  • WP_ISSUES_CRM_GET_REQUEST_PAGE_SIZE sets the number of messages batched in single request for message bodies — recommended value is 10 ( will get a singe page per batch cycle)
  • WP_ISSUES_CRM_MESSAGES_SENT_PER_ROTATION sets the number of messages that will be sent each time the user gets a turn in the rotation generated by this function
  • WP_ISSUES_CRM_CRON_CLEARANCE_SECONDS is an estimated safe number number of seconds that should suffice to complete a page of get or send requests
  • WP_ISSUES_CRM_CRON_INTERVAL is max number of seconds that the cron job will keep working for — should correspond to timing of cron interval
  • WP_ISSUES_CRM_MESSAGE_SEND_DELAY is the number of milliseconds to wait between send events

(2)add an additional define line below those, replacing ‘some_long_random_string’ with a 64 character string of letters and numbers (not spaces or special characters)

define('WP_ISSUES_CRM_RUN_CRON_KEY', 'some_long_random_string');

(3) through CPanel, set up a cron tab to trigger at your desired cron interval — recommended starting point: 2 minutes

(4) in that cron tab, place the following instruction (on a single line)

wget -q -O - http://yoursiteurl/?wp_issues_crm_run_cron_key='the_same_long_random_string_you_inserted_in_step_two' >/dev/null 2>&1

(5) You may wish to also add a line to config.php limiting the size of list sends — example to limit to 500


Configuring Secure Gmail Access in WP Issues CRM

WP Issues CRM now supports the Gmail API as one option for reading email.  The Gmail API offers connectivity superior to traditional IMAP connectivity. It is a little more secure and also allows WP Issues CRM to present an inbox showing the Gmail tabs.

The steps to configuring the Gmail API are truly convoluted, but need only done once in a multiuser installation. Once the lead blog is configured with gmail credentials, each individual site need only supply their email to connect.

Whether for an individual site or for a multisite installation, here are the basic steps to configuring the gmail API. They require access to and basic familiarity with the file server that your web site runs on.  Additionally, they require interaction with Google’s developer console to create “project” credentials — the credentials creation progress can be confusing, but once complete, the API works like a charm.

  1. Sign into your Google Account.
  2. Visit the Google Developer’s console.
  3. You should be prompted to create a “project”.  Create a project with an appropriate name.
  4. Once you create the project, you will need to verify the domain that you intend to gain credentials for.  Click Domain Verification, Add Domain and follow instructions as necessary (may vary based on your prior google developer activity).
  5. Click the Oauth consent screen Tab and provide the required information.
  6. Then you click “Credentials” and click “Create Credentials” and select “Oauth Client ID” and then select “Web Application”.  
  7. The “Name” you choose will be visible to you and your users when they sign in through Google.
  8. You do not need to fill in “Javascript origins”, but you must fill in Authorized redirect URI  with the following : https://EXAMPLE.COM/wp-admin/admin.php?page=wp-issues-crm-main&entity=email_oauth&action=redirect_from_gmail&id_requested=0  — EXAMPLE.COM should be your site (including any subdirectory that you have installed WordPress in — e.g. EXAMPLE.COM/blog
  9. When you click Create after completing this form, you will be shown your client ID and secret. Just click OK and then download the credential file from the list of Client IDs.
  10. Install the credentials a file at location outside the public_html ( or www ) directory of your web server. You do not want the credential file to be directly accessible over the web. A good place is in the directory immediately above your public_html directory.
  11. Place a line in the wp_config.php file that resides within your public_html directory that reads as follows:

    define ('WIC_GMAIL_OAUTH_CREDENTIALS_FULL_PATH', '/full/pathto/yourcredentialsfile');

    This line should be placed in a manner consistent with the other definition lines in the file, but it does not matter exactly where.  A safe place is immediately below another definition line. You should replace /full/pathto/yourcredentialsfile with the full path to your credentials file, including the starting slash all the way through and including the full filename, likely ‘credentials.json’. The starting slash indicates the root directory of your server, so be sure to include all the intermediate elements of the path. The final semi-colon in the line is a necessary part of the line. Your line should include the single quotes around the path.

  12. You do NOT need to install the Google Client Library or do any other programming — the necessary components are packaged and integrated with WP Issues CRM.
  13. Once you have installed the credentials file, you should select Gmail as your “Read Email from” in the Account tab in the Settings for WP Issues CRM email  (not the “Main Settings” page).
  14. Finally click on the Gmail tab in  email settings and connect.  You will be alerted that you are connecting to an unrecognized project.  That project is the one you created — it is your installation of WP Issues CRM, not any central copy of WP Issues CRM.  You are giving permission to yourself.
  15. On first go around, you may be prompted to go to the developer console and enable the Gmail API — do so.

Note — if this is all too daunting, Gmail supports access for both sending and receiving using traditional IMAP and SMTP over SSL  and you can much more easily configure that type of access for WP Issues CRM.  If you connect using IMAP/SMTP instead of using the API,  Gmail will characterize the app as “less secure” and it is, in fact, slightly less secure in the sense that you are saving an encrypted copy of your password in an additional location (to wit, your copy of WP Issues CRM).  If you feel that your WordPress installation is secure, there is no real security reason not to use traditional IMAP access.  In the email Settings/Account tab select ‘Any account configured in main settings’ and then configure Email In and Email Out in main settings.

Understanding WP Issues CRM Email Version 3.4 and above


Essentially WP Issues CRM is an email client, an email list manager and a CRM combined in one, using all of the classification power of WordPress.

The email function supports the automated handling of high volume repetitive incoming correspondence and facilitates follow-up correspondence on issues.

It parses the body text of incoming emails to extract name and street address information (commonly included in political advocacy emails) and match that information to your constituent database.

It supports automated reply to learned subjects or texts and automated classification of messages for record keeping.

Basic Concepts

The major data concepts in WP Issues CRM are:

  • Constituents
  • Issues ( these are just WordPress posts and can be public or private )
  • Activities (which are always linked to a constituent and an issue)

An incoming email is logged as an activity — you may wish to delete it without logging it, but if it comes from a constituent, you can “Record” it, automatically logging it as an activity for a constituent pertaining to an issue. You would use the Record email button when you wanted to save the message for future action.

If you have a reply ready, you can just quickly reply and, if it the message does not pertain to a recurring issue and you do not wish to create an issue for it, the email will be assigned to “Unclassified Activity.”

If it looks like the email might be part of an incoming email campaign, one of many repetitive messages to come, you can automate future replies as follows.

  1. Select or create an Issue to assign the email to — one-click on the + sign to add a new issue and assign it.
  2. Draft your reply and Save it — this will become the standard reply for that issue/pro-con combination.
  3. When you reply, click “Train” on the confirmation popup.  Training sets the relationship between incoming subject and issue/pro-con classification.  The reply for that issue/pro-con combination can be edited.
  4. Future messages with the same subject line and the same main content can then be recorded and replied to with one click on the sweep (>>) button on the inbox.
  5. Note that if you already have a lot of identical messages in your inbox, you may need to wait a few seconds and refresh the inbox for the messages to come up as grouped and ready for sweeping.

Even if you do not click “Train”, your saved reply will be available for loading when you assign another incoming email to the same issue/pro-con combination.  You will not be offered the option to train unless you have saved or loaded a standard reply (except in the rare case where you have deleted a standard reply for a previously trained message).

Grouping Control

Grouping control determines when messages are grouped for bulk handling in the inbox. It resembles the “Conversation View” choice in many email clients, but is completely different.  It does not group messages from cc’d users in reply threads, rather it groups similar incoming messages from unrelated users to be handled in bulk.

By default WP Issues CRM takes a conservative approach to grouping — grouping messages only if you have checked train on a previous reply AND the messages:

  1. Have the exact same subject line (binary, down to capitalization and spaces, as when the messages are being generated by clicks on an advocacy website) AND
  2. The messages are reasonably long — over 200 words (1400 nonspace characters at 7 characters per word) AND
  3. The message content is 85% identical (excluding address blocks in the body).

You can loosen the second and third criteria to group more messages.  You might want to do this temporarily when using a wildcard subject line that matches multiple similar subjects to clean up messages in a campaign that is using multiple subject lines.  You can access the Grouping Control tab through Settings on the email menu.


Trained subject lines and standard replies for issues typically need to evolve over time.  In addition to simply remapping subject lines and/or creating new replies in the main reply editor, you have three tools:

  1. You can set a “Forget Date” in email settings.  Older mappings will simply be ignored.
  2. You can directly manage the Subject list.
  3. You can directly manage the Saved reply list.

Wild Card Subjects and Informal Campaigns

The easiest campaigns to manage with WP Issues CRM are those generated by computers — constituents are urged to click to contact their legislator.  These campaigns often result in a flood of emails with identical subject lines and identical non-address content.  Less formal campaigns where the email subject and content can change slightly are more work.

You may need to manually review each message in an informal campaign to classify it to the issue that is the subject of the campaign.  But, once you classify the message, WP Issues CRM will prompt you to load your standard reply for that issue/pro-con combination.  You can then further personalize that reply before sending it.

In campaigns that are semi-formal (i.e., are computer generated, but with some variation in subject line and content), you may be able to fully automate responses to them as follows:

  1. Through the Subjects list add a wildcard subject line that matches most of the subject lines.  For example, if the campaign were about a particular numbered piece of legislation (H2389), you could create a wildcard line like %2389%.
  2. Return to the Inbox and create and save a standard reply to one of the messages.
  3. Reply to that message and click Train.
  4. Go to Settings and lower the length and matching standards under Grouping Control
  5. Return to the Inbox once again and the messages should be grouped (note that grouping will take a few seconds as the Train action in step 3 spins off a longer task to review the Inbox messages and see if they can be handled).
  6. If messages aren’t grouped, try lowering the length and matching standards even further and also check they way you defined your Wildcard subject.

Caution: Wildcard subject lines can match way too much, so it is good practice to delete them after you’ve handled campaign you designed them for.

Inbox and Outbox

Because accessing your email inbox across the internet is slow, WP Issues CRM creates a local image of your inbox on your WordPress server. It does so in two stages: First it synchronizes the list of the messages. Second it collects the details for each message — the second process is much slower, but it only needs to be done once and happens continuously as messages come in.  WP Issues CRM develops suggestions about issue and constituent mapping as it parses. The Inbox you see in WP Issues CRM is derived from the local image.   Every two minutes, your WP Issues CRM Inbox is synchronized to the underlying email inbox on your email server.

Conversion to 3.4 from Earlier Versions of WP Issues CRM

The upgrade from earlier versions to version 3.4 requires you to resave any standard reply templates you have developed manually.  There is a fundamental logic change in version 3.4.  In previous versions, reply templates belonged to subject lines.  Since many subject lines could correspond to a single issue, this created an artificial multiplication of templates.  In 3.4, reply templates are associated with issue/pro-con combinations.  For most users, this will be a healthy process of house cleaning — standardized replies need to be upgraded routinely anyway.

The upgrade also rebuilds the WP Issues CRM outgoing queue and if you do the upgrade while outgoing messages are pending in the outbox, those messages will be stranded, although not lost.

If you have a large set of standardized replies and need assistance converting or if you feel you may have stranded outgoing messages that you cannot easily reconstruct, we can help — send an email to

Version 4.0  no longer supports use of |*first_name*|.  Use of first name and last name tokens creates too many risks of errors (nobody calls me Suzanne, my name is Sue) — much safer to just jump into the message, rather than start with a possibly incorrect salutation.

Technical Note on the Logic of Training and Grouping

You should generally be able to just go with the  flow of suggestions offered by WP Issues CRM.  However, for those interested in understanding how that flow is generated, here are some notes about the rules governing the process.

  • The inbox only groups messages if they look like messages that have previously been acted on — recorded or replied to — and Train was checked when the action was taken.
    • The subject line is binary identical to a previously trained message ( or matches a wildcard subject defined in Subjects ) AND
    • The content matches a previously trained message at the level required in Settings
      • The required percentage of sentences (by character count) match AND
      • The message is long enough
    • The subject line and content matches must agree as to what issue/pro-con combination they point to
    • The inbox will ungroup otherwise groupable messages if the sender addresses do not parse at the accuracy level required in settings
    • See code in WIC_Entity_Email_Inbox::load_inbox in wic-entity-email-inbox.php
  • The option to Train is offered at the time a message is recorded or replied to only if:
    • Issue has been assigned and a reply standard has been saved or loaded since the issue was assigned OR
    • You are only recording not replying — in this case, if there is no reply template, when you sweep, messages will be recorded, but not replied to OR
    • The count of messages in the current subject line is greater than one — in other words, the messages meet the requirements above for grouping (they had to have been previously trained)
    • See code in wpIssuesCRM.processEmail in email-process.js.
  • When Train is checked and a message is submitted to reply or record, the processor (WIC_Entity_Email_Process::handle_inbox_action_requests in wic-entity-email-process.php ) saves two mappings:
    • A single mapping of subject line (binary exact) to issue/pro-con combination (WIC_Entity_Email_Subject::save_new_subject_line_mapping in wic-entity-email-subject.php) — subject lines from future messages will be mapped using the most recently saved (matching) subject-line mapping to an issue/pro-con combination.
    • For each sentence in the message (excluding sentences recognized as addresses) a mapping of that sentence to the issue/pro-con combination (WIC_Entity_Email_MD5::create_md5_map_entries in wic-entity-email-md5.php).  Sentences in future messages will be individually compared to previously mapped sentences and the issue/pro-con combination getting the most sentence votes from the most recently mapped matches (weighted by sentence length) will be assigned (WIC_Entity_Email_MD5::get_issue_and_pro_con_map_from_md5 in wic-entity-email-md5.php).
    • As noted above under grouping, mappings are used only if the subject map agrees with the sentence map.
  • Only messages meeting the criteria above for grouping will be flagged as sweepable.  When you click the >> sweep button, all sweepable messages are sent to the server for processing:
    • They will be recorded to their last mapped issue/pro-con.  If they have been unmapped (by another instance someone else has open), they will be bypassed and still available for processing upon inbox refresh.
    • If there is no saved reply template for their last mapped issue pro-con, they will only recorded
    • If there is a saved reply template for their last mapped issue pro-con, that reply will be generated.
    • See code in WIC_Entity_Email_Process::handle_inbox_action_requests in wic-entity-email-process.php.
  • Some consequences of these rules are:
    • Messages are never grouped in the inbox until one of the matching group has been trained
    • Message grouping is conservative — this may mean a few more clicks in some cases, but minimizes risk of replying incorrectly.
    • When you make a quick reply to a message without saving or using a standard reply, you are not offered the option to train (and, in fact, are not required to confirm the action)
    • You can train messages without replying — this supports a work flow of accumulating messages for later reply.
    • If you train a message for sweeping with a reply, but later delete the reply from the Saved list, then sweeping will record matching without replying to them.

Using Forms with WP Issues CRM

With WP Issues CRM you can design your own custom front end forms using Contact Form 7 or Gravity Forms, and then feed the data directly into WP Issues CRM, giving you all the power of WP Issues CRM to organize the data and use it for communications.

Possible applications include:

  • New case intake
  • Event registration
  • Online fundraising (with a payment gateway like Stripe linked to your form).
  • New post creation for guest users combined with constituent interest tracking.

When you submit an interfaced form, WP Issues CRM will:

  1. Check if you have a matching constituent (based on the information the form includes).
  2. If no matching constituent, create a new constituent record.
  3. Optionally, update the matched constituent with form information.
  4. Add an activity record, logging the form submission or transaction and capturing additional data.
  5. Optionally, assign the constituent as a case to a particular staff member
  6. Optionally, create a new front facing post from the submission

The steps to setting this up are:

  1. Choose and install one of the form plugins.
  2. Build a form.
  3. Go to WP Issues CRM » Interfaces on the WordPress main admin menu.
  4. Create a new interface linking that form into WP Issues CRM.
  5. Map the fields occurring in the form to the standard WP Issues CRM fields and any custom fields you have created.

You can create as many interfaces as you would like using one or more form plugins.

Data Maintenance in WP Issues CRM

Many offices obtain lists of constituents from outside sources, for example voter, lists.  In the typical case, the office will record activities with only a fraction of the constituents in the database.  When an updated list becomes available, it may make sense to purge all constituents for whom one does not have any office-generated information.  The manage storage screen is designed to accommodate this kind of update cycle.  In addition, it supports the purging of staging files for uploads which are just duplicative once the upload has been verified.managestorage