Blog · AI Agent

Chatbot development pricing 2026: website, Zalo OA and Facebook

Customer holding a phone reading a business message, illustrating Zalo OA messages sent through the API

Photo: JESHOOTS.com (CC0, StockSnap). On the customer side every technical difference between UID and phone number disappears - a message either arrives or it does not.

Messages arriving after hours are where revenue leaks most. Illustration generated with AI.

The most common technical question when wiring Zalo into a system is "how do I send a message to a phone number through the API". The short answer: the ordinary advisory-message API cannot do it, and as of 1 January 2026 Zalo has renamed and restructured the part that can.

In short

The Zalo OA API has two separate delivery paths. Advisory messages go to a user ID (UID), only within 7 days of the customer's last interaction when called through OpenAPI, and free for the first 48 hours. To reach a phone number you need ZBS Template Message, effective 1 January 2026, which merges UID transaction messages, UID communication messages and ZNS into one product. Templates must be approved before use, billing is per successfully delivered message, and base prices start at 200 VND, rising to 300 VND for authentication, payment-request and voucher templates.

Can the Zalo OA API send a message to any phone number?

No. This misunderstanding forces teams to rebuild their architecture halfway through more often than any other. The Zalo Official Account advisory-message API takes a user_id, which identifies a person relative to your OA specifically. That identifier only exists after the person has messaged or otherwise interacted with your OA. No interaction means no UID, and there is no way to look up a UID from a phone number.

Zalo also constrains timing. According to the official documentation, advisory messages sent through OpenAPI are allowed only within 7 days of the customer's last interaction, while manual sending inside OA Manager stretches to 365 days. The first 48 hours after an interaction are free; past that, charges begin.

If you want to reach someone who has never messaged your OA, or you only hold a phone number in your database, you have to take the second path.

Computer screen showing source code while a developer integrates a messaging API

Photo: Ilya Pavlov (CC0, StockSnap). Wiring the API is not the hard part. Choosing the right message type before the first line of code is.

What is ZBS Template Message and what does it replace?

ZBS Template Message is Zalo Business Solutions' templated messaging product, effective from 1 January 2026. According to Zalo Official Account documentation, it consolidates three previously separate things into one: UID transaction messages, UID communication messages and ZNS. The detail that matters to whoever writes the integration is that it delivers either by UID or by phone number on Zalo.

The trade for that flexibility is a constraint: every template must be registered and reviewed before use. You do not compose free-form content at send time the way you can with advisory messages. Dynamic content lives only in the parameters you fill into an already approved template.

ZBS Template Message splits into two groups. Transaction messages cover OTP codes, order confirmations, delivery status and balance changes. After-sales messages cover appointment reminders, birthday greetings, offers reserved for existing customers, and satisfaction surveys.

Zalo OA message types in 2026, side by side

Message typeAddressed byTiming ruleCost
Advisory message
replying to a customer
UID7 days via OpenAPI, 365 days when sent manually in OA ManagerFree for the first 48 hours, charged after that
Broadcast
general announcements
Users following the OAOnly between 6:00 and 19:59Monthly quota set by your service plan
ZBS transaction messageUID or phone numberNo time window, but the template needs prior approvalCharged per delivered message
ZBS after-sales messageUID or phone numberNo time window, template needs prior approvalCharged per delivered message
Group chat messageMembers of the OA's groupsNo stated limitFree

Read this table as a decision tree rather than a list. The first question is always whether the recipient has interacted with your OA, because that determines whether you still get to choose or are forced into a template.

What does sending to a phone number actually cost?

Zalo charges per successfully delivered message, not per API call you make. The Zalo Business Solutions pricing page lists base rates by template type: 300 VND for authentication, payment-request and voucher templates, and 200 VND for the remaining types. The first action button is free; from the second button onward within the same category, add 100 VND per button.

One architectural detail is easy to miss: sending by UID is subsidised below sending by phone number. If your system can capture the UID at the customer's first interaction and reuse it later, long-run cost differs meaningfully from firing at phone numbers every time.

