diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java
index 3139cf0226175a843c7e53dffd8eb5a1d79a4ef7..327d5a91f0aa9140ca6d553ba7c518f1f03e8529 100644
--- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java
+++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java
@@ -18,14 +18,14 @@ import org.sunbird.common.models.util.TelemetryEnvKey;
 import org.sunbird.common.request.Request;
 import org.sunbird.common.request.RequestContext;
 import org.sunbird.common.responsecode.ResponseCode;
+import org.sunbird.common.util.CloudStorageUtil;
 import org.sunbird.learner.actors.coursebatch.dao.CourseBatchDao;
 import org.sunbird.learner.actors.coursebatch.dao.impl.CourseBatchDaoImpl;
 import org.sunbird.learner.constants.CourseJsonKey;
 import org.sunbird.learner.util.CourseBatchUtil;
 import org.sunbird.learner.util.Util;
 
-import static org.sunbird.common.models.util.JsonKey.CLOUD_STORE_BASE_PATH;
-import static org.sunbird.common.models.util.JsonKey.CLOUD_STORE_BASE_PATH_PLACEHOLDER;
+import static org.sunbird.common.models.util.JsonKey.*;
 import static org.sunbird.common.models.util.ProjectUtil.getConfigValue;
 
 public class CourseBatchCertificateActor extends BaseActor {
@@ -123,6 +123,7 @@ public class CourseBatchCertificateActor extends BaseActor {
       if (MapUtils.isNotEmpty((Map<String,Object>)template.get(CourseJsonKey.NOTIFY_TEMPLATE))) {
         // We need to change stateImgUrl in notifyTemplate
         Map<String, Object> notifyData = (Map<String, Object>) template.get(CourseJsonKey.NOTIFY_TEMPLATE);
+        //TODO cross check the data in environments and remove this check if not required
         String notifyTemplateUrl = getPlaceholderUrl(notifyData,JsonKey.stateImgUrl);
         notifyData.replace(JsonKey.stateImgUrl,notifyTemplateUrl);
         template.put(
@@ -146,8 +147,8 @@ public class CourseBatchCertificateActor extends BaseActor {
     if (MapUtils.isNotEmpty(templateDetails) && templateDetails.containsKey(key)) {
       // replace the actual cloud url with the template value
       templateUrl = (String) templateDetails.get(key);
-      if (templateUrl.contains(getConfigValue(CLOUD_STORE_BASE_PATH)))
-        templateUrl = templateUrl.replace(getConfigValue(CLOUD_STORE_BASE_PATH), getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER));
+      if (templateUrl.contains(CloudStorageUtil.getBaseUrl() +"/"+getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER)))
+        templateUrl = templateUrl.replace(CloudStorageUtil.getBaseUrl()+"/"+getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER), getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER));
     }
     return templateUrl;
   }
@@ -196,7 +197,7 @@ public class CourseBatchCertificateActor extends BaseActor {
         String notifyTemplateData = (String) template.get(CourseJsonKey.NOTIFY_TEMPLATE);
         //Modify the placeholder with the actual configured cloud base path as ES should have the actual cloud path
         if (notifyTemplateData.contains(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER)))
