Jump to content


Most Liked Content


#15080 Gravity Forms Integration Solution [SOLVED AND AVAILABLE]

Posted by eugeneb on 28 September 2018 - 08:38 AM

To anyone interested.

 

I have long since been looking for an elegant solution for integrating another more flexible form-tool for WordPress with X2CRM. Some other guys tried developing WordPress plugins but I was never able to work with that.

 

I extensively started using Gravity Forms (GF) on all my and customer sites due to its incredible flexibility and ease of use. Using GF I tend to always ask the contact details and then my custom field, which I don't always need in X2, but would like to capture the contact and maybe do some cool automation stuff. I tent to prefer not to hard code, to avoid custom dependency.

 

I found a great and elegant solution for this and it works great. 

 

Using Gravity forms there is a little known GF plugin called SEND TO THIRD PARTY. This simplifies the RestAPI POST call by giving you a simple plkug and play type page with additional GF settings. Install the plugin in WordPress and in Gravity forms you can easily set it up to post to X2CRM by completing some key fields.

 

I initially had a problem accessing my API which I was able to solve on this forum thread: http://community.x2c...ut-not-getting/

 

So now I can use GF fully and send the contact and fields info over to X2CRM. Adding tags directly, making lists and using X2Flow Record Create triggers do even more with the new record comming in from GF.

 

I hope this helps someone else that also wants to use Gravity Forms for more advanced form features on your website.




#14684 An Open Letter to John

Posted by PublishItNow on 13 February 2018 - 11:49 AM

Hi John,

 

First of all, can I emphasise how big a fan I am of X2Engine! I love it. On top of a solid CRM, if I want a custom solution, I can deep dive into the code and craft a response to my unique situation. I'm able to fix bugs, and change anything I want. Under the old licence structure I was a paying Pro customer. There are many many positives about X2Engine.

 

There's been a change over the last 12 months though.

 

Right now, there's no roadmap, something every tech company at your stage of development has, and requests for one aren't being responded to. It would be great to know whether feature requests are being incorporated into your planning, and if not, why not? You have sent out a newsletter telling us there's a new major release coming this month, but no information about what's in it.

 

There's still quite a few unresolved bugs being reported in the forums (after all, we are your beta testers). 12 months ago, Raymond was all over bugs, actively working on solutions and active in the forums. These days we get acknowledgement, and little more. No progress updates, even when we've done the leg work to replicate the bug, narrow down the problem or even provide you with the code to fix it. 

 

Why should you care if an open source user is unhappy with the current situation? I'm getting the software for free right?

 

I'm working on a custom solution for my business using X2Engine. Having access to premium support to point me in the right direction when I hit a roadblock and getting priority attention on bugs is something I would pay for. In November, I replied to your email broadcast inviting past paying customers to connect and discuss the new paid programs with a clear "I want to pay for your service. Can you please answer these questions". Despite two followup emails on my part, I've heard nothing from your team.

 

Please let me repeat that. I offered to pay for your product, and I haven't even had an acknowledgement. 

 

Finally, your current plans don't have a midrange on premises option anymore. I'd be paying for the older Platinum plan right now if you still operated under that structure, a plan that's ideal for my situation at the moment. The closest fit to my needs is your Partner Program.

 

So what am I asking of you?

  1. Please communicate more. Let us know what your developers are working on. We want to feel like we're involved with the evolution of your product.
  2. Please prioritise bug fixes. This is crucially important to both your open source community, and your paying customers. 
  3. Please ask your sales people to reply to emails. This is business 101. The window where I'm interested in paying is closing quickly, indeed it may have already passed. Having an option that closely meets my needs, but is only available by talking to your sales people makes it difficult to give you money when they don't reply.

I'm not here to create problems. I'm a business owner, and would certainly value any of my customers coming to me to highlight problems they're having with my products. I hope you take this message in the spirit in which it's given, a desire to see X2Engine continue to grow and develop.

 

Warmest regards,

Andrew




#15700 In Memoriam

Posted by X2Peter on 07 June 2019 - 12:31 PM

We have a sad announcement this afternoon regarding a very special user here. Atilla, who was with us since June of 2017 passed away this month. On behalf of X2CRM I would like to send his family and friends our condolences and to Atilla personally, our appreciation for all the hard work he put on this forum. Without Atilla, X2CRM would not be where we are today and we want to again thank Atilla for all the effort he put into this forum. Thank you Atilla, and may you rest in peace.

