From 6324f018e4b9a733d659384276ee1c721b757b22 Mon Sep 17 00:00:00 2001 From: Isha Date: Wed, 4 Feb 2026 13:10:55 +0530 Subject: [PATCH 01/13] Added ui changes --- .../PricingComp/ComparePlans/index.js | 2 +- src/components/PricingComp/DialPlan/index.js | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/PricingComp/ComparePlans/index.js b/src/components/PricingComp/ComparePlans/index.js index 0bd82684..2f28b9c1 100644 --- a/src/components/PricingComp/ComparePlans/index.js +++ b/src/components/PricingComp/ComparePlans/index.js @@ -82,7 +82,7 @@ export default function ComparePlans({ pricingData, symbol, tabtype, pageData }) -
+
diff --git a/src/components/PricingComp/DialPlan/index.js b/src/components/PricingComp/DialPlan/index.js index 4a2d94af..7f7785d1 100644 --- a/src/components/PricingComp/DialPlan/index.js +++ b/src/components/PricingComp/DialPlan/index.js @@ -39,7 +39,6 @@ function filterRowsBySearch(data, columns, searchTerm) { const DialPlanTable = React.memo(function DialPlanTable({ service_name, columns, data, noResultsText }) { return (
- {service_name &&

{service_name}

}
@@ -96,9 +95,9 @@ export default function DialPlan({ pricingData, selectedPlanSlug, pageData }) { setSearch(''); }, [selectedPlanSlug]); - const { dialPlans, planName } = useMemo(() => { + const { dialPlans, serviceName, planName } = useMemo(() => { if (!Array.isArray(pricingData) || pricingData.length === 0) { - return { dialPlans: [], planName: null }; + return { dialPlans: [], serviceName: null, planName: null }; } const selectedPlan = @@ -114,8 +113,17 @@ export default function DialPlan({ pricingData, selectedPlanSlug, pageData }) { data: item.dial_plan.data, })); + const serviceName = + plans.length === 1 + ? plans[0]?.service_name + : plans + .map((p) => p?.service_name) + .filter(Boolean) + .join(', ') || null; + return { dialPlans: plans, + serviceName, planName: selectedPlan?.name ?? selectedPlan?.slug ?? null, }; }, [pricingData, selectedPlanSlug]); @@ -135,10 +143,10 @@ export default function DialPlan({ pricingData, selectedPlanSlug, pageData }) {

{pageData?.dialplanRatesHeading}

- {planName && ( + {serviceName && (

- {pageData?.showingRatesFor} {planName}{' '} - {pageData?.planLabelSuffix} + {pageData?.showingRatesFor} {serviceName}{' '} + for {`( ${planName} )`}

)}
From 9c78ab565fe1de0093548af2be4b1acbb1d581d5 Mon Sep 17 00:00:00 2001 From: Isha Date: Wed, 18 Mar 2026 18:28:42 +0530 Subject: [PATCH 02/13] Feat : push notification page done ,graphics pending --- .../icons/products/push-notifications.svg | 3 + src/components/BannerComp/BannerComp.js | 10 ++ .../FeatureWithBulletGroup/index.js | 1 + .../GridFeatureComp/GridFeatureComp.js | 30 ++++ src/data/in/common.json | 4 + src/data/in/push-notifications.json | 144 ++++++++++++++++++ src/pages/[[...slug]].js | 2 + 7 files changed, 194 insertions(+) create mode 100644 public/assets/icons/products/push-notifications.svg create mode 100644 src/components/GridFeatureComp/GridFeatureComp.js create mode 100644 src/data/in/push-notifications.json diff --git a/public/assets/icons/products/push-notifications.svg b/public/assets/icons/products/push-notifications.svg new file mode 100644 index 00000000..5db513a3 --- /dev/null +++ b/public/assets/icons/products/push-notifications.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/BannerComp/BannerComp.js b/src/components/BannerComp/BannerComp.js index 278a80c9..b6f87c9d 100644 --- a/src/components/BannerComp/BannerComp.js +++ b/src/components/BannerComp/BannerComp.js @@ -48,6 +48,16 @@ export default function BannerComp({ pageInfo, data }) {

{data?.subheading}

+ {data?.highlights && ( +
    + {data.highlights.map((item, i) => ( +
  • + + {item} +
  • + ))} +
+ )}
diff --git a/src/components/FeatureWithBulletGroup/index.js b/src/components/FeatureWithBulletGroup/index.js index 372fb482..8c1d50cb 100644 --- a/src/components/FeatureWithBulletGroup/index.js +++ b/src/components/FeatureWithBulletGroup/index.js @@ -19,6 +19,7 @@ export default function FeatureWithBulletGroup({ data }) { return (
+ {data?.heading &&

{data.heading}

} {data.features.map((group, index) => { return (
+
+ {data?.heading &&

{data.heading}

} + {data?.subheading && ( +

{data.subheading}

+ )} +
+ {data.features.map((feature, index) => ( +
+ {feature?.icon && ( + + )} +

{feature.name}

+

{feature.content}

+
+ ))} +
+
+
+ ); +} diff --git a/src/data/in/common.json b/src/data/in/common.json index b74b24f4..aa3fde78 100644 --- a/src/data/in/common.json +++ b/src/data/in/common.json @@ -59,6 +59,10 @@ { "name": "Numbers", "slug": "numbers" + }, + { + "name": "Push Notifications", + "slug": "push-notifications" } ] }, diff --git a/src/data/in/push-notifications.json b/src/data/in/push-notifications.json new file mode 100644 index 00000000..d26a8594 --- /dev/null +++ b/src/data/in/push-notifications.json @@ -0,0 +1,144 @@ +{ + "HeadComp": { + "title": "", + "description": "Reach your users even when they are not on your website. MSG91 Push Notifications help businesses send real-time alerts directly to user devices, driving engagement, recovering lost conversions, and increasing customer retention.From abandoned cart reminders to real-time order updates and flash sale alerts, deliver the right message at the right moment and bring users back with a single click." + }, + "BannerComp": { + "slug": "push-notifications", + "product": { + "name": "Push Notifications", + "icon": "/assets/icons/products/push-notifications.svg" + }, + "tagline": "Engage Users Instantly", + "heading": "Web & Mobile Push Notifications That Instantly Bring Users Back", + "subheading": "Reach your users even when they are not on your website. MSG91 Push Notifications help businesses send real-time alerts directly to user devices, driving engagement, recovering lost conversions, and increasing customer retention.", + "highlights": [ + "Send notifications directly to browsers and mobile devices", + "Re-engage users instantly without email or phone numbers", + "Automate campaigns based on user behavior", + "Increase traffic, conversions, and user retention" + ], + "not_absolute": "true", + "getstarted_btn": "Start Engaging Your Users Instantly" + }, + "GridFeatureComp": { + "heading": "Powerful Push Notification Features Designed for Growth", + "features": [ + { + "name": "Behavior-Triggered Notifications", + "content": "Automatically send push notifications when users perform specific actions such as browsing products, abandoning carts, or visiting key pages. Engage users at the exact moment they are most likely to respond.", + "icon": "/assets/global/push-notifications/icons/behavior-triggered.svg" + }, + { + "name": "Dynamic User Segmentation", + "content": "Segment users based on activity, preferences, location, or engagement patterns to send highly relevant notifications. Reach the right audience with personalized messages that increase click-through rates.", + "icon": "/assets/global/push-notifications/icons/user-segmentation.svg" + }, + { + "name": "Automated Drip Campaigns", + "content": "Create automated notification sequences that nurture users over time and guide them toward conversion. Turn casual visitors into loyal customers through consistent engagement.", + "icon": "/assets/global/push-notifications/icons/drip-campaigns.svg" + }, + { + "name": "Personalization", + "content": "Customize notifications using user attributes and behavior insights. Deliver relevant offers, product recommendations, and reminders tailored to each user.", + "icon": "/assets/global/push-notifications/icons/personalization.svg" + }, + { + "name": "A/B Testing", + "content": "Experiment with different headlines, messages, and delivery times to discover what performs best. Optimize campaigns through data-driven insights.", + "icon": "/assets/global/push-notifications/icons/ab-testing.svg" + }, + { + "name": "Advanced Analytics", + "content": "Track notification performance including clicks and engagement rates. Gain actionable insights to continuously refine and improve your push notification strategy.", + "icon": "/assets/global/push-notifications/icons/analytics.svg" + }, + { + "name": "Mobile & Web Push Notifications", + "content": "Reach users across browsers and mobile devices including Android and iOS apps. Maintain consistent engagement across every platform your users interact with.", + "icon": "/assets/global/push-notifications/icons/mobile-web-push.svg" + }, + { + "name": "Offline Notification Delivery", + "content": "Ensure notifications are delivered even when users are temporarily offline and appear once they reconnect. Never miss an opportunity to re-engage your audience.", + "icon": "/assets/global/push-notifications/icons/offline-delivery.svg" + }, + { + "name": "Secure & Privacy Compliant", + "content": "Built with privacy and security in mind, MSG91 Push Notifications support compliance with modern data protection regulations. Maintain trust while scaling your communication.", + "icon": "/assets/global/push-notifications/icons/security-compliance.svg" + } + ] + }, + "FeatureWithBulletGroup": { + "heading": "Industry Use Cases", + "iconColor": "text-push-notifications", + "features": [ + { + "name": "Push Notifications for eCommerce", + "content": "Increase conversions and recover lost sales with intelligent push notifications designed for online stores. Push notifications help eCommerce businesses bring customers back and complete purchases faster.", + "img": "/assets/global/push-notifications/usecase-ecommerce.webp", + "more_content": { + "features": [ + "Abandoned cart reminders that recover lost revenue", + "Price drop alerts that trigger immediate purchases", + "Back-in-stock notifications for popular products", + "Flash sale announcements to create urgency", + "Product recommendations based on browsing behavior" + ] + } + }, + { + "name": "Push Notifications for Fintech", + "content": "Fintech platforms rely on real-time communication to keep users informed and secure. Instant notifications improve user trust and platform engagement.", + "img": "/assets/global/push-notifications/usecase-fintech.webp", + "more_content": { + "features": [ + "Payment confirmation notifications", + "Transaction alerts and account updates", + "Fraud detection and security alerts", + "Investment or portfolio updates", + "Bill payment reminders" + ] + } + }, + { + "name": "Push Notifications for SaaS Platforms", + "content": "SaaS products use push notifications to drive product adoption and user engagement. Push notifications help SaaS companies retain users and increase product adoption.", + "img": "/assets/global/push-notifications/usecase-saas.webp", + "more_content": { + "features": [ + "Feature launch notifications", + "Trial expiration reminders", + "Account activity alerts", + "Onboarding guidance notifications", + "Subscription renewal reminders" + ] + } + } + ] + }, + "PreFooterComp": { + "content": "Start Engaging Your Users With Push Notifications Today", + "buttons": { + "contactSales": { + "text": "Contact sales", + "link": "/contact-us" + }, + "pricing": { + "text": "Pricing", + "link": "/pricing/" + }, + "getStarted": { + "text": "Get started", + "link": "https://control.msg91.com/signup/" + } + } + }, + "SEOComp": { + "heading": "What Are Push Notifications?", + "description": "Push notifications are real-time alerts sent directly to a user's device through browsers or mobile applications. These notifications allow businesses to communicate instantly with users even when they are not actively using the website or app.", + "data": "

Businesses use push notification platforms to send alerts such as promotional offers, product updates, reminders, and transactional notifications.

 

MSG91 provides a scalable push notification platform that enables businesses to deliver timely, personalized messages to users across multiple devices.

" + } +} \ No newline at end of file diff --git a/src/pages/[[...slug]].js b/src/pages/[[...slug]].js index ccd448d8..1fdab4b2 100644 --- a/src/pages/[[...slug]].js +++ b/src/pages/[[...slug]].js @@ -50,6 +50,7 @@ import MigrateFromTextlocal from '@/components/migrateFromTextlocal/migrateFromT import WhatsAppIntegrations from '@/components/WhatsAppIntegrations'; import WhatsAppAccountVerification from '@/components/WhatsAppAccountVerification'; import FeatureWithBulletGroup from '@/components/FeatureWithBulletGroup'; +import GridFeatureComp from '@/components/GridFeatureComp/GridFeatureComp'; // New Components import Banner from '@/components/UpdatedComp/Banner'; @@ -117,6 +118,7 @@ const Components = { WhatsAppIntegrations, WhatsAppAccountVerification, FeatureWithBulletGroup, + GridFeatureComp, // New Components Banner, From 863bc99e5fb9feb258fff596937642c30c3319eb Mon Sep 17 00:00:00 2001 From: piyusssshh Date: Thu, 2 Apr 2026 17:25:22 +0530 Subject: [PATCH 03/13] PIYUSH | signin page revert --- src/pages/signin.js | 240 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 src/pages/signin.js diff --git a/src/pages/signin.js b/src/pages/signin.js new file mode 100644 index 00000000..3327fe50 --- /dev/null +++ b/src/pages/signin.js @@ -0,0 +1,240 @@ +import GoogleLoginButton from '@/components/signupComp/utils/GoogleLogin'; +import { GoogleOAuthProvider } from '@react-oauth/google'; +import React from 'react'; +import { MdCall, MdEmail } from 'react-icons/md'; +import { getQueryParamsDeatils, setCookie, getCookie, loginWithGitHubAccount } from '@/utils/utilis'; +import { toast } from 'react-toastify'; + +const SUCCESS_REDIRECTION_URL = process.env.API_BASE_URL + '/api/nexusRedirection.php?session=:session'; + +class logIn extends React.Component { + constructor(props) { + super(props); + + this.state = { + loginInProgress: false, + showContactonLogin: false, + }; + } + + componentDidMount() { + let queryParams = getQueryParamsDeatils(this.props?.browserPathCase); + + if (queryParams?.githublogin === 'true') { + const url = process.env.API_BASE_URL + '/api/v5/nexus/githubLogin'; + this.hitLoginAPI(url, { + code: queryParams?.code, + state: queryParams?.state, + redirectUrl: process.env.REDIRECT_URL, + }); + } else if (queryParams?.loginWithZoho?.includes('true')) { + const request = { + ...queryParams, + accountsServer: decodeURIComponent(queryParams['accounts-server'] || ''), + }; + delete request.loginWithZoho; + delete request['accounts-server']; + + const url = process.env.API_BASE_URL + '/api/v5/nexus/zohoLogin'; + this.hitLoginAPI(url, { + ...request, + redirectUrl: process.env.REDIRECT_URL + '/signin?loginWithZoho=true', + }); + } else if (queryParams?.loginWithOutlook?.includes('true')) { + const url = process.env.API_BASE_URL + '/api/v5/nexus/outlookLogin'; + this.hitLoginAPI(url, { + code: queryParams?.code, + redirectUrl: process.env.REDIRECT_URL + '/outlook-token', + }); + } else { + this.otpWidgetSetup(); + } + try { + const url = process.env.API_BASE_URL + '/api/v5/nexus/checkSession'; + const payload = { session: getCookie('sessionId') }; + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload), + }; + fetch(url, requestOptions) + .then((response) => response?.json()) + .then((result) => { + if (result?.status === 'success') { + location.href = SUCCESS_REDIRECTION_URL?.replace(':session', payload.session); + } + }); + } catch (error) { + console.log('No Session Found'); + } + } + + otpWidgetSetup = () => { + const head = document.getElementsByTagName('head')[0]; + const currentTimestamp = new Date().getTime(); + const otpWidgetScript = document.createElement('script'); + otpWidgetScript.type = 'text/javascript'; + otpWidgetScript.src = `${process.env.WIDGET_SCRIPT}?v=${currentTimestamp}`; + otpWidgetScript.onload = () => {}; + head.appendChild(otpWidgetScript); + }; + + initOTPWidget() { + const configuration = { + widgetId: process.env.OTP_WIDGET_TOKEN, + tokenAuth: process.env.WIDGET_AUTH_TOKEN, + hideMethod: 'mobile', + success: (data) => { + try { + const url = process.env.API_BASE_URL + '/api/v5/nexus/emailLogin'; + this.hitLoginAPI(url, { code: data.message }); + } catch (error) { + console.log(error); + } + }, + }; + window.initSendOTP(configuration); + } + + loginWithZoho() { + location.href = `https://accounts.zoho.com/oauth/v2/auth?response_type=code&client_id=${process.env.ZOHO_CLIENT_ID}&scope=aaaserver.profile.READ&redirect_uri=${process.env.REDIRECT_URL}/signin?loginWithZoho=true`; + } + + loginWithGitHub = () => { + loginWithGitHubAccount(true); + }; + + googleLogin = (response) => { + if (response) { + const url = process.env.API_BASE_URL + '/api/v5/nexus/googleLogin'; + this.hitLoginAPI(url, { code: response.code, redirectUrl: process.env.REDIRECT_URL }); + } + }; + + loginWithOutlook() { + location.href = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id=${process.env.MSAL_CLIENT_ID}&redirect_uri=${process.env.REDIRECT_URL}/outlook-token&scope=User.Read`; + } + + hitLoginAPI(url, payload, showError = true) { + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload), + }; + fetch(url, requestOptions) + .then((response) => response.json()) + .then((result) => { + const sessionId = result?.data?.sessionDetails?.PHPSESSID; + if (sessionId) { + setCookie('sessionId', sessionId, 30); + } + if (!result?.hasError) { + location.href = SUCCESS_REDIRECTION_URL?.replace(':session', sessionId); + } else if (showError) { + toast.error(result?.errors?.[0] ?? result?.errors); + } + }) + .catch((err) => console.error(err)); + } + + setShowContactonLogin = () => { + this.setState((prevState) => ({ + showContactonLogin: !prevState.showContactonLogin, + })); + }; + + render() { + return ( + <> +
+
+
+
+ MSG91 +
+

Welcome back!

+
+ Login with +
+ + + + + + + this.loginWithGitHub()}> + + +
+
+ + + or + + + +

+ Trouble logging in ?{' '} + + Click here + +

+ + + + Create new account + +
+
+
+ + +
+
+ + ); + } +} +export default logIn; From b3f1659856c7aead3566411f2f6315c1be8b3c66 Mon Sep 17 00:00:00 2001 From: piyusssshh Date: Thu, 2 Apr 2026 17:39:39 +0530 Subject: [PATCH 04/13] PIYUSH | singin page design --- src/pages/signin.js | 137 +++++++++++++++++++++++++++----------------- 1 file changed, 84 insertions(+), 53 deletions(-) diff --git a/src/pages/signin.js b/src/pages/signin.js index 3327fe50..041d74e2 100644 --- a/src/pages/signin.js +++ b/src/pages/signin.js @@ -1,9 +1,10 @@ import GoogleLoginButton from '@/components/signupComp/utils/GoogleLogin'; import { GoogleOAuthProvider } from '@react-oauth/google'; import React from 'react'; -import { MdCall, MdEmail } from 'react-icons/md'; +import { MdCall, MdEmail, MdCheck } from 'react-icons/md'; import { getQueryParamsDeatils, setCookie, getCookie, loginWithGitHubAccount } from '@/utils/utilis'; import { toast } from 'react-toastify'; +import Image from 'next/image'; const SUCCESS_REDIRECTION_URL = process.env.API_BASE_URL + '/api/nexusRedirection.php?session=:session'; @@ -146,15 +147,48 @@ class logIn extends React.Component { render() { return ( <> -
-
-
-
- MSG91 -
-

Welcome back!

-
- Login with +
+
+
+ +

Signup to avail a complete suite of MSG91 products

+
+
+

What can you build with MSG91?

+
    +
  • + Programmable SMS +
  • +
  • + Customer Contact Center +
  • +
  • + Virtual Number +
  • +
  • + Automated user segmentation +
  • +
  • + OTP Initiate verification +
  • +
+
+

Trusted by 30000+ startups and enterprises

+
+ +
+

Welcome back!

+ +
+
+ Are you a developer?
this.loginWithOutlook()} className='social-btn border border-primary rounded flex justify-center items-center w-10 h-10' > - + Microsoft + - - this.loginWithGitHub()}> - -
@@ -187,51 +221,48 @@ class logIn extends React.Component { or - -

- Trouble logging in ?{' '} + +

+ If you already have an account,{' '} + + Login + +

+ +

+ Trouble logging in?{' '} Click here

- - - Create new account - + {this.state.showContactonLogin && ( + + )}
-
- - -
); From f1f986b01786ce12bb91f154402c77a81a1227b1 Mon Sep 17 00:00:00 2001 From: Isha Date: Fri, 27 Feb 2026 11:50:16 +0530 Subject: [PATCH 05/13] shared cookies added --- src/components/signupComp/SignUp.js | 35 ++++++++++++++++--- .../signupComp/StepThree/StepThree.js | 7 ++++ src/utils/utilis.js | 30 ++++++++++++++++ 3 files changed, 67 insertions(+), 5 deletions(-) diff --git a/src/components/signupComp/SignUp.js b/src/components/signupComp/SignUp.js index e4cb634c..1c56aaed 100644 --- a/src/components/signupComp/SignUp.js +++ b/src/components/signupComp/SignUp.js @@ -3,7 +3,7 @@ import { MdCheck, MdDone } from 'react-icons/md'; import { toast } from 'react-toastify'; import { MdCheckCircle } from 'react-icons/md'; -import { getCookie, getQueryParamsDeatils, setCookie } from '@/utils/utilis'; +import { getCookie, getQueryParamsDeatils, setCookie, getUtmFromCookies, setSharedCookie } from '@/utils/utilis'; import Image from 'next/image'; import StepOne from './StepOne/StepOne'; import StepTwo from './StepTwo/StepTwo'; @@ -48,7 +48,6 @@ export default class SignUp extends React.Component { componentDidMount = () => { this.msg91Query = getCookie('msg91_query'); - if (this.msg91Query) { const queryParams = this.msg91Query.startsWith('?') ? this.msg91Query.replace('?', '&') @@ -57,6 +56,14 @@ export default class SignUp extends React.Component { } this.otpWidgetSetup(); + + const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; + const urlParams = new URLSearchParams(window.location.search); + utmKeys.forEach((key) => { + const value = urlParams.get(key); + if (value) setSharedCookie(key, value, 30); + }); + const queryParams = getQueryParamsDeatils(this.props?.browserPathCase); this.setState({ activeStep: queryParams?.code ? 2 : 1 }); if (queryParams?.service) { @@ -74,7 +81,13 @@ export default class SignUp extends React.Component { .then((response) => response?.json()) .then((result) => { if (result?.status === 'success') { - location.href = SUCCESS_REDIRECTION_URL?.replace(':session', payload.session); + let redirectUrl = SUCCESS_REDIRECTION_URL?.replace(':session', payload.session); + const signupDate = getCookie('signup_date'); + const interestedServices = getCookie('interested_services'); + if (signupDate) redirectUrl += `&signup_date=${encodeURIComponent(signupDate)}`; + if (interestedServices) + redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; + location.href = redirectUrl; } }); } catch (error) { @@ -375,10 +388,16 @@ export default class SignUp extends React.Component { this.setStep(3); } else if (result?.data?.data?.nextStep === 'loginIntoExistingAccount') { this.setState({ isLoading: true }); - location.href = SUCCESS_REDIRECTION_URL?.replace( + let redirectUrl = SUCCESS_REDIRECTION_URL?.replace( ':session', result?.data?.sessionDetails?.PHPSESSID ); + const signupDate = getCookie('signup_date'); + const interestedServices = getCookie('interested_services'); + if (signupDate) redirectUrl += `&signup_date=${encodeURIComponent(signupDate)}`; + if (interestedServices) + redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; + location.href = redirectUrl; } else if (result?.data?.data?.nextStep === 'hasInvitations') { this.setState({ invitations: result?.data?.data?.invitations }); this.setStep(3); @@ -464,10 +483,16 @@ export default class SignUp extends React.Component { if (result?.status === 'success') { this.setStep(4); setTimeout(() => { - location.href = SUCCESS_REDIRECTION_URL?.replace( + let redirectUrl = SUCCESS_REDIRECTION_URL?.replace( ':session', result?.data?.sessionDetails?.PHPSESSID ); + const signupDate = getCookie('signup_date'); + const interestedServices = getCookie('interested_services'); + if (signupDate) redirectUrl += `&signup_date=${encodeURIComponent(signupDate)}`; + if (interestedServices) + redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; + location.href = redirectUrl; }, 10); } else if (result?.hasError) { toast.error(result?.errors?.[0] ?? result?.errors); diff --git a/src/components/signupComp/StepThree/StepThree.js b/src/components/signupComp/StepThree/StepThree.js index c5f709b1..fe6ee08b 100644 --- a/src/components/signupComp/StepThree/StepThree.js +++ b/src/components/signupComp/StepThree/StepThree.js @@ -1,5 +1,6 @@ import React from 'react'; import axios from 'axios'; +import { setSharedCookie } from '@/utils/utilis'; import { MdKeyboardArrowRight, MdKeyboardArrowLeft, @@ -298,6 +299,7 @@ class StepThree extends React.Component { }; finalSubmit = () => { + setSharedCookie('signup_date', new Date().toISOString().split('T')[0], 30); const errors = { firstNameError: this.validateFirstName() || this.validateMinMax('firstName', 'First Name', null, 50), lastNameError: this.validateLastName() || this.validateMinMax('lastName', 'Last Name', null, 50), @@ -518,6 +520,11 @@ class StepThree extends React.Component { serviceNeeded: value.map((obj) => obj.value), }, })); + setSharedCookie( + 'interested_services', + value.map((obj) => obj.label).join(','), + 30 + ); }} placeholder='Select Service Needed*' options={ diff --git a/src/utils/utilis.js b/src/utils/utilis.js index b7c18c0a..2f7ee827 100644 --- a/src/utils/utilis.js +++ b/src/utils/utilis.js @@ -50,6 +50,36 @@ export function setCookie(name, value, days) { document.cookie = name + '=' + cookieValue + '; path=/'; } +export function getUtmFromCookies() { + const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; + const result = {}; + utmKeys.forEach((key) => { + const value = getCookie(key); + if (value) result[key] = value; + }); + return result; +} + +export function setSharedCookie(name, value, days = 30) { + if (typeof document === 'undefined') return; + const expirationDate = new Date(); + expirationDate.setDate(expirationDate.getDate() + days); + + const isLocalhost = window.location.hostname === 'localhost'; + const cookieParts = [ + `${name}=${encodeURIComponent(value)}`, + `expires=${expirationDate.toUTCString()}`, + 'path=/', + 'SameSite=Lax', + ]; + if (!isLocalhost) { + cookieParts.push('domain=.msg91.com'); + cookieParts.push('Secure'); + } + + document.cookie = cookieParts.join('; '); +} + export function loginWithGitHubAccount(loginProcess) { let state = Math.floor(100000000 + Math.random() * 900000000); let otherParams = loginProcess ? `githublogin=true` : `githubsignup=true`; From 4b25628f943ad9b1a34a894b82a77a48f7643998 Mon Sep 17 00:00:00 2001 From: Isha Date: Fri, 27 Feb 2026 12:21:53 +0530 Subject: [PATCH 06/13] Fix : utm params dhynamic --- src/components/signupComp/SignUp.js | 6 ++---- src/utils/utilis.js | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/signupComp/SignUp.js b/src/components/signupComp/SignUp.js index 1c56aaed..5169cac1 100644 --- a/src/components/signupComp/SignUp.js +++ b/src/components/signupComp/SignUp.js @@ -57,11 +57,9 @@ export default class SignUp extends React.Component { this.otpWidgetSetup(); - const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; const urlParams = new URLSearchParams(window.location.search); - utmKeys.forEach((key) => { - const value = urlParams.get(key); - if (value) setSharedCookie(key, value, 30); + urlParams.forEach((value, key) => { + if (key.startsWith('utm_')) setSharedCookie(key, value, 30); }); const queryParams = getQueryParamsDeatils(this.props?.browserPathCase); diff --git a/src/utils/utilis.js b/src/utils/utilis.js index 2f7ee827..18313fc1 100644 --- a/src/utils/utilis.js +++ b/src/utils/utilis.js @@ -51,11 +51,11 @@ export function setCookie(name, value, days) { } export function getUtmFromCookies() { - const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; + if (typeof document === 'undefined') return {}; const result = {}; - utmKeys.forEach((key) => { - const value = getCookie(key); - if (value) result[key] = value; + document.cookie.split(';').forEach((cookie) => { + const [key, value] = cookie.trim().split('='); + if (key?.startsWith('utm_') && value) result[key] = decodeURIComponent(value); }); return result; } From e0e8df9480f01605a794ec62141e6cbc76b5b88d Mon Sep 17 00:00:00 2001 From: Isha Date: Fri, 27 Feb 2026 12:24:46 +0530 Subject: [PATCH 07/13] Fix : resolved comment --- src/components/signupComp/StepThree/StepThree.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/signupComp/StepThree/StepThree.js b/src/components/signupComp/StepThree/StepThree.js index fe6ee08b..16742217 100644 --- a/src/components/signupComp/StepThree/StepThree.js +++ b/src/components/signupComp/StepThree/StepThree.js @@ -522,7 +522,7 @@ class StepThree extends React.Component { })); setSharedCookie( 'interested_services', - value.map((obj) => obj.label).join(','), + JSON.stringify(value.map((obj) => obj.label)), 30 ); }} From 554698a61e50389ebcd89b30165e3b4400beeba4 Mon Sep 17 00:00:00 2001 From: Isha Date: Mon, 2 Mar 2026 13:02:15 +0530 Subject: [PATCH 08/13] added utm params in redirection url --- src/components/signupComp/SignUp.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/components/signupComp/SignUp.js b/src/components/signupComp/SignUp.js index 5169cac1..eaf95d3c 100644 --- a/src/components/signupComp/SignUp.js +++ b/src/components/signupComp/SignUp.js @@ -85,6 +85,10 @@ export default class SignUp extends React.Component { if (signupDate) redirectUrl += `&signup_date=${encodeURIComponent(signupDate)}`; if (interestedServices) redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; + Object.entries(getUtmFromCookies()).forEach(([key, value]) => { + if (key?.startsWith('utm_') && value) + redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + }); location.href = redirectUrl; } }); @@ -395,6 +399,10 @@ export default class SignUp extends React.Component { if (signupDate) redirectUrl += `&signup_date=${encodeURIComponent(signupDate)}`; if (interestedServices) redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; + Object.entries(getUtmFromCookies()).forEach(([key, value]) => { + if (key?.startsWith('utm_') && value) + redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + }); location.href = redirectUrl; } else if (result?.data?.data?.nextStep === 'hasInvitations') { this.setState({ invitations: result?.data?.data?.invitations }); @@ -490,6 +498,10 @@ export default class SignUp extends React.Component { if (signupDate) redirectUrl += `&signup_date=${encodeURIComponent(signupDate)}`; if (interestedServices) redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; + Object.entries(getUtmFromCookies()).forEach(([key, value]) => { + if (key?.startsWith('utm_') && value) + redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + }); location.href = redirectUrl; }, 10); } else if (result?.hasError) { From 69bf2210e4777c00d8b305897969f786b0947bf1 Mon Sep 17 00:00:00 2001 From: Piyush Date: Fri, 20 Mar 2026 11:49:57 +0530 Subject: [PATCH 09/13] PIYUSH | validity cookies --- src/components/signupComp/SignUp.js | 2 +- src/utils/utilis.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/signupComp/SignUp.js b/src/components/signupComp/SignUp.js index eaf95d3c..d344776f 100644 --- a/src/components/signupComp/SignUp.js +++ b/src/components/signupComp/SignUp.js @@ -59,7 +59,7 @@ export default class SignUp extends React.Component { const urlParams = new URLSearchParams(window.location.search); urlParams.forEach((value, key) => { - if (key.startsWith('utm_')) setSharedCookie(key, value, 30); + if (key.startsWith('utm_')) setSharedCookie(key, value, 1); }); const queryParams = getQueryParamsDeatils(this.props?.browserPathCase); diff --git a/src/utils/utilis.js b/src/utils/utilis.js index 18313fc1..d5e8af60 100644 --- a/src/utils/utilis.js +++ b/src/utils/utilis.js @@ -60,7 +60,7 @@ export function getUtmFromCookies() { return result; } -export function setSharedCookie(name, value, days = 30) { +export function setSharedCookie(name, value, days = 1) { if (typeof document === 'undefined') return; const expirationDate = new Date(); expirationDate.setDate(expirationDate.getDate() + days); From b5f4f20bca42cbf033b6d794e318daa3ec8962ff Mon Sep 17 00:00:00 2001 From: piyusssshh Date: Thu, 26 Mar 2026 11:31:06 +0530 Subject: [PATCH 10/13] PIYUSH | storing all cookies in cookies not only utm_ --- src/utils/setCookies.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/setCookies.js b/src/utils/setCookies.js index 8ce86d5d..4088ec36 100644 --- a/src/utils/setCookies.js +++ b/src/utils/setCookies.js @@ -12,8 +12,8 @@ export default function handleBrawserCookies() { useEffect(() => { const search = window.location.search; - if (search.includes('utm_')) { - setCookie('msg91_query', search.replace(/service=\w+&?/, ''), 30); // If utm exists + if (search) { + setCookie('msg91_query', search, 30); } else if (plugin) { setCookie('msg91_query', `?utm_campaign=tigerplugin&utm_source=${plugin}&utm_medium=website`, 30); //By Hardik } From 05fb3636f50ca9267f186a79b1fb7ac183a38053 Mon Sep 17 00:00:00 2001 From: piyusssshh Date: Thu, 26 Mar 2026 11:33:43 +0530 Subject: [PATCH 11/13] PIYUSH | storing all cookies in cookies not only utm_ --- src/components/signupComp/SignUp.js | 11 ++++------- src/utils/utilis.js | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/components/signupComp/SignUp.js b/src/components/signupComp/SignUp.js index d344776f..5a66184d 100644 --- a/src/components/signupComp/SignUp.js +++ b/src/components/signupComp/SignUp.js @@ -59,7 +59,7 @@ export default class SignUp extends React.Component { const urlParams = new URLSearchParams(window.location.search); urlParams.forEach((value, key) => { - if (key.startsWith('utm_')) setSharedCookie(key, value, 1); + setSharedCookie(key, value, 1); }); const queryParams = getQueryParamsDeatils(this.props?.browserPathCase); @@ -86,8 +86,7 @@ export default class SignUp extends React.Component { if (interestedServices) redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; Object.entries(getUtmFromCookies()).forEach(([key, value]) => { - if (key?.startsWith('utm_') && value) - redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + if (value) redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; }); location.href = redirectUrl; } @@ -400,8 +399,7 @@ export default class SignUp extends React.Component { if (interestedServices) redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; Object.entries(getUtmFromCookies()).forEach(([key, value]) => { - if (key?.startsWith('utm_') && value) - redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + if (value) redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; }); location.href = redirectUrl; } else if (result?.data?.data?.nextStep === 'hasInvitations') { @@ -499,8 +497,7 @@ export default class SignUp extends React.Component { if (interestedServices) redirectUrl += `&interested_services=${encodeURIComponent(interestedServices)}`; Object.entries(getUtmFromCookies()).forEach(([key, value]) => { - if (key?.startsWith('utm_') && value) - redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; + if (value) redirectUrl += `&${encodeURIComponent(key)}=${encodeURIComponent(value)}`; }); location.href = redirectUrl; }, 10); diff --git a/src/utils/utilis.js b/src/utils/utilis.js index d5e8af60..41cc9270 100644 --- a/src/utils/utilis.js +++ b/src/utils/utilis.js @@ -55,7 +55,7 @@ export function getUtmFromCookies() { const result = {}; document.cookie.split(';').forEach((cookie) => { const [key, value] = cookie.trim().split('='); - if (key?.startsWith('utm_') && value) result[key] = decodeURIComponent(value); + if (key && value) result[key] = decodeURIComponent(value); }); return result; } From 2aaa0227d2468c9c15d14c724dcba14937bc9d63 Mon Sep 17 00:00:00 2001 From: isha-dubey Date: Fri, 3 Apr 2026 11:51:36 +0530 Subject: [PATCH 12/13] Changed rcs redirection in every page --- src/components/BannerComp/BannerComp.js | 3 ++- src/data/ae/rcs.json | 1 + src/data/br-pt/rcs.json | 1 + src/data/br/rcs.json | 1 + src/data/es/rcs.json | 1 + src/data/fil-ph/rcs.json | 1 + src/data/gb/rcs.json | 1 + src/data/global/rcs.json | 1 + src/data/in/rcs.json | 1 + src/data/ph/rcs.json | 1 + src/data/sg/rcs.json | 1 + src/data/us/rcs.json | 1 + 12 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/BannerComp/BannerComp.js b/src/components/BannerComp/BannerComp.js index b6f87c9d..8d115da9 100644 --- a/src/components/BannerComp/BannerComp.js +++ b/src/components/BannerComp/BannerComp.js @@ -63,8 +63,9 @@ export default function BannerComp({ pageInfo, data }) {
{data?.getstarted_btn && ( {data?.getstarted_btn} diff --git a/src/data/ae/rcs.json b/src/data/ae/rcs.json index c909f36a..a01cf670 100644 --- a/src/data/ae/rcs.json +++ b/src/data/ae/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/br-pt/rcs.json b/src/data/br-pt/rcs.json index 961326ec..5d6d5c3e 100644 --- a/src/data/br-pt/rcs.json +++ b/src/data/br-pt/rcs.json @@ -14,6 +14,7 @@ "subheading":"RCS é um canal de mensagens integrado que permite às empresas engajar os clientes por meio de conversas ricas, imersivas e bidirecionais", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Comece gratuitamente", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Confiado por 30,000+ negócios globais", "logos": [ diff --git a/src/data/br/rcs.json b/src/data/br/rcs.json index 2cfa10f9..9a4ef25c 100644 --- a/src/data/br/rcs.json +++ b/src/data/br/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/es/rcs.json b/src/data/es/rcs.json index c637e9cc..71729534 100644 --- a/src/data/es/rcs.json +++ b/src/data/es/rcs.json @@ -15,6 +15,7 @@ "subheading":"RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/fil-ph/rcs.json b/src/data/fil-ph/rcs.json index b5e9cfcf..be44a401 100644 --- a/src/data/fil-ph/rcs.json +++ b/src/data/fil-ph/rcs.json @@ -15,6 +15,7 @@ "subheading": "Ang RCS ay isang integrated na channel ng pagmemensahe na nagbibigay-daan sa mga negosyo na makipag-ugnayan sa mga customer sa pamamagitan ng mayaman, immersive na two-way na pag-uusap", "banner_img": "/assets/fil_ph/hello/banner.webp", "getstarted_btn": "Magsimula", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Pinagkakatiwalaan ng 30,000+ negosyo sa buong mundo", "logos": [ diff --git a/src/data/gb/rcs.json b/src/data/gb/rcs.json index e8ce0071..fbf37c27 100644 --- a/src/data/gb/rcs.json +++ b/src/data/gb/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/global/rcs.json b/src/data/global/rcs.json index 0002c54c..26fd3bbd 100644 --- a/src/data/global/rcs.json +++ b/src/data/global/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/in/rcs.json b/src/data/in/rcs.json index a723b486..9d74b8b3 100644 --- a/src/data/in/rcs.json +++ b/src/data/in/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS messaging is an integrated channel that enables businesses to engage customers through rich, immersive, two-way conversations.", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "text_h2": "RCS Example API:" }, "FeatureComp": { diff --git a/src/data/ph/rcs.json b/src/data/ph/rcs.json index 849e4602..64ca2af9 100644 --- a/src/data/ph/rcs.json +++ b/src/data/ph/rcs.json @@ -15,6 +15,7 @@ "subheading":"RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/sg/rcs.json b/src/data/sg/rcs.json index 81500c7c..e41f9b3e 100644 --- a/src/data/sg/rcs.json +++ b/src/data/sg/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/us/rcs.json b/src/data/us/rcs.json index 675f1019..ef36afff 100644 --- a/src/data/us/rcs.json +++ b/src/data/us/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_link": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ From f2c8174b4750acfea24ba43065ccc9bb89835bb3 Mon Sep 17 00:00:00 2001 From: isha-dubey Date: Fri, 3 Apr 2026 12:06:16 +0530 Subject: [PATCH 13/13] changes rcs page redirection --- src/components/BannerComp/BannerComp.js | 3 ++- src/data/ae/rcs.json | 1 + src/data/br-pt/rcs.json | 1 + src/data/br/rcs.json | 1 + src/data/es/rcs.json | 1 + src/data/fil-ph/rcs.json | 1 + src/data/gb/rcs.json | 1 + src/data/global/rcs.json | 1 + src/data/in/rcs.json | 1 + src/data/ph/rcs.json | 1 + src/data/sg/rcs.json | 1 + src/data/us/rcs.json | 1 + 12 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/BannerComp/BannerComp.js b/src/components/BannerComp/BannerComp.js index 278a80c9..3dfdaf27 100644 --- a/src/components/BannerComp/BannerComp.js +++ b/src/components/BannerComp/BannerComp.js @@ -53,8 +53,9 @@ export default function BannerComp({ pageInfo, data }) {
{data?.getstarted_btn && ( {data?.getstarted_btn} diff --git a/src/data/ae/rcs.json b/src/data/ae/rcs.json index c909f36a..37d0f6dd 100644 --- a/src/data/ae/rcs.json +++ b/src/data/ae/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/br-pt/rcs.json b/src/data/br-pt/rcs.json index 961326ec..f93f9b34 100644 --- a/src/data/br-pt/rcs.json +++ b/src/data/br-pt/rcs.json @@ -14,6 +14,7 @@ "subheading":"RCS é um canal de mensagens integrado que permite às empresas engajar os clientes por meio de conversas ricas, imersivas e bidirecionais", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Comece gratuitamente", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Confiado por 30,000+ negócios globais", "logos": [ diff --git a/src/data/br/rcs.json b/src/data/br/rcs.json index 2cfa10f9..e43bb573 100644 --- a/src/data/br/rcs.json +++ b/src/data/br/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/es/rcs.json b/src/data/es/rcs.json index c637e9cc..91459185 100644 --- a/src/data/es/rcs.json +++ b/src/data/es/rcs.json @@ -15,6 +15,7 @@ "subheading":"RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/fil-ph/rcs.json b/src/data/fil-ph/rcs.json index b5e9cfcf..58f89108 100644 --- a/src/data/fil-ph/rcs.json +++ b/src/data/fil-ph/rcs.json @@ -15,6 +15,7 @@ "subheading": "Ang RCS ay isang integrated na channel ng pagmemensahe na nagbibigay-daan sa mga negosyo na makipag-ugnayan sa mga customer sa pamamagitan ng mayaman, immersive na two-way na pag-uusap", "banner_img": "/assets/fil_ph/hello/banner.webp", "getstarted_btn": "Magsimula", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Pinagkakatiwalaan ng 30,000+ negosyo sa buong mundo", "logos": [ diff --git a/src/data/gb/rcs.json b/src/data/gb/rcs.json index e8ce0071..b22d3d79 100644 --- a/src/data/gb/rcs.json +++ b/src/data/gb/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/global/rcs.json b/src/data/global/rcs.json index 0002c54c..8445f82e 100644 --- a/src/data/global/rcs.json +++ b/src/data/global/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/in/rcs.json b/src/data/in/rcs.json index a723b486..1f0dcb07 100644 --- a/src/data/in/rcs.json +++ b/src/data/in/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS messaging is an integrated channel that enables businesses to engage customers through rich, immersive, two-way conversations.", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "text_h2": "RCS Example API:" }, "FeatureComp": { diff --git a/src/data/ph/rcs.json b/src/data/ph/rcs.json index 849e4602..8f1c6cc8 100644 --- a/src/data/ph/rcs.json +++ b/src/data/ph/rcs.json @@ -15,6 +15,7 @@ "subheading":"RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/sg/rcs.json b/src/data/sg/rcs.json index 81500c7c..0e185b1d 100644 --- a/src/data/sg/rcs.json +++ b/src/data/sg/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [ diff --git a/src/data/us/rcs.json b/src/data/us/rcs.json index 675f1019..7ab538d6 100644 --- a/src/data/us/rcs.json +++ b/src/data/us/rcs.json @@ -15,6 +15,7 @@ "subheading": "RCS is an integrated messaging channel that enables businesses to engage with customers through rich, immersive two-way conversations", "banner_img": "/assets/global/hello/banner.webp", "getstarted_btn": "Get Started", + "getstarted_btn_url": "https://calendly.com/revenue-squad/solutions-meet", "trustedByComp": { "heading": "Trusted by 30,000+ global businesses", "logos": [