-          notifyTemplateData = notifyTemplateData.replace(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER), getConfigValue(CLOUD_STORE_BASE_PATH));
+          notifyTemplateData = notifyTemplateData.replace(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER), CloudStorageUtil.getBaseUrl()+"/"+getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER));
         template.put(
                 CourseJsonKey.NOTIFY_TEMPLATE,
                 mapper.readValue(notifyTemplateData,
diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java
index 8d21258cff26bf2f09cca5d9b976092282a9fba0..026c753f4b8036ab89afd13b666e61b8c7cab309 100644
--- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java
+++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java
@@ -232,11 +232,10 @@ public class QRCodeDownloadManagementActor extends BaseActor {
       if (null != obj && obj instanceof List) {
         List<Map<String, Object>> listOfMap = (List<Map<String, Object>>) obj;
         if (CollectionUtils.isNotEmpty(listOfMap)) {
-          //TODO Resolve it and store. Assuming dial code db will have the template url with data migration script
+          //check if template url contains dail storage base path placeholder,if yes then append it with cname url and dial bucket name
           String templateUrl = (String) listOfMap.get(0).get("url");
-          //replace template url with the actual cloud url
-          if (templateUrl.contains(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER)))
-            templateUrl = templateUrl.replace(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER), getConfigValue(CLOUD_STORE_BASE_PATH));
+          String dailStorageBasePathPlaceHolder = getConfigValue(DIAL_STORAGE_BASE_PATH_PLACEHOLDER);
+          templateUrl = resolvePlaceholder(templateUrl, dailStorageBasePathPlaceHolder,getConfigValue(CLOUD_STORAGE_DIAL_BUCKET_NAME));
           return templateUrl;
         }
       }
@@ -244,6 +243,14 @@ public class QRCodeDownloadManagementActor extends BaseActor {
     return "";
   }
 
+  private String resolvePlaceholder(String templateUrl, String placeHolder,String containerName) {
+    if (templateUrl.contains(placeHolder))
+      templateUrl = templateUrl.replace(placeHolder, CloudStorageUtil.getBaseUrl()
+                      + "/" + containerName);
+    return templateUrl;
+  }
+
+
   /**
    * Uploading the generated csv to aws
    *
diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java
index 61c8186bbfab486c07e741e8e5a55a7b3244e659..b4a0fd0c239477253dcb6daa8529fdf0b197a1a5 100644
--- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java
+++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java
@@ -789,6 +789,9 @@ public final class JsonKey {
 
   public static final String CLOUD_FOLDER_CONTENT = "sunbird_cloud_content_folder";
   public static final String CLOUD_STORE_BASE_PATH = "cloud_storage_base_url";
+  public static final String CLOUD_STORAGE_CNAME_URL= "cloud_storage_cname_url";
+  public static final String CLOUD_STORAGE_DIAL_BUCKET_NAME = "cloud_storage_dial_bucketname";
+  public static final String DIAL_STORAGE_BASE_PATH_PLACEHOLDER="cloud_storage_path_prefix_dial";
   public static final String CLOUD_STORE_BASE_PATH_PLACEHOLDER = "cloud_store_base_path_placeholder";
   public static final String TO_URL = "toUrl";
   public static final String TTL = "ttl";
diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java
index 288930091450d01cc9464f0cabec122a356e39fa..adf7fd5aeb57a2f35098e8a01d96e81730a3290a 100644
--- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java
+++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java
@@ -2,6 +2,8 @@ package org.sunbird.common.util;
 
 import java.util.HashMap;
 import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
 import org.sunbird.cloud.storage.BaseStorageService;
 import org.sunbird.cloud.storage.factory.StorageConfig;
 import org.sunbird.cloud.storage.factory.StorageServiceFactory;
@@ -11,6 +13,10 @@ import org.sunbird.common.models.util.PropertiesCache;
 import scala.Option;
 import scala.Some;
 
+import static org.sunbird.common.models.util.JsonKey.CLOUD_STORAGE_CNAME_URL;
+import static org.sunbird.common.models.util.JsonKey.CLOUD_STORE_BASE_PATH;
+import static org.sunbird.common.models.util.ProjectUtil.getConfigValue;
+
 public class CloudStorageUtil {
   private static final int STORAGE_SERVICE_API_RETRY_COUNT = 3;
 
@@ -76,4 +82,11 @@ public class CloudStorageUtil {
     BaseStorageService storageService = getStorageService(storageType);
     return storageService.getUri(container, prefix, Option.apply(isDirectory));
   }
+
+  public static String getBaseUrl() {
+    String baseUrl = getConfigValue(CLOUD_STORAGE_CNAME_URL);
+    if(StringUtils.isEmpty(baseUrl))
+      baseUrl = getConfigValue(CLOUD_STORE_BASE_PATH);
+    return baseUrl;
+  }
 }
diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties
index 08ac8c42afca182272a046bc5109dbabd48d0d7a..0cc89165bc8f4172cfcf09882cb041b06280e196 100644
--- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties
+++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties
@@ -80,7 +80,7 @@ sunbird_otp_allowed_attempt=2
 #Telemetry producer related info
 telemetry_pdata_id=local.sunbird.learning.service
 telemetry_pdata_pid=learning-service
-telemetry_pdata_ver=5.0.0
+telemetry_pdata_ver=5.0.1
 #elastic search top n result count for telemetry
 searchTopN=5
 telemetry_queue_threshold_value=200
@@ -207,4 +207,6 @@ sunbird_msg_91_auth=
 sunbird_api_mgr_base_url=https://dev.sunbirded.org/api
 enrollment_list_size=1000
 cloud_storage_base_url=https://sunbirddev.blob.core.windows.net
-cloud_store_base_path_placeholder=$CLOUD_STORE_BASE_PATH
\ No newline at end of file
+cloud_store_base_path_placeholder=CLOUD_BASE_PATH
+cloud_storage_dial_bucketname=dial
+cloud_storage_path_prefix_dial=DIAL_STORAGE_BASE_PATH
\ No newline at end of file
diff --git a/service/app/filters/ResponseFilter.scala b/service/app/filters/ResponseFilter.scala
index afcf461357f17c3763965c6ffbef994a440079f9..e3100bd7a27d5bebe7e0f4e0c33e4eb6233f942c 100644
--- a/service/app/filters/ResponseFilter.scala
+++ b/service/app/filters/ResponseFilter.scala
@@ -2,7 +2,9 @@ package filters
 
 import akka.stream.Materializer
 import akka.util.ByteString
+import org.apache.commons.lang.StringUtils
 import org.sunbird.common.models.util.JsonKey
+import org.sunbird.common.models.util.JsonKey.{CLOUD_STORAGE_CNAME_URL, CLOUD_STORE_BASE_PATH, CONTENT_CLOUD_STORAGE_CONTAINER}
 import play.api.http.HttpEntity.Strict
 import play.api.mvc.{Filter, RequestHeader, Result}
 import org.sunbird.common.models.util.ProjectUtil.getConfigValue
@@ -18,7 +20,7 @@ class ResponseFilter  @Inject()(implicit val mat: Materializer, ec: ExecutionCon
       if (null != result.body && !result.body.isKnownEmpty){
         val contentType = result.body.contentType
         val updatedBody = result.body.consumeData.map { x =>
-          val y = x.utf8String.replaceAll(getConfigValue(JsonKey.CLOUD_STORE_BASE_PATH_PLACEHOLDER),getConfigValue(JsonKey.CLOUD_STORE_BASE_PATH))
+          val y = x.utf8String.replaceAll(getConfigValue(JsonKey.CLOUD_STORE_BASE_PATH_PLACEHOLDER), getBaseUrl + "/" + getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER))
           logger.info("updated body: " + y)
           y
         }
@@ -29,4 +31,10 @@ class ResponseFilter  @Inject()(implicit val mat: Materializer, ec: ExecutionCon
         Future(result)
       }
     }
+
+  def getBaseUrl: String = {
+    var baseUrl = getConfigValue(CLOUD_STORAGE_CNAME_URL)
+    if (StringUtils.isEmpty(baseUrl)) baseUrl = getConfigValue(CLOUD_STORE_BASE_PATH)
+    baseUrl
+  }
 }
\ No newline at end of file