A technical contribution for CRM resulting from discussions this morning with the CRM sprint group.
One major issue is the nature of a contact. In an online business all contacts might be drupal users but another may all be contacts in a database. An extreme is where contacts are twitter or facebook users and the only information stored is the user identifier with all data stored on the remote system.
It might be possible to define a contact table or list of fields to cover all eventualities but perhaps that might be left to particular implementations rather than the CRM system itself. One idea is the concept of a ‘party’ which is a reference to a particular contact field.
A subset of fields might apply to some types of party record, for example the first and last name. However this is not universal and it might be difficult to define universally. Microsoft CRM for example has four entities that are considered a party: users, contacts, companies and leads.
One idea therefore is to create an abstract programming construct that is a party. The object would have hooks to connect to data sources of different types and might have the following functionality:
• Query to return a selection of contacts.
• Query an individual contact to return communication methods so we can discover how to email, sms, physically post a letter, post to a wall, twitter and so on with a particular contact.
• Add, retrieve, modify and delete contact data.
• Add actions against a contact to record historical activity or future scheduled activity. A similar abstraction for action type so an action can be an email/phone call/letter and so on.
• Allow a case to have multiple actions.
• Similarly for events.
• Ability to specify ownership of a contact to allow permissions to apply against a contact.
• Relate contacts to each other.
This seems to me a flexible approach to a CRM implementation based around the concepts of a party and actions/activities and communication channels with ownership and relations between contacts.