Blueprint by Tiny
Return to Tiny.cloud
Return to Tiny.cloudTry TinyMCE for Free
Search by

How to build a CRM app with TinyMCE Cloud

Joe Robinson

July 27th, 2022

Written by

Joe Robinson

Category

How-to Use TinyMCE

The last thing you want when you’re getting to know a customer, is to either create an awkward impression, or damage your credibility. 

So what are some ways to avoid these problems?

When it comes to credibility, consistency in communication goes a long way.

TinyMCE gives you everything you need to create consistency.

As a rich text editor component, it has features that you and your team can easily use to create and modify content that your customers see, read, and use (without any awkwardness, ideally).

By configuring TinyMCE as the rich text editor-of-choice within your business’s Customer Relations Management system (CRM), you’ll introduce a number of important features and capabilities:

Features and CRM capabilities with TinyMCE
  • 99.9% accurate and clean copy-paste, using PowerPaste
  • Word Count, Search and replace
  • Enhanced image editing inside the text area
  • Preview content before publishing
  • Confirm your links are actually working with Link Checker


And that’s just five of the 60+ features TinyMCE can provide, as your CRM editor component.

Why not try out the editor in a demo? It’s the best way to get to know if a component is right for you, and with TinyMCE, setting up is fast. Be aware though, it does require HTML knowledge to get started.

In this article you’ll find a step-by-step explanation of how to include TinyMCE as your CRM text field editor and how to make use of TinyMCE Cloud (that’s the fastest way to get up and running with TinyMCE 😉).

What you need to get started

You’ll first need to get a TinyMCE API key. Your API key is free, and it also gives you 14 days free access to TinyMCE premium plugins (several of these are included in the CRM starter config provided in this article). Using your API key also stops warning messages in the text editor about domains not registered with Tiny Cloud.

How to get an API key:

TinyMCE does work without an API key. However there will be warning messages in the text editor area:

This domain is not registered with Tiny Cloud.  Please see the quick start guide or create an account

Remove these warning messages by adding your API key as a reference within an app.

  1. Go directly to the Get-tiny sign up page
  2. After typing in your account information, select Sign up.
  3. When you arrive at the dashboard screen, your API key appears on the page.

How to set up a CRM editor component with TinyMCE Cloud

The steps to get a CRM configuration started are straightforward, although here’s where the previously mentioned HTML knowledge, comes into play:

  1. In a new folder on your computer workstation, create an index.html file.

  2. With your new file open, add the essential HTML:

<!DOCTYPE html>
  <html lang="en">
  <head>
  </head>
  
  <body>
  </body>

</html>
  1. Copy and paste this content between the head section tags of your HTML file.

<script src="https://cdn.tiny.cloud/1/your-api-key/tinymce/6/tinymce.min.js" referrerpolicy="origin"></script>

Replace the “your-api-key” with your API key from your TinyMCE account.

  1. Next is the tinymce.init script. Add the following to your HTML file after the API key script:

