{"id":64611,"date":"2026-01-15T09:00:00","date_gmt":"2026-01-16T02:00:00","guid":{"rendered":"https:\/\/jaybranding.com\/?p=64611"},"modified":"2026-01-15T12:37:30","modified_gmt":"2026-01-15T05:37:30","slug":"tich-hop-zalo-oa-api-zns-tuyet-chieu-cskh-thoi-dai-so","status":"publish","type":"post","link":"https:\/\/jaybranding.com\/en\/tich-hop-zalo-oa-api-zns-tuyet-chieu-cskh-thoi-dai-so\/","title":{"rendered":"T\u00edch H\u1ee3p Zalo OA API &#038; ZNS: Tuy\u1ec7t Chi\u00eau CSKH Th\u1eddi \u0110\u1ea1i S\u1ed1"},"content":{"rendered":"<p class=\"wp-block-paragraph\">\u1ede Vi\u1ec7t Nam, n\u1ebfu kh\u00e1ch h\u00e0ng kh\u00f4ng d\u00f9ng Facebook th\u00ec ch\u1eafc ch\u1eafn h\u1ecd d\u00f9ng <strong>Zalo<\/strong>. V\u1edbi h\u01a1n 75 tri\u1ec7u ng\u01b0\u1eddi d\u00f9ng th\u01b0\u1eddng xuy\u00ean, Zalo kh\u00f4ng c\u00f2n \u0111\u01a1n thu\u1ea7n l\u00e0 \u1ee9ng d\u1ee5ng chat m\u00e0 \u0111\u00e3 tr\u1edf th\u00e0nh &#8220;m\u1eb7t ti\u1ec1n&#8221; kinh doanh s\u1ed1 1 c\u1ee7a c\u00e1c doanh nghi\u1ec7p Vi\u1ec7t th\u00f4ng qua <strong>Zalo Official Account (OA)<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1eb7c bi\u1ec7t l\u00e0 d\u1ecbch v\u1ee5 <strong>ZNS (Zalo Notification Service)<\/strong> &#8211; gi\u1ea3i ph\u00e1p g\u1eedi th\u00f4ng b\u00e1o CSKH qua API v\u1edbi chi ph\u00ed r\u1ebb h\u01a1n SMS 40-50% m\u00e0 n\u1ed9i dung l\u1ea1i sinh \u0111\u1ed9ng, k\u00e8m logo th\u01b0\u01a1ng hi\u1ec7u.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Zalo OA &#038; ZNS L\u00e0 G\u00ec?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Zalo OA (Official Account):<\/strong> Trang doanh nghi\u1ec7p tr\u00ean Zalo (t\u01b0\u01a1ng t\u1ef1 Fanpage Facebook). Kh\u00e1ch h\u00e0ng c\u00f3 th\u1ec3 Chat, \u0111\u1eb7t h\u00e0ng, xem b\u00e0i vi\u1ebft.<\/li>\n<li><strong>ZNS (Zalo Notification Service):<\/strong> API cho ph\u00e9p doanh nghi\u1ec7p g\u1eedi tin nh\u1eafn th\u00f4ng b\u00e1o (OTP, \u0111\u01a1n h\u00e0ng, l\u1ecbch h\u1eb9n) \u0111\u1ebfn s\u1ed1 \u0111i\u1ec7n tho\u1ea1i kh\u00e1ch h\u00e0ng <strong>k\u1ec3 c\u1ea3 khi h\u1ecd CH\u01afA Follow OA<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. Quy Tr\u00ecnh \u0110\u0103ng K\u00fd S\u1eed D\u1ee5ng ZNS<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0110\u0103ng k\u00fd Zalo OA:<\/strong> Access <a href=\"https:\/\/oa.zalo.me\" target=\"_blank\" rel=\"noopener\">oa.zalo.me<\/a>. (Y\u00eau c\u1ea7u Gi\u1ea5y ph\u00e9p kinh doanh).<\/li>\n<li><strong>X\u00e1c th\u1ef1c (Verify) OA:<\/strong> \u0110\u1ec3 d\u00f9ng \u0111\u01b0\u1ee3c API, OA c\u1ee7a b\u1ea1n b\u1eaft bu\u1ed9c ph\u1ea3i c\u00f3 t\u00edch v\u00e0ng (Verified).<\/li>\n<li><strong>T\u1ea1o \u1ee8ng d\u1ee5ng (App ID):<\/strong> Access <a href=\"https:\/\/developers.zalo.me\" target=\"_blank\" rel=\"noopener\">developers.zalo.me<\/a> \u0111\u1ec3 l\u1ea5y `App ID` v\u00e0 `Secret Key`.<\/li>\n<li><strong>N\u1ea1p ti\u1ec1n &#038; \u0110\u0103ng k\u00fd m\u1eabu tin:<\/strong> ZNS kh\u00f4ng cho g\u1eedi n\u1ed9i dung t\u1ef1 do. B\u1ea1n ph\u1ea3i t\u1ea1o template (VD: &#8220;Chao A, don hang B da duoc giao&#8221;) v\u00e0 g\u1eedi Zalo duy\u1ec7t.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">3. H\u01b0\u1edbng D\u1eabn K\u1ef9 Thu\u1eadt: G\u1eedi ZNS Qua API<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">B\u01b0\u1edbc 1: L\u1ea5y Access Token (OAuth 2.0)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zalo d\u00f9ng c\u01a1 ch\u1ebf Refresh Token kh\u00e1 ph\u1ee9c t\u1ea1p. Token ch\u1ec9 s\u1ed1ng 25 gi\u1edd.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\" data-no-auto-translation=\"\">\/\/ H\u00e0m l\u1ea5y Access Token m\u1edbi t\u1eeb Refresh Token\nfunction getZaloAccessToken($refreshToken) {\n    $appId = \"YOUR_APP_ID\";\n    $secretKey = \"YOUR_SECRET_KEY\";\n    \n    $url = \"https:\/\/oauth.zalo.me\/v4\/access_token\";\n    $data = [\n        'app_id' => $appId,\n        'grant_type' => 'refresh_token',\n        'refresh_token' => $refreshToken\n    ];\n    \n    $headers = [\n        'Content-Type: application\/x-www-form-urlencoded',\n        'secret_key: ' . $secretKey\n    ];\n\n    \/\/ ... (Code CURL g\u1eedi POST) ...\n    \/\/ Tr\u1ea3 v\u1ec1 JSON ch\u1ee9a access_token m\u1edbi v\u00e0 refresh_token m\u1edbi\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">B\u01b0\u1edbc 2: G\u1ecdi API G\u1eedi Tin ZNS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Endpoint: <code data-no-translation=\"\" data-no-auto-translation=\"\">https:\/\/business.openapi.zalo.me\/message\/template<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\" data-no-auto-translation=\"\">$accessToken = \"ACCESS_TOKEN_VUA_LAY\";\n$templateId = \"123456\"; \/\/ ID m\u1eabu tin \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t\n$phone = \"84909123456\"; \/\/ S\u1ed1 \u0111i\u1ec7n tho\u1ea1i kh\u00e1ch (84...)\n\n$templateData = [\n    'customer_name' => 'Nguyen Van A',\n    'order_code' => 'DH9999',\n    'date' => '30\/01\/2026'\n];\n\n$body = [\n    'phone' => $phone,\n    'template_id' => $templateId,\n    'template_data' => $templateData,\n    'tracking_id' => 'TRACK_' . time()\n];\n\n$ch = curl_init('https:\/\/business.openapi.zalo.me\/message\/template');\ncurl_setopt($ch, CURLOPT_HTTPHEADER, [\n    'access_token: ' . $accessToken,\n    'Content-Type: application\/json'\n]);\ncurl_setopt($ch, CURLOPT_POST, 1);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));\n$result = curl_exec($ch);\n\/\/ Ki\u1ec3m tra result: error = 0 l\u00e0 th\u00e0nh c\u00f4ng<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. Nh\u1eefng L\u1ed7i &#8220;\u0110au \u0110\u1ea7u&#8221; Khi T\u00edch H\u1ee3p Zalo<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>L\u1ed7i Token H\u1ebft H\u1ea1n:<\/strong> Nhi\u1ec1u Dev qu\u00ean c\u01a1 ch\u1ebf t\u1ef1 \u0111\u1ed9ng refresh token. N\u1ebfu Web c\u1ee7a b\u1ea1n \u00edt traffic, token h\u1ebft h\u1ea1n m\u00e0 kh\u00f4ng ai g\u1ecdi refresh th\u00ec s\u1ebd ch\u1ebft API. C\u1ea7n d\u00f9ng Cronjob \u0111\u1ec3 refresh \u0111\u1ecbnh k\u1ef3.<\/li>\n<li><strong>Rate Limit:<\/strong> Zalo gi\u1edbi h\u1ea1n s\u1ed1 l\u01b0\u1ee3ng request. N\u1ebfu spam qu\u00e1 nhanh s\u1ebd b\u1ecb Block.<\/li>\n<li><strong>R\u1edbt tin (Undelivered):<\/strong> N\u1ebfu kh\u00e1ch h\u00e0ng ch\u1eb7n nh\u1eadn tin t\u1eeb ng\u01b0\u1eddi l\u1ea1 ho\u1eb7c kh\u00f4ng d\u00f9ng Zalo l\u00e2u ng\u00e0y, tin ZNS s\u1ebd fail. C\u1ea7n c\u00f3 c\u01a1 ch\u1ebf Fallback sang SMS.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5. Gi\u1ea3i Ph\u00e1p Zalo Automation C\u1ee7a JAYbranding<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ch\u00fang t\u00f4i cung c\u1ea5p module Zalo Marketing to\u00e0n di\u1ec7n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 <strong>Auto Refresh Token:<\/strong> H\u1ec7 th\u1ed1ng server ri\u00eang \u0111\u1ea3m b\u1ea3o token lu\u00f4n &#8220;s\u1ed1ng&#8221;.<\/li>\n<li>\u2705 <strong>Smart Fallback:<\/strong> G\u1eedi Zalo tr\u01b0\u1edbc -> N\u1ebfu l\u1ed7i (sau 15s) -> T\u1ef1 \u0111\u1ed9ng g\u1eedi SMS Brandname thay th\u1ebf. Ti\u1ebft ki\u1ec7m chi ph\u00ed t\u1ed1i \u0111a.<\/li>\n<li>\u2705 <strong>Zalo Mini App:<\/strong> T\u00edch h\u1ee3p App b\u00e1n h\u00e0ng ngay trong Zalo \u0111\u1ec3 t\u1eadn d\u1ee5ng h\u1ec7 sinh th\u00e1i.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-background wp-block-paragraph\" style=\"background-color:#f0f0f1;padding-top:20px;padding-right:20px;padding-bottom:20px;padding-left:20px;font-size:20px\"><strong>\ud83d\udcde Ch\u0103m s\u00f3c kh\u00e1ch h\u00e0ng t\u1ef1 \u0111\u1ed9ng v\u1edbi ZNS!<\/strong><br>Hotline: <a href=\"tel:0899991131\"><strong>0899991131<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ V\u1ec1 Zalo API<\/h2>\n\n\n<p>[faqs]<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Chi ph\u00ed g\u1eedi ZNS l\u00e0 bao nhi\u00eau?<\/h4>\n\n\n<p class=\"wp-block-paragraph\">Kho\u1ea3ng 200\u0111 &#8211; 300\u0111\/tin (r\u1ebb h\u01a1n SMS th\u01b0\u1eddng l\u00e0 500\u0111 &#8211; 800\u0111). Ch\u1ec9 t\u00ednh ph\u00ed khi g\u1eedi th\u00e0nh c\u00f4ng.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">ZNS c\u00f3 g\u1eedi n\u1ed9i dung qu\u1ea3ng c\u00e1o \u0111\u01b0\u1ee3c kh\u00f4ng?<\/h4>\n\n\n<p class=\"wp-block-paragraph\">C\u00f3, nh\u01b0ng ki\u1ec3m duy\u1ec7t r\u1ea5t g\u1eaft v\u00e0 chi ph\u00ed cao h\u01a1n tin CSKH. Th\u01b0\u1eddng ch\u1ec9 n\u00ean d\u00f9ng ZNS \u0111\u1ec3 b\u00e1o \u0111\u01a1n h\u00e0ng\/OTP.<\/p>\n\n\n<p>[\/faqs]<\/p>","protected":false},"excerpt":{"rendered":"<p>\u1ede Vi\u1ec7t Nam, n\u1ebfu kh\u00e1ch h\u00e0ng kh\u00f4ng d\u00f9ng Facebook th\u00ec ch\u1eafc ch\u1eafn h\u1ecd d\u00f9ng Zalo. V\u1edbi h\u01a1n 75 tri\u1ec7u ng\u01b0\u1eddi d\u00f9ng th\u01b0\u1eddng xuy\u00ean, Zalo kh\u00f4ng c\u00f2n \u0111\u01a1n thu\u1ea7n l\u00e0 \u1ee9ng d\u1ee5ng chat m\u00e0 \u0111\u00e3 tr\u1edf th\u00e0nh &#8220;m\u1eb7t ti\u1ec1n&#8221; kinh doanh s\u1ed1 1 c\u1ee7a c\u00e1c doanh nghi\u1ec7p Vi\u1ec7t th\u00f4ng qua Zalo Official Account (OA). \u0110\u1eb7c bi\u1ec7t [&hellip;]<\/p>","protected":false},"author":1,"featured_media":64612,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1084,1082,1081,1019,1083],"class_list":["post-64611","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tin-tuc","tag-code-php-zalo","tag-gui-tin-zns","tag-tich-hop-zalo-oa","tag-zalo-api","tag-zalo-notification-service"],"_links":{"self":[{"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/posts\/64611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/comments?post=64611"}],"version-history":[{"count":1,"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/posts\/64611\/revisions"}],"predecessor-version":[{"id":64616,"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/posts\/64611\/revisions\/64616"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/media\/64612"}],"wp:attachment":[{"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/media?parent=64611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/categories?post=64611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jaybranding.com\/en\/wp-json\/wp\/v2\/tags?post=64611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}