Author: Franz Malten Buemann

  • Gearset for CPQ: An Easier Way to Deploy CPQ Configuration

    Salesforce CPQ (Configure, Price, Quote) deployments are notoriously difficult. There are tools that offer out-of-the-box CPQ templates to help, and these go some way to mitigating the problem. But with Gearset’s latest release, CPQ deployments have been transformed. Let’s take a closer look at what… Read More

  • Get Higher Conversion Rates with SMS Messages

    submitted by /u/Proof_Assistance_824 [link] [comments]

  • Highlighting Text Input with Jetpack Compose

    We recently launched a new feature at Buffer, called Ideas. With Ideas, you can store all your best ideas, tweak them until they’re ready, and drop them straight into your Buffer queue. Now that Ideas has launched in our web and mobile apps, we have some time to share some learnings from the development of this feature. In this blog post, we’ll dive into how we added support for URL highlighting to the Ideas Composer on Android, using Jetpack Compose.We started adopting Jetpack Compose into our app in 2021 – using it as standard to build all our new features, while gradually adopting it into existing parts of our application. We built the whole of the Ideas feature using Jetpack Compose – so alongside faster feature development and greater predictability within the state of our UI, we had plenty of opportunities to further explore Compose and learn more about how to achieve certain requirements in our app.Within the Ideas composer, we support dynamic link highlighting. This means that if you type a URL into the text area, then the link will be highlighted – tapping on this link will then show an “Open link” pop-up, which will launch the link in the browser when clicked.In this blog post, we’re going to focus on the link highlighting implementation and how this can be achieved in Jetpack Compose using the TextField composable.For the Ideas composer, we’re utilising the TextField composable to support text entry. This composable contains an argument, visualTransformation, which is used to apply visual changes to the entered text.TextField(

    visualTransformation = …
    )This argument requires a VisualTransformation implementation which is used to apply the visual transformation to the entered text. If we look at the source code for this interface, we’ll notice a filter function which takes the content of the TextField and returns a TransformedText reference that contains the modified text.@Immutable
    fun interface VisualTransformation {
    fun filter(text: AnnotatedString): TransformedText
    }When it comes to this modified text, we are required to provide the implementation that creates a new AnnotatedString reference with our applied changes. This changed content then gets bundled in the TransformedText type and returned back to the TextField for composition.So that we can define and apply transformations to the content of our TextField, we need to start by creating a new implementation of the VisualTransformation interface for which we’ll create a new class, UrlTransformation. This class will implement the VisualTransformation argument, along with taking a single argument in the form of a Color. We define this argument so that we can pass a theme color reference to be applied within our logic, as we are going to be outside of composable scope and won’t have access to our composable theme.class UrlTransformation(
    val color: Color
    ) : VisualTransformation {

    }With this class defined, we now need to implement the filter function from the VisualTransformation interface. Within this function we’re going to return an instance of the TransformedText class – we can jump into the source code for this class and see that there are two properties required when instantiating this class./**
    * The transformed text with offset offset mapping
    */
    class TransformedText(
    /**
    * The transformed text
    */
    val text: AnnotatedString,

    /**
    * The map used for bidirectional offset mapping from original to transformed text.
    */
    val offsetMapping: OffsetMapping
    )Both of these arguments are required, so we’re going to need to provide a value for each when instantiating the TransformedText class.text – this will be the modified version of the text that is provided to the filter functionoffsetMapping – as per the documentation, this is the map used for bidirectional offset mapping from original to transformed textclass UrlTransformation(
    val color: Color
    ) : VisualTransformation {
    override fun filter(text: AnnotatedString): TransformedText {
    return TransformedText(
    …,
    OffsetMapping.Identity
    )
    }
    }For the offsetMapping argument, we simply pass the OffsetMapping.Identity value – this is the predefined default value used for the OffsetMapping interface, used for when that can be used for the text transformation that does not change the character count. When it comes to the text argument we’ll need to write some logic that will take the current content, apply the highlighting and return it as a new AnnotatedString reference to be passed into our TransformedText reference. For this logic, we’re going to create a new function, buildAnnotatedStringWithUrlHighlighting. This is going to take two arguments – the text that is to be highlighted, along with the color to be used for the highlighting.fun buildAnnotatedStringWithUrlHighlighting(
    text: String,
    color: Color
    ): AnnotatedString {

    }From this function, we need to return an AnnotatedString reference, which we’ll create using buildAnnotatedString. Within this function, we’ll start by using the append operation to set the textual content of the AnnotatedString.fun buildAnnotatedStringWithUrlHighlighting(
    text: String,
    color: Color
    ): AnnotatedString {
    return buildAnnotatedString {
    append(text)
    }
    }Next, we’ll need to take the contents of our string and apply highlighting to any URLs that are present. Before we can do this, we need to identify the URLs in the string. URL detection might vary depending on the use case, so to keep things simple let’s write some example code that will find the URLs in a given piece of text. This code will take the given string and filter the URLs, providing a list of URL strings as the result.text?.split(“\s+”.toRegex())?.filter { word ->
    Patterns.WEB_URL.matcher(word).matches()
    }Now that we know what URLs are in the string, we’re going to need to apply highlighting to them. This is going to be in the form of an annotated string style, which is applied using the addStyle operation.fun addStyle(style: SpanStyle, start: Int, end: Int)When calling this function, we need to pass the SpanStyle that we wish to apply, along with the start and end index that this styling should be applied to. We’re going to start by calculating this start and end index  – to keep things simple, we’re going to assume there are only unique URLs in our string.text?.split(“\s+”.toRegex())?.filter { word ->
    Patterns.WEB_URL.matcher(word).matches()
    }.forEach {
    val startIndex = text.indexOf(it)
    val endIndex = startIndex + it.length
    }Here we locate the start index by using the indexOf function, which will give us the starting index of the given URL. We’ll then use this start index and the length of the URL to calculate the end index. We can then pass these values to the corresponding arguments for the addStyle function.text?.split(“\s+”.toRegex())?.filter { word ->
    Patterns.WEB_URL.matcher(word).matches()
    }.forEach {
    val startIndex = text.indexOf(it)
    val endIndex = startIndex + it.length
    addStyle(
    start = startIndex,
    end = endIndex
    )
    }Next, we need to provide the SpanStyle that we want to be applied to the given index range. Here we want to simply highlight the text using the provided color, so we’ll pass the color value from our function arguments as the color argument for the SpanStyle function.text?.split(“\s+”.toRegex())?.filter { word ->
    Patterns.WEB_URL.matcher(word).matches()
    }.forEach {
    val startIndex = text.indexOf(it)
    val endIndex = startIndex + it.length
    addStyle(
    style = SpanStyle(
    color = color
    ),
    start = startIndex,
    end = endIndex
    )
    }

    With this in place, we now have a complete function that will take the provided text and highlight any URLs using the provided Color reference.fun buildAnnotatedStringWithUrlHighlighting(
    text: String,
    color: Color
    ): AnnotatedString {
    return buildAnnotatedString {
    append(text)
    text?.split(“\s+”.toRegex())?.filter { word ->
    Patterns.WEB_URL.matcher(word).matches()
    }.forEach {
    val startIndex = text.indexOf(it)
    val endIndex = startIndex + it.length
    addStyle(
    style = SpanStyle(
    color = color,
    textDecoration = TextDecoration.None
    ),
    start = startIndex, end = endIndex
    )
    }
    }
    }We’ll then need to hop back into our UrlTransformation class and pass the result of the buildAnnotatedStringWithUrlHighlighting function call for the TransformedText argument.class UrlTransformation(
    val color: Color
    ) : VisualTransformation {
    override fun filter(text: AnnotatedString): TransformedText {
    return TransformedText(
    buildAnnotatedStringWithUrlHighlighting(text, color),
    OffsetMapping.Identity
    )
    }
    }Now that our UrlTransformation implementation is complete, we can instantiate this and pass the reference for the visualTransformation  argument of the TextField composable. Here we are using the desired color from our MaterialTheme reference, which will be used when highlighting the URLs in our TextField content.TextField(

    visualTransformation = UrlTransformation(
    MaterialTheme.colors.secondary)
    )With the above in place, we now have dynamic URL highlighting support within our TextField composable. This means that now whenever the user inserts a URL into the composer for an Idea, we identify this as a URL by highlighting it using a the secondary color from our theme.In this post, we’ve learnt how we can apply dynamic URL highlighting to the contents of a TextField composable. In the next post, we’ll explore how we added the “Open link” pop-up when a URL is tapped within the composer input area.

  • Course Customer Health Scoring – Need feedback and improvement ideas

    Hi community, we created a holistic course on how to set up your own Customer Health Score model using integrations from CRM in a simple way. Because we saw the manager had difficulty figuring out in this all formulas and metrics, and we want to help build a useful tool for data-driven decisions. It would be great to hear feedback from the community about the course description, an agenda, and maybe you’ll add something. Link for the course: https://try.revos.ai/customer-health-scoring-course Thank you in advance. Have a good day! submitted by /u/Mundane-Register-772 [link] [comments]

  • The Influencer Outreach Tool that save you time.

    submitted by /u/AjPicard913 [link] [comments]

  • How Marketers are Navigating Q4: Traffic, Lead & Email Data from 150K+ Brands

    If you’re a marketer, it’s likely been a very – odd – Q4!
    On top of racing to the finish with end-of-year reports, campaigns, and project memos, you’re also in the thick of annual planning for the new year.
    And, to add one more complicated layer to the mix, many marketing teams are waiting in the balance to see how our uncertain economy and the continuance of unprecedented global events will impact their work.
    While we don’t have a crystal ball, our final analytics report of the year aims to give you an insightful glimpse of how industries are performing in Q4, and help you make the most informed decisions for your brand as 2023 begins.
    Without further adieu, let’s dive in.

    About this Data: These insights are based on data aggregated from 158,000+ HubSpot customers globally between November 2021 and November 2022. Because the data is aggregated from HubSpot customers’ businesses, please keep in mind that the performance of individual businesses, including HubSpot’s, might differ based on their markets, customer base, industry, geography, stage, and/or other factors.
    Mid-Q4 Marketing Themes
    Overall Themes
    With seasonality – which we began to see in our last recap – in full swing, industries linking to retail, travel, and leisure are seeing unsurprising month-to-month upticks in conversions, leads, and even traffic. Meanwhile, industries like construction – which are often less active during the end of the year and in uncertain financial times – are seeing some MoM and YoY decreases.
    Overall, year-over-year leads and conversions are trending up, which could be a positive sign for marketers who want to show that their work does impact their brand’s bottom line.

     

    Below, we’ll dig into a few specific marketing themes.
    Website Performance Continues to See Seasonality
    Website Traffic
    Compared to October, websites across industries saw a significant traffic decrease in November, with Construction and Financial Activities seeing the greatest dips. Only Leisure and Hospitality saw a significant MoM gain, which makes sense due to holiday-related travel and annual vacation planning on the rise.
    Luckily, many industries are seeing year-over-year traffic boosts.
    Manufacturing as well as Trade, Transportation & Utilities (which includes the retail industry) lead the pack with 6.3% and 6.2% increases respectively. The only industry which didn’t see a boost was Construction, which saw a slight dip of 2.6%.
    As we mentioned in previous reports, the construction industry’s performance could be due in part to the season as well as current macroeconomic conditions.

     

    Website Conversion Rates
    Month-over-month, website conversions were relatively flat across industries. This can happen due to seasonality.
    One big exception to the MoM data was Leisure and Hospitality which saw a significant 9.5% increase. Not super surprising during the end-of-year holiday and shopping season.
    Year-over-year, we saw the biggest conversion increases from Education & Health Services followed by Leisure and Hospitality. In previous posts, we’ve highlighted that Leisure and Hospitality brands are likely seeing growth due in part to global regions and key travel cities reopening due to fewer COVID-19 restrictions.

    Industry
    MoM
    YoY
    Sample size

    All
    -1.3%
    +9.2%
    127169

    Construction
    -2.5%
    +2.3%
    1177

    Education and Health Services
    +2.0%
    +17.6
    3374

    Financial Activities
    +0.8
    +1.7%
    3628

    Leisure and Hospitality
    +9.5%
    +13.4%
    972

    Manufacturing
    -0.7%
    -0.7%
    3606

    Professional and Business Services
    -3.0%
    +10.2%
    11,708

    Technology, Information and Media
    +2.2%
    +3.4%
    14,208

    Trade, Transportation and Utilities
    +3.69%
    -2.8
    3,087

    Inbound Leads See Positive Movement
    Despite lower or flat traffic and conversions, both YoY and MoM lead trends are actually ticking up across most industries: a positive theme for marketers who are hyper-focused on their business’s bottom line.
    Trade, Transportation & Utilities (which includes the bustling retail industry), and Leisure and Hospitality saw the largest MoM gains.
    Year over year, Leisure and Hospitality also saw a huge YoY gain along with Education & Health Services. And, as a consistent theme, only Construction saw annual and monthly decreases.

     

    Email Opens Hold Steady Despite More Sends
    While most email marketers expect to see email engagement drop as the holidays begin in November, there was only a 1.3% open rate decrease, despite a large 13% increase in sends (likely due to end-of-year campaigns and last-minute pushes to hit numbers). Additionally, more subscribers were likely opening and potentially engaging with emails this month as all industries saw a 10.3% open increase.
    Despite positive movements in November, marketing email is still dealing with some long-term challenges as opens and open rates have decreased by 14.5% and 10.1% respectively – even with more companies embracing a slightly more modest number of email sends.

    Metric
    MoM
    YoY
    Sample size

    Email sends
    +13.9%
    -3.9%
    144,733

    Email opens
    +10.3%
    -14.5%
    144,733

    Email open rate
    -1.3%
    -10.1%
    144,796

    Starting the Year with a Full View
    While these November numbers show some industries working their way back from slower growth in 2022 – and a few still continuing to keep up numbers in seasonality and current macro-economic times – it’s important for marketers to look at all possible data when planning out their strategies for January and the new year ahead. That’s why, on top of reports like these, it’s important to look at:

    Your annual and MoM website traffic and conversion data
    Your leads, sales, and revenue, especially as compared to direct competitors
    The direct and indirect ROI of your inbound campaigns, such as marketing newsletters.  

    To keep you informed as you kick your new marketing plans off next year, we’ll be launching a series of posts across the HubSpot Blogs in January to give you an overall look at how businesses performed throughout 2022, as well as insights on how business heads, marketers, sales teams, and other departments can adapt in 2023. Stay tuned!
    In the meantime, read through our previous reports below:

    Are Seasonality & the Economy Impacting Marketers in Q4? [Traffic & Conversion Data from 150K+ Companies]
    The Top Traffic, Conversion & Lead Trends in Q3: Data & Takeaways from 120,000+ Businesses
    Your Guide to Summer Web Traffic, Conversion & Lead Performance Across Industries [Data from 150,000+ Businesses

    Or, download our free State of Marketing Report below to dive deeper into what marketers focused on this year.

  • How to automate you,re business

    submitted by /u/Life_Ad5095 [link] [comments]

  • Protected: Campaign Monitor’s Year in Review

    This content is password protected. To view it please enter your password below:
    Password:

    The post Protected: Campaign Monitor’s Year in Review appeared first on Campaign Monitor.

  • Protected: Campaign Monitor’s Year in Review

    This content is password protected. To view it please enter your password below:
    Password:

    The post Protected: Campaign Monitor’s Year in Review appeared first on Campaign Monitor.

  • KPIs to see user active in my Database

    I have a database for marketing campaigns (mainly SMS and email) and I I want to know if the users are active. I suppose that to maintain database alive i should use some tool of marketing automation. What KPIs should I keep in mind? Thanks. submitted by /u/mikiki310 [link] [comments]