<script>
tinymce.init({
                selector: "#editor",
                menubar: false,
                statusbar: false,
                plugins: 'lists link emoticons image editimage advcode linkchecker template powerpaste tinymcespellchecker autoresize',
                toolbar: 'undo redo spellchecker | formatgroup | link emoticons image template tokens | code',
                toolbar_groups: {
                    formatgroup: {
                        icon: 'format',
                        tooltip: 'Formatting',
                        items: 'blocks fontfamily fontsize | bold italic underline strikethrough forecolor | align bullist numlist outdent indent blockquote'
                    }
                },
                toolbar_location: 'bottom',
                min_height: 300,
                max_height: 500,
                autoresize_bottom_margin: 20,
</script>
  1. Add the a textarea tag, with an id that matches the selector value in the TinyMCE init script:

<textarea id="editor">
    <h1>TinyMCE</h1>
</textarea>
  1. Save these changes

Next steps

What you’ve just completed is the initial CRM editor configuration, and you can now integrate it into your CRM as a component for text entry.

The next section builds on this essential configuration.

Configuring a CRM editor around TinyMCE

This CRM editor config draws some sample content from the TinyMCE CRM config.

The first change to make is showing how TinyMCE fits into a CRM. So, here’s how to shape the CRM config:

  1. Add the templates plugin values into the tinymce.init script after the autoresize plugin configuration: 

     templates: [
                        {
                            title: 'Outbound email',
                            description: 'Outbound cold email for prospects',
                            content: '<p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">Hi  {{ lead.firstname }},</p><p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">My name is  {{ user.lastname }}with  {{ user.organization }}.</p><p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">We help companies just like yours securely store data in the cloud. I wanted to learn how you handle data storage at  {{ lead.organization }}and show you some of the exciting technology we\'re working on.</p><p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">Are you available for a quick call tomorrow afternoon?</p><p style="font-size: 14px; font-family: helvetica, arial, sans-serif;"> {{ user.firstname }}</p>'
                        }, {
                            title: 'Follow-up email',
                            description: 'Follow-up to be sent immediately after discovery meetings',
                            content: '<p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">Hi  {{ lead.firstname }},</p><p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">Thank you for taking the time to explore a potential partnership today! It felt like our product could help you solve some of the issues that you’re having within  {{ lead.organization }}, especially in these areas:</p><ul><li style="font-size: 14px; font-family: helvetica, arial, sans-serif;">The offsite data warehouse will allow you to guarantee business continuity</li><li style="font-size: 14px; font-family: helvetica, arial, sans-serif;">Metered usage will ensure you only pay for what you consume</li><li style="font-size: 14px; font-family: helvetica, arial, sans-serif;">Level III security protocols will mean you will meet security requirements for your jurisdiction</li></ul><p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">I understand that now you will discuss and agree internally on the next step. Please let me know if you have any questions or if there is anything I can do to help. If not, I’ll talk to you next week.</p><p style="font-size: 14px; font-family: helvetica, arial, sans-serif;">Best,<br> {{ user.firstname }}</p>'
                        }
                    ],
                    noneditable_regexp: /\{\{[^\}]+\}\}/g,
    
                    setup: (editor) => {
                        editor.ui.registry.addIcon('token', '<svg enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24" xmlns="<a href="http://www.w3.org/2000/svg">http://www.w3.org/2000/svg</a>"><path d="m0 0h24v24h-24z" fill="none"/><path d="m21 12-4.37 6.16c-.37.52-.98.84-1.63.84h-3v-2h3l3.55-5-3.55-5h-10v3h-2v-3c0-1.1.9-2 2-2h10c.65 0 1.26.31 1.63.84zm-11 3h-3v-3h-2v3h-3v2h3v3h2v-3h3z"/></svg>');
                        editor.ui.registry.addMenuButton("tokens", {
                            icon: "token",
                            tooltip: "Insert token",
                            fetch: (callback) => {
                                var items = tokens.map((token) => {
                                    return {
                                        type: "menuitem",
                                        text: token.text,
                                        onAction: () => {
                                            // Insert content at the location of the cursor.
                                            // https://www.tiny.cloud/docs/tinymce/6/apis/tinymce.editor/#insertContent
                                            editor.insertContent(token.value);
                                        }
                                    }
                                });
                                callback(items);
                            }
                        });
                    },
    
  2. Add style content for the rich text editor after the templates plugin configuration:

     content_style: `
                       body {
                        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', Helvetica, Arial, sans-serif;
                        font-size: 14px;
                        line-height: 1.5rem;
                        }
    
                       h1 {
                        font-size: 24px;
                       }
    
                       h2 {
                        font-size: 18px;
                       }
    
                       .mceNonEditable {
                         background-color: #e7ecff;
                         padding: 1px 0;
                         color: #4059b3;
                         font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
                         font-size: 0.9375em;
                       }
                     `
                });
            </script>
  3. Next add style tags inside the head section of the HTML file, and include some CSS:

    <style>
                body {
                    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, sans-serif;
                    font-size: 14px;
                    margin: 2rem;
                }
    
                main {
                    max-width: 800px;
                    margin: auto;
                }
    
                .box {
                    cursor: not-allowed;
                    color: rgb(198, 204, 220);
                    max-width: 42rem;
                    margin: 0 auto;
                    display: flex;
                    align-content: flex-start;
                    gap: 2rem;
                    align-items: flex-start;
                    line-height: 1.125rem;
                    font-style: normal;
                    font-weight: 500;
                    font-size: 0.875rem;
                }
    
                .heading {
                    align-content: flex-start;
                    margin: 0 auto;
                    padding: 0.75rem 0;
                    background: rgb(255, 255, 255);
                    display: flex;
                    gap: 2rem;
                    align-items: flex-start;
                    line-height: 1.125rem;
                    font-style: normal;
                    font-weight: 500;
                    font-size: 0.875rem;
                }
    
                .button {
                    display: flex;
                    align-content: flex-start;
                    cursor: not-allowed;
                    padding: 0.25rem 0.5rem;
                    font-size: 0.875rem;
                    color: rgb(198, 204, 220);
                    border: 1px solid rgb(223, 227, 236);
                    border-radius: 0.25rem;
                    background: rgb(255, 255, 255);
                }
            </style>
  4. Place some more CRM HTML content inside the body section before the TinyMCE textarea:

    <div>
                <div class="heading">
                    <div class="box">New Task</div>
                    <div class="box">Log a Call</div>
                    <div class="box">New Event</div>
                    <div class="box">Email</div>
                </div>
            </div>
    
            <div class="button">
                <label class="box">From
                    <span>Sarah Humberson <shumberson@tiny.cloud></span>
                </label>
                <label class="box">To
                    <span>Art Vandelay <art@vandelay.website></span>
                </label>
                <label class="box">Subject
                    <span>Following up on our call</span>
                </label>
            </div>
  5. Modify the TinyMCE textarea HTML:

    <textarea id="editor">
                <p>Hi,</p>
                <h2>What's your CRM editor project?</h2>
                <p>Are you:</p>
                <ul>
                    <li>Building a new CRM and need to add rich text editing capabilities?</li>
                    <li>Extending your existing CRM and need a more extensive rich text editor?</li>
                </ul>
                <p>Then use the only WYSIWYG CRM editor that’s trusted by 1.5M devs.</p>
                <p>
                    <strong>Curious about TinyMCE?</strong>
                    Play with this demo to see how our CRM editor works 😊</p>
                <p>Press
                    <img src="https://tiny.cloud/images/solutions/crm-editor/demo/i_formatting.png" width="18" height="18" alt="Formatting"> to see how a toolbar group works, and click on
                    <img src="https://tiny.cloud/images/solutions/crm-editor/demo/i_insert_template.png" width="18" height="18" alt="Insert Template">
                    and
                    <img src="https://tiny.cloud/images/solutions/crm-editor/demo/i_insert_token.png" width="18" height="18" alt="Insert Token">
                    for inspiration to include pre-defined templates and merge tags.</p>
            </textarea>
  1. Finally, add the last HTML content between the textarea closing tag and the closing body tag:

    <div class="heading">
                <div class="box">
                    <label>Related to</label>
                    <span class="button">Vandelay Industries</span>
                </div>
                <div>
                    <div class="button">Send</div>
                    <div class="button">Schedule</div>
                    <div class="button">Save draft</div>
                </div>
            </body>
  1. Save the changes, and load the HTML file in your browser:

TinyMCE in a CRM demo config with the plugins working

You can now test out all the features of the CRM in an interface that mimics an actual CRM app. You can test out the different plugins available, including autoresize, templates, and tokens to automatically add essential content.

A note on non-editable content

Any content wrapped in the “{{ }}” curly bracers appears non-editable. This prevents change to vital customer information.

The appearance of the non-editable areas are styled with a class – the CSS style applied to the class in the tinymce.init script controls and changes their appearance.

The next steps for your CRM editor

Check out our CRM editor page for more content and CRM information – also, remember that your FREE API key grants free access to Premium Plugin functionality for 14 days. After the 14 days, you’ll need to either choose a Premium plan or remove the TinyMCE premium features.

What’s available for your CRM with Premium Plugins:

  • Export non-editable PDF documents for safekeeping using PDF Export

  • Error-free copy-paste from Word, Excel, and Google Docs with PowerPaste

  • Showcase reference materials using Enhanced Media Embed and Page Embed

Contact us for more information if you have any questions on adding TinyMCE as a component for your CRM app. Premium customers and anyone on a 14-day free trial can seek support from our professional customer service team.

TinyMCESelf HostingConfigurationContent Management
byJoe Robinson

Technical and creative writer, editor, and a TinyMCE advocate. An enthusiast for teamwork, open source software projects, and baking. Can often be found puzzling over obscure history, cryptic words, and lucid writing.

Related Articles

  • How-to Use TinyMCE

    How to create a word processor to rival MSWord and Google Docs – tutorial

    by Di Mace, Joe Robinson, & John Rau in How-to Use TinyMCE
Subscribe for the latest insights served straight to your inbox every month.

Deploy TinyMCE in just 6 lines of code

Built to scale. Developed in open source. Designed to innovate.

Begin with your FREE API Key
Tiny Editor
Tiny logo
Privacy Policy - Terms of Use© 2022 Tiny Technologies Inc.TinyMCE® and Tiny® are registered trademarks of Tiny Technologies, Inc.

Products

  • TinyMCE
  • Tiny Drive
  • Customer Stories
  • Pricing