Sincerely,
The X2CRM team




#15220 Known Issues with ver 7 upgrade

Posted by X2Peter on 29 October 2018 - 09:51 AM

Hello Donna,

 

X2CRM is not compatible with PHP 7.1 at this time. We will reach full compatibility before Mid-December. We do recommend backing up any site files as well as the database before update.




#12606 X2TechTalk V - X2CRM 6.5 Preview

Posted by John Roberts on 21 December 2016 - 02:12 PM

Hello everyone,

 

Boy this TechTalk is a bit overdue, I delayed it a few week so we could give 6.5 more time. It does provide good introductions to new location or X2Checkin, Google Maps, major Calendaring and Google sync improvements and X2Touch mobile 2.0 features. We are about to release 6.5.2 within the next few days. Over the coming weeks we are planning to do major documentation, video and website updates to help show you how to easily design, deploy and manage your X2CRM system.

 

X2TechTalk V: X2CRM 6.5 Preview

https://player.vimeo...&profile_id=174

 

Best, 

X2CRM Team




#10513 X2CRM 5.2 Summer Release Roadmap

Posted by John Roberts on 01 July 2015 - 02:22 PM

Hello X2CRM Community,

 

With X2CRM 5.0 release this past December we have been spending most of 2015 working on fine tuning X2 with a number of small releases ending with 5.0.9. On the side we have been working on our next functional enhancement release, X2CRM 5.2 scheduled for release at the end of July or the first week of August. It is likely we will follow 5.2 with 5.3 in September including additional mostly calendar focused enhancements. We will be sending out newsletters and such with more detail, until then here is high level list of the features planned for 5.2-3 later this month. 

 

X2CRM 5.2 - End of July Release

X2Flow Macros Buttons on Detail Records - so user can activate an X2Flow on a record 

Topics Discussion Board, extension of Activity Feed

- Themes - Color Coded Modules
- Major Module Detail View UI Update 
- Calendar Enhancements  
- Campaigns/Marketing Easy of Use Enhancements 
- Packaged Cloud Deployment options - AWS,  Digital Ocean, GoogleCloudCompute, X2VPS 
- Import/Export Worksheets for mass record updates 
- Mass Action updates for Tags, Actions, Comments, more 
- Deduplication Improvements 
- X2Flow Robustness Enhancements
- User Permissions Roles update performance improvements 
- New Documentation and Training Videos - see http://www.x2crm.com...aining-library/
- Weblead widget for Activity Feed Dashboard 

- Email Widget for Activity Feed Dashboard

- Updated, improved Administration Panel 

- X2CRM App Rebrand, removing X2Engine branding. 

X2CRM 5.3 August/September 
- Calendaring 5.3 

- Two way Google Calendar/Contact Synch 
- User Statistics  
- Wordpress Plug-in 
- Reports 3.0
- Scheduled Campaigns 

 

X2CRM 6.0 December/January 2016

- Yii 2.0 

- TBD

 

 

Best,

 

X2CRM Team

Santa Cruz




#9761 How-to: X2flows - Send an SMS with Twilio using Zapier

Posted by that0n3guy on 23 February 2015 - 01:06 PM

This how-to will be a little bit technical, but its really not that bad.  It also requires the pro or platnium downloadable version of x2engine.  It also requires the use of composer...

 

Setup

  • Install Composer: Make sure you have composer installed: https://getcomposer....-linux-unix-osx
  • Add phone number package: Add https://github.com/g...enumber-for-phpto your main composer.json: composer require giggsey/libphonenumber-for-php:~7.0
  • Add composer autoload to config files:
    • Create the file custom/protected/config/web.php . Add to the top (after <?php):  require_once dirname(__FILE__)."/../../../vendor/autoload.php";
    • Create the file custom/protected/config/console.php . Add to the top (after <?php):  require_once dirname(__FILE__)."/../../../vendor/autoload.php";
    • Also add to the bottom of custom/protected/config/console.php: $config['components']['request']['hostInfo'] = 'https://yourx2.domain.com';

Setup should be done.   Reload your site, see if it still works.  If not, you broke something.  Also test out a console command and see if it still works.

  • NOTE:  In my custom console.php, I also have to have this line: unset($config['controllerMap']); // Fix weird error when running console commands.  Some where proConfig.php is getting included.
    • I'm not sure why... could be my servers setup... could be an x2engine bug.