On timing, Zalo Business Solutions announced that new unit prices apply to templates created from 16 March 2026, and from 24 March 2026 to templates created before that. What you actually pay also depends on template classification, components and CTA buttons, so budget from a realistic usage scenario rather than multiplying the base rate by volume.

ZBS Template Message base price per delivered message BASE PRICE PER DELIVERED MESSAGE - ZBS 2026 Standard template 200 VND Auth, payment, voucher 300 VND Each button after the first plus 100 VND 0 rising

Five reasons the API call succeeds but nothing arrives

Most failures are policy, not code. These five causes account for nearly every case we see when we take over an existing integration.

  • The template is not approved yet. ZBS Template Message requires registration and review before use. Calling the API with a pending template sends nothing.
  • You are past the 7-day window. You are calling the advisory-message API for a customer who has been silent for over a week. That case has to move to a template message; there is no workaround.
  • Broadcast scheduled outside the allowed hours. Broadcasts only go out between 6:00 and 19:59, so a queue set to fire at midnight never delivers.
  • A UID borrowed from a different OA. UIDs are scoped to one specific OA. Move your system to a new OA and every stored UID becomes meaningless; you have to collect them again.
  • The recipient never gave you their number. Zalo requires the business to register and verify its name or brand, and to call the API only for people who have an existing relationship with the business.
Customer holding a phone and reading a business notification message received on Zalo

Photo: Icons8 team (CC0, StockSnap). The customer sees one short message, so every parameter in the template has to earn its place.

Should you send by UID or by phone number?

A practical rule: prefer UID whenever you have one, and use a phone number only when nothing else is available. Three reasons. UID delivery is subsidised below phone-number delivery. Someone with a UID has already reached out to your brand, so read rates run higher. And you keep the exchange inside a single chat thread instead of creating an isolated notification.

Which means the first thing to build is not the send function. It is writing the UID to your database the moment a customer first interacts and attaching it to their customer record. That belongs to the data foundation for AI agents, and doing it early saves both money and rework later.

Phone numbers remain the only path in three situations: the customer bought in-store and left only a number, the data was imported from a legacy system, and messages that must arrive such as authentication codes or delivery notifications.

How does this fit with an AI agent?

Keep the two roles separate. Template messages are what the system fires on an event: order confirmed, appointment approaching, OTP requested. That part needs no AI, only the right template at the right moment. Advisory messages are the free-form conversation, and that is where an agent earns its keep: read the question, look up product data, answer inside the free 48-hour window.

A good design lets template messages reopen the conversation window. The customer taps a button inside a reminder, that action counts as a new interaction, and the agent immediately regains the right to reply freely. That is how a care journey runs long without hitting the time limit.

If you are weighing total cost before committing, two related pieces help: Zalo OA pricing and chatbot setup covers the annual OA plan fees, and chatbot development pricing separates build cost from running cost.

Frequently asked questions

Can the Zalo OA API message a phone number that never contacted the OA?

Not with the advisory-message API, because that endpoint takes a user ID rather than a phone number, and a user ID only exists after the customer interacts. To reach a phone number you need ZBS Template Message with a template Zalo has approved, and the recipient must already have a relationship with the business.

Does ZBS Template Message replace ZNS?

Yes, and not only ZNS. From 1 January 2026 ZBS Template Message consolidates three products: UID transaction messages, UID communication messages and ZNS. It splits into transaction and after-sales messages, delivers by either user ID or phone number, and every template must be registered and approved before use.

How much does one ZBS message cost?

The Zalo Business Solutions pricing page lists base rates of 300 VND for authentication, payment-request and voucher templates, and 200 VND for other template types. The first action button is free and each button after that adds 100 VND. Sending by user ID is subsidised below sending by phone number.

Why does the API call succeed while the customer receives nothing?

Five common causes: the template has not been approved, the customer has been silent past the 7-day advisory window on OpenAPI, a broadcast was scheduled outside the 6:00 to 19:59 range, the user ID came from a different OA and is therefore invalid, and the recipient never gave the business their number.

Need Zalo OA wired into your systems?

Book a free technical consult