In the dynamic realm of digital communication, we often encountered a recurring challenge. While interacting with customers via our CRM, we sometimes oscillated between direct CRM chats and traditional emails. This led to scattered information, with conversations about a single lead dispersed across multiple platforms, ultimately resulting in reporting inconsistencies.
Our initial instinct was to opt for the simplest solution: directly connect the email inbox to the CRM. This would, in theory, mirror all incoming emails within the CRM. However, this approach revealed a significant concern: users were apprehensive about their entire inbox being visible within the CRM.
As we grappled with this challenge, inspiration struck from an unlikely source. A comment notification from a Jira ticket email that mentioned the ability to respond directly via email to comment on the ticket. Notably, the email address was unique, resembling something like
<uuid>@jira-support.com. This mechanism intrigued us, leading us to discover that Slack employed a similar strategy.
Buoyed by these findings, we embarked on crafting our solution. Our first step was to purchase a separate domain exclusively for generating UUID-based emails, ensuring that our primary domain's reputation remained impeccable. The subsequent challenge was to modify the 'reply-to' mechanism in emails. Surprisingly, this task, which we anticipated to be the most intricate, was straightforward. By making minor adjustments to our Django-based email wrapper, the 'reply-to' address was transformed into the unique UUID email.
The heart of our solution, however, revolved around fetching and populating and replying to emails. By integrating the UUID email with Amazon's SES, any email directed to it would be securely stored in an S3 bucket. This is where the real magic happened. By configuring the UUID email with AWS's SES, any email directed to it would be saved in an S3 bucket. With the assistance of SNS and Lambda functions, we set up a system where:
- An email sent to our domain is managed by Amazon SES. (1)
- SES rules save the incoming message to an S3 bucket. (2)
- Triggered by SES rules, a Lambda function retrieves the message content from S3. (3)
- The Lambda function then crafts a new message and sends it to SES.(4)
- Finally, SES routes the message to its intended destination. (5)
This intricate setup allowed us to embed both the individual's email ID and the lead's UUID email in outgoing correspondences, granting us the ability to uniquely manage and identify separate email threads and leads.
In conclusion, this innovative approach harmoniously integrated CRM and email communications without being super intrusive. Each conversation regarding a lead was centralised and easily accessible, eliminating past inconsistencies and providing a cohesive communication experience.
For those curious about this approach or looking for innovative tech solutions, feel free to reach out to us at email@example.com.
Yet, it's worth noting that addressing this integration was merely the first leg of our journey. Following our successful implementation, we were faced with the intricate challenges of email parsing and handling attachments. Navigating the complexities of extracting relevant data from diverse email structures and managing various attachment formats presented its own set of puzzles. But, as with our initial challenge, we approached it with the same zeal and innovative spirit. However, delving into those challenges and the solutions we crafted is a tale for another day.
Please refer to this blog if you are interested in the complete nitty-gritties of the implementation