Create a custom shortcode.php

  • Create a new file here: custom/protected/components/x2flow/shortcodes.php
  • Add the following contents to the shortcodes.php: 
<?php

/* pulling the "core" file so that if it changes, my tweaks will just be added to the end */
$originalFile = str_replace(DIRECTORY_SEPARATOR.'custom','',__FILE__);
$shortcodes = include($originalFile);

$myShortCodes = array(
    'twilioFormattedPhone'=> '
        $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
        try {
            $USnumberProto = $phoneUtil->parse($model->phone, "US");
            $formatedphone = $phoneUtil->format($USnumberProto, \libphonenumber\PhoneNumberFormat::E164);
            return $formatedphone;
        } catch (\libphonenumber\NumberParseException $e) {
            //@todo do something here??
        }
    ');


return array_merge($shortcodes, $myShortCodes)
?>

This basically adds any shortcodes we put in this file to the default shortcodes that are found here: protected/components/x2flow/shortcodes.php .   The above file adds the shortcode {twilioFormattedPhone}.  This is JUST for the contact field with the name of 'phone'.   I should note that if you use this on other entities (opportunities, accounts, etc...) it won't probably won't work.  If you have a contact field called something different than 'phone'... you can change where you see `$model->phone` above to `$model->yourphonefield'.

 

A {twilioFormattedPhone} shortcode will be replaced with a phone number formatted in a way that twilio likes.  

 

How to use it in x2flows

 

Use a remote api action like so:

Attached File  x2_send_sms_zapier.png   30.59KB   4 downloads

 

  1. The url provided by zapier
  2. our shortcode (the phone number formatted how twilio likes).
  3. our message that we want sent
  4. A key.  Used just so that other people can't use our zapier url to send SMS's to people.

Setup Zapier like so:

 

Attached File  x2_send_sms_zapier_zap.png   430.47KB   4 downloads




#9319 use x2idenity data to add or remove from remarketing

Posted by that0n3guy on 06 January 2015 - 09:09 AM

My progress (untested... going live on my site today so I can test).  

 

So, basic usage.  

 

Step 1: Enable UserID in your google analytics account:

Admin->tracking info->user id.  See this image: http://screencast.com/t/nUv0J3MhdGZ

 

Step 2: Add the following javascript to your site (below the webTracker.php script):

    /**************************************************************
     * included from http://www.quirksmode.org/js/cookies.html
     *************************************************************/

    function createCookie(name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else var expires = "";
        document.cookie = name + "=" + value + expires + "; path=/";
    }

    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }
        return null;
    }

    function eraseCookie(name) {
        createCookie(name, "", -1);
    }

    /**************************************************************
     * Actual code below
     *************************************************************/

    var cookieRegistry = [];

    function listenCookieChange(cookieName, callback) {
        setInterval(function() {
            if (cookieRegistry[cookieName] || readCookie(cookieName) != null) {
                if (readCookie(cookieName) != cookieRegistry[cookieName]) {
                    // update registry so we dont get triggered again
                    cookieRegistry[cookieName] = readCookie(cookieName);
                    return callback();
                }
            } else {
                cookieRegistry[cookieName] = readCookie(cookieName);
            }
        }, 100);
    }

    /**************************************************************
     * Test below
     *************************************************************/

    // bind the listener
    var x2cookieName = 'x2_key';
    listenCookieChange(x2cookieName, function() {
        // Set the user ID using signed-in user_id.
        if (readCookie(x2cookieName) != null) {
            ga('set', '&uid', readCookie(x2cookieName));
        }
    });

So, my site looks like so: 

<script src="https://x2.myx2site.com/webTracker.php"></script>
<script>
    /**************************************************************
     * included from http://www.quirksmode.org/js/cookies.html
     *************************************************************/

    function createCookie(name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else var expires = "";
        document.cookie = name + "=" + value + expires + "; path=/";
    }

    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }
        return null;
    }

    function eraseCookie(name) {
        createCookie(name, "", -1);
    }

    /**************************************************************
     * Actual code below
     *************************************************************/

    var cookieRegistry = [];

    function listenCookieChange(cookieName, callback) {
        setInterval(function() {
            if (cookieRegistry[cookieName] || readCookie(cookieName) != null) {
                if (readCookie(cookieName) != cookieRegistry[cookieName]) {
                    // update registry so we dont get triggered again
                    cookieRegistry[cookieName] = readCookie(cookieName);
                    return callback();
                }
            } else {
                cookieRegistry[cookieName] = readCookie(cookieName);
            }
        }, 100);
    }

    /**************************************************************
     * Test below
     *************************************************************/

// create the cookie
//    createCookie('foo', 'bar');

    // bind the listener
    var x2cookieName = 'x2_key';
    listenCookieChange(x2cookieName, function() {
        // Set the user ID using signed-in user_id.
        if (readCookie(x2cookieName) != null) {
            ga('set', '&uid', readCookie(x2cookieName));
        }
    });
</script>

A minified version of the above script is as follows:

function createCookie(e,t,n){if(n){var r=new Date;r.setTime(r.getTime()+n*24*60*60*1e3);var i="; expires="+r.toGMTString()}else var i="";document.cookie=e+"="+t+i+"; path=/"}function readCookie(e){var t=e+"=";var n=document.cookie.split(";");for(var r=0;r<n.length;r++){var i=n[r];while(i.charAt(0)==" ")i=i.substring(1,i.length);if(i.indexOf(t)==0)return i.substring(t.length,i.length)}return null}function eraseCookie(e){createCookie(e,"",-1)}function listenCookieChange(e,t){setInterval(function(){if(cookieRegistry[e]||readCookie(e)!=null){if(readCookie(e)!=cookieRegistry[e]){cookieRegistry[e]=readCookie(e);return t()}}else{cookieRegistry[e]=readCookie(e)}},100)}var cookieRegistry=[];var x2cookieName="x2_key";listenCookieChange(x2cookieName,function(){if(readCookie(x2cookieName)!=null){ga("set","&uid",readCookie(x2cookieName))}})

What this does:

 

This basically sets the universal analytic userID if the user on the site to the x2_key (web tracking code) for that user.  If the webTracker changes the x2_key, it will see that it changed and change the userID as well.

 

Why do this:

I've not tested this yet.  But you should be able to setup some x2flows that will send user data to google via the "remote api call" trigger.  

 

For example.  User gets tagged with "white t-shirt".  Then you send an event to google like: 

http://www.google-analytics.com/collect?v=1&tid=UA-123456-1&uid={trackingKey}&t=pageview&dp=x2engine%2Fwhite-t-shirts

The above essentially logs a website "hit" at the url "x2engine/white-t-shirts"  (so if your domain for UA-123456-1 was "mysite.com", the url would be mysite.com/x2engine/white-t-shirts).  Now you could do remarketing campaigns based on website users who have been to "x2engine/white-t-shirts".

 

Issues with this:

  • I've not tested this fully yet. 
  • The url needs to be UTF-8 encoded.  That means that if you try to insert things with spaces from x2engine (example: {firstname}... don't do firstname though, google doesn't like personally identifiable info), it probably won't work.  So if you add a web url like I did (ie, x2engine/white-t-shirts) you will have to encode it yourself (http://meyerweb.com/...tools/dencoder/).
  • The documentation from google says you need a "cid" perameter, I don't know if that is true IF you have a UID (based on http://cutroni.com/b...-the-user-id/).

References:




#15586 NO ZAPIER SUPPORT IS KILLING X2 CRM

Posted by X2Peter on 20 March 2019 - 12:42 PM

The integration is still a WIP but you can start using it by going to this link: https://zapier.com/d...e0c6e13c80b9da/

 

Our goal is to convert all of our workflow triggers to Zapier triggers and to convert most native actions to Zapier actions. Please feel free to update this thread with any questions/comments regarding the Zapier integration.




#15186 7.0 Release Notes

Posted by jack on 22 October 2018 - 02:00 PM

 

7.0

  • General Changelog / Developer Notes

    • Expanded Listability

      • List capabilities for Accounts, Opportunities, Leads, so all 3 can now can be curated into smaller data sets, added into campaigns at any time.

      • Ability to campaign using list made from Contacts, Accounts, Opportunities, and Leads.

    • New Conversion Tool

      • Convert Lead to Contact - for additional opportunities

      • Convert Contact to Lead - for new opportunities

      • Assign Leads and Contacts to Accounts - for account based management.

    • Multiple levels of Unsubscribe

      • Changed the Unsubscribe Page so that it will now scan for the text “(PLACE_OPP)” on your unsubscribe page and replace it with a list of options for unsubscribing. If it can’t find this text it will mark the lead or contact “doNotEmail” and echo out the text “You will no longer receive emails from this sender.”

    • Improved email send performance - bulk custom email delivery improved performance up to 10X pending hosting provider, database and network performance

    • Microsoft Outlook ® calendar integration

    • Miscellaneous bug fixes

      • Addressed issues with google calendar sync fixing when calendar had too many events the connection would time out

 

We are pleased to announce the release of X2CRM Open Source version 7.0. This release features a number of new capabilities including major updates to our Marketing Automation, new listing capabilities, conversion options, and a new outlook calendar integration.

 

Listibility for all! The list tools are now included within the Accounts, Opportunities, and Leads modules. Build dynamic or static lists as needed, then separate your data the way you want.

 

X2CRM has expanded Campaign usability. Campaigns can now be run using lists from Accounts, Opportunities, and Leads. On top of that, we have added a suppression list and multiple levels of unsubscribe for marketing teams to implement.

 

A new Outlook for X2! Your Microsoft Outlook calendar can now be synced to X2CRM so you never miss an event or meeting, and your events associated with customers and prospects are tracked.

 

7.0 ushers in a new era for open source CRM. Please provide comments, feedback and requests within our community forums. As always, thank you for your support.

 

The X2Engine Team.

 



#15097 X2CRM Security Fixes

Posted by X2Josef on 03 October 2018 - 04:55 PM

It has been brought to our attention that three vulnerabilities were found in our app. Please take the chance to look over the following fixes for these vulnerabilities and apply them to your installations. These fixes will also be included in our next version. 

 

Fixes: 

  1. Exception handling for invalid input to prevent SQL injection from the ActionHistoryChartWidget
  2. Permission check for Arbitrary file download via the global export in the admin control panel and when exporting themes
  3. Field purification when processing requests to prevent cross-site scripting (XSS)

Files:

Pull Request:

https://github.com/X.../X2CRM/pull/160

 

Make sure to take backups before applying any of these changes of course!

 

 

 

Thank you to SYSDREAM for bringing these vulnerabilities to our attention




#15043 Lists - mass functionality

Posted by eugeneb on 30 August 2018 - 08:46 AM

Agree to this being helpful.

My work around is using the top field filters on Contacts to get the same basic list, using conditions (only for dynamic) obviously, and then bulk updating.

Or on the list, bulk ad a unique tag then using the same technique as above to get the list contents but under contacts, where you can do anything more.


#14499 Adding custom fields

Posted by wllmdodge on 01 January 2018 - 08:24 AM

A little bit of trial and error mixed in with some choice words. I came up with a workaround. "={c_Revenue}- ({c_paidmiles} > 75) *{c_FuelSurchargeRate}*{c_paidmiles}"




#14374 Hyperlinks - Click here

Posted by alt_f4 on 30 November 2017 - 08:02 AM

See also here http://community.x2c...in-file-system/may we can find a solution...

 

As a workaround, we´ve configured a (local) webserver with directory-brwosing pointing to our file-server.

 

Then defined a custom filed:

 

<a href="http://fileserver/{c_path}/{name}.pdf"{c_hrefblank}>{name}</a>

 

But the user has to manually fill in the file-name and put the file to the fileserver manually also. But with the custom filed, from now the file is accessible by X2.

 

c_path = directory on the webserver (changed from year to year by admin)

name = filename manually

c_hrefblank = just a string to open in new tab




#13893 SHIFTING OF A RECORD FROM ONE MODULE TO ANOTHER in X2CRM

Posted by Walter on 19 October 2017 - 02:09 AM

you have to create trigger, for example "Record Updated" -> Compare attribute "Sales Stage: Won" -> Create record: record type accounts; Select Name and set attribute to "={name}". See attachments

 

1.

Attached File  lead_won02.PNG   29.15KB   2 downloads

 

2.

Attached File  cr_ACCT_with atrr.PNG   26.18KB   1 downloads




#13543 Sharing Custom changes to X2CRM

Posted by gsonline on 20 July 2017 - 01:05 AM

Hi, 

 

If I have a developer make custom improvements to X2CRM is there a way to share it with the rest of the community or a way to share it with the X2CRM team to maybe add it to the next X2CRM release.

 

Thank you  




#13069 X2CRM and Mailchimp Integration [solved]

Posted by dbastreghi on 16 March 2017 - 07:28 AM

Hi,

 

After many hours trying to integrate X2CRM and Mailchimp, I finally found something that may be usefull. It sends every contact to a Mailchimp list.

 

Follow this steps:

 

1. Ceate a Workflow with the trigger "Record created" to contacts.

 

2. Add the action "Remote API Call" to the flow.

 

 

3. Fill the fields like this:

 

URL: https://[your-mailchimp-server].api.mailchimp.com/3.0/lists/[your-list-id]/members

Method: POST

Use JSON payload? Checked

JSON:

{
    "email_address": "{email}",
    "status": "subscribed",
    "merge_fields": {
        "FNAME": "{firstName}",
        "LNAME": "{lastName}"
    }
}

 

4. Click on "Add Header" and fill it:

 

Name: Authorization

Value: apikey [your-api-key]

 

5. It would be enought to it works. But there is a bug on X2CRM 6.5.2 that replaces the tag {email} with HTML code. So Mailchimp wont recognize it. To fix it, open the file /protected/components/x2flow/actions/X2FlowApiCall.php and add code bellow at line 210:

 

$data = strip_tags(htmlspecialchars_decode($data));

 

- - - - - - -

 

If you know nothing about it, check out this video: https://teamtreehous...rs-to-your-list

 

That's all.




#12703 Day 2, Switching to X2Engine from SuiteCRM

Posted by gnurob on 12 January 2017 - 05:08 PM

I'm on day 2 of an evaluation of X2Engine. What began as a skeptical test has quickly turned into a migration, complete with importing all Contact records and re-creating automated tasks. X2Engine is obviously a well polished, thoughtfully designed, and robust web application for CRM. A few subtle features are missing, however this is easily my preference versus poorly integrated and often buggy features in other systems.

 

My experience with CRM systems, in the past, has been a frustration, almost to the point of being a nightmare. In comparison, X2Engine (or XCRM if you prefer) has worked out of the box. In two days I have familiarized myself with the nuances of this systems Lead and Contact routing and how it manages the sales process (in my case, the customer service process, but more on that later). Later moving on to quotation forms, e-mail templates, and advanced features with automation (X2Flow).

 

In my experience, automation is the most difficult to accomplish in any system. The most common obstacles are visualizing logic paths, diagnosing failed triggers, and interacting with related records. X2Flow masterfully answers this by providing a visual flow chart with easy to follow graphics, a per flow trigger log that expands to provide step-by-step success/fail messages (super handy), and the ability to switch record types mid-flow. The latter requiring all sorts of error prone hoop jumping to accomplish.

 

X2Flow also has a healthy selection of variables (called attributes) that may be placed in form fields (as well as used anywhere else in the system). My only suggestions would be that formulas be expanded to include dates, and that the quote and calendar modules be as well integrated with XFlow as Contacts, Accounts, Opportunities, etc. (It actually feels bad to mention this as it works so well this is almost being too picky.)

 

For my purposes, a CRM is best used to provide a consistent high level of service to people that require my services in residential home inspection, commercial property condition assessment, and related consulting and design work. Since there are usually many individuals involved, contract values in real estate tend to be very high, and there is a high degree of reliability expected of my services; coordination and documentation are very important.

 

In 48 hours, this is what my system has been configured to do, with a great deal of assistance from templates, processes, workflows, and built-in relationships:

 

9:22 AM A potential client calls to require a home inspection.

  1. Made new Contact and Account over the phone
  2. Started a Quotation using a standardized template, set status to Draft
  3. Inserted several standard products into Quotation
  4. Saved Quotation, triggering an automatically created Opportunity
  5. Quoted client by e-mail (this later triggering Quotation status to be set as Issued)
  6. Issued Quotation triggering:
  7. - updated Contact lead information (status = working, deal value, assigned, confidence, etc.)
  8. - updated Account lead information (similar... and I wish I knew why we do this twice in CRMs)
  9. - E-mailed Contact a standard introduction
  10. - Created an Action reminder to set Quotation to Won before:
  11. --A 1-day follow-up
  12. --A 30-day closing.
  13. Updated the Quotation to Won (thank you to my new client)
  14. This automatically triggering:
  15. - Updates to Contact, Account, and Opportunity values
  16. - Starting the Inspection and Report Process to stage one, Quote Accepted
  17. - Several Actions to remind me to send notices to various 3rd parties including the property owner
  18. The Opportunity is used by me as a means to track each inspection contract, as it is the module that most easily connects several related records. Therefore, it is here that I add other Contacts as related to this record:
  19. - Buyers Agent
  20. - Vendors Agent
  21. - Property Owner (usually private sales)
  22. - etc.
  23. At any point, I can visit these other Contacts and see all the times we have worked on the same properties.
  24. Once an inspection is scheduled (this is manual, as Calendar is not well integrated) and the Inspection and Report Process is updated to that stage, a reminder is set to create the invoice.
  25. Creating an invoice sets various reminders, including 30, 60, and 90 days.
  26.  Once a report is issued, I believe follow-ups are important. Mainly to see where assistance may be required, but also because feedback drives improvements:
  27. - 24 hours, e-mail to confirm report received, can be opened, and if any questions have been raised (more than 1/2 the time clients have questions they didn't feel comfortable calling to ask).
  28. - 2 days, e-mail requesting feedback with link to form
  29. - 3 months (roughly following a change of season), a remind to revisit the report and address the most important areas as they relate to the upcoming season

9:30 AM I'm having coffee.

 

All these above 29 steps were easily built into my own work flow and help me best serve my clients. I don't believe this would be reasonable for an individual to tackle by themselves, but with the help of modern technologies, like X2CRM, the service level of my business is first class.

 

I hope these serves as a testimonial for anyone considering X2Engine for their own business, sales or otherwise. If this can be accomplished in 2 days, by one person, what can a team of people do in a year?

 

Cheers,

 

Rob




#11493 X2CRM 5.4.2

Posted by X2Raymond on 07 January 2016 - 12:39 PM

5.4.2

1/7/2016

  • General Changelog / Developer Notes
    • X2Touch changes:
      • Added support for the Topics module
      • Module form layouts can now be customized from the new "Mobile App Form Editor" admin page
    • Improved error handling of automated email logging
    • Action History "Email From" filter now includes logged inbound emails
    • New option on the "Email Settings" admin page to enable List-Unsubscribe email header
    • Updated module delete functionality to clean up associated custom module summary widgets
    • Updated Process module to allow for financial information on any module type
  • Tracked Bug Fixes:
    • 3189: CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't.createDate' in 'having clause'
    • 3283: file_exists(): open_basedir restriction in effect. File is not within the allowed path(s)
    • 3296: CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'Admin' for key 'PRIMARY'
    • 3300: array_flip(): Can only flip STRING and INTEGER values!
    • 3302: CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'active' at row 1
    • 3303: CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tags' in 'where clause'
    • 3310: X2MergeableBehavior and its behaviors do not have a method or closure named "setMergedField".
    • 3312: The system is unable to find the requested action "id".
    • 3323: Trying to get property of non-object
    • 3324: Eigenschaft "Contacts.Array ist nicht definiert."
    • 3330: Relationships labelling bug



#15626 Known Niggles with Ver 7.1

Posted by eugeneb on 11 April 2019 - 11:04 PM

Hi guys,

 

I have been updating my little bugs and niggles list for the recent version. Maybe someone else also have these with either a solution or not?

 

  1. NIGGLES
    1. Login Screen
      1. the Login Button doesn't have or get focus when login is this for using Enter button on keyboard. Thus after typing details you have to mouse over and click SIGN IN
  2. BUGS
    1. Login action
      1. On log in of all our systems sometimes, after login occured and you are directed to your default dashboard page we get this error: 
        1. Error Code: 500 Error Message: CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'tc0fbig8b9tmpeehf0u9l860l2' for key 'PRIMARY'
    2. Lists
      1. Static list cant add contact in anyway. Can only use Dynamic lists. When selecting contact/s and tryaing to Add to List it just hangs and timing circles just spins
    3. Docs
      1. Folder. Moving an email template/s to another folder where there is more than one page of folder available, you can't select another page to choose your folder. Gives following error Error 404: Unable to resolve the request "docs/getFolderSelector/id".