AI integration, South Africa
AI integration into the systems you already run.
IndunAI connects an AI assistant to the systems a small business already uses: WhatsApp on your own number, your website, your mailbox, your calendar, GoHighLevel and PayFast. The model writes the words. Our server does the reading and writing in those systems, and checks each step before it happens. Built in Durban, hosted in Johannesburg.
Looking for something else? Software that does not exist yet is custom AI development. Leads and follow-up are on the AI sales agent page, and the WhatsApp side is WhatsApp automation.
online, replies in seconds
Hi, can I book a service for Saturday morning?21:04
Saturday has 08:30 or 10:00 open. Which one suits you?21:04
Saturday 08:30Booked for Saturday at 08:30. You will get a reminder before the appointment, and you can move it right here.21:05
An illustration of the pattern. The times come from your calendar and are re-checked before the booking is written.
What we connect
What we connect: CRM, calendars, WhatsApp, email, payments.
For AI integration services, the list of systems is most of the question. This is what IndunAI connects to today, in production, and what each connection reads and writes.
The WhatsApp Business Platform (Cloud API) on your own number, connected in Meta's own window. It can run alongside the WhatsApp Business app on your phone, one assistant can answer on several numbers, and messages outside WhatsApp's 24-hour window go as templates Meta has approved.
Calendars
Google Calendar, a CalDAV calendar such as iCloud, Nextcloud or Fastmail, or GoHighLevel's own calendars. Busy times are read before a time is offered and the booking is written when it is made, per staff member where each keeps a diary.
CRM
GoHighLevel: contacts, notes, pipeline cards and stages, tags, appointments and, if you want it, the conversation itself. It is the only CRM IndunAI connects to today, and the section below covers it.
Your own mailbox, over IMAP and SMTP. It answers customers who email you and sends reminders, invoices and review requests from your address, or it can send only. It ignores machine-generated mail, and a From header is not taken as proof of who sent it.
Payments
PayFast, into your own merchant account: payment links on invoices and deposits, believed only once PayFast itself confirms the notification. Without PayFast, the invoice carries your banking details, with its own number as the reference.
Your website and forms
A chat bubble from one line of code, a quote form that feeds the assistant directly, and forms the assistant hosts itself, sent as a link and filed as a PDF against the booking.
A Shopify catalogue
A Shopify store's public catalogue, read so the assistant recommends real products, with the price and the link written by the server, shown on WhatsApp as a product carousel. Available, and off until it is set up for you.
Not on the list. Outlook and Microsoft 365 calendars, which do not speak CalDAV, and HubSpot, Salesforce, Zoho CRM, Pipedrive or Zapier. Any of those is a build question, and the answer depends on what the other system's API allows.
The model
ChatGPT, Claude and OpenAI integration: choosing the model.
A request for ChatGPT integration usually means one of two things: OpenAI's models answering your customers inside your systems, or the ChatGPT app your team uses reaching into the CRM. We do the first. The second is a different product.
OpenAI by default
The assistant runs on OpenAI's API unless you choose otherwise, and on our account your instance's privacy notice names that provider. The engine speaks the OpenAI-compatible chat-completions protocol, which is what most LLM integration comes down to.
A setting, not a rebuild
Tool calls are written in the model's reply and read by our server, so nothing depends on one provider's tool-calling feature. On your own AI key, billed to your provider account, you set the endpoint and model in the dashboard: another OpenAI model, Claude or Gemini through an OpenAI-compatible gateway such as OpenRouter, or a model you host yourself.
Pick for obedience, not brilliance
The job is to follow your rules on every turn at a cost you can carry, so a model that follows instructions beats a cleverer one that improvises. If you take deposits, pick one that can read images, so a proof of payment can be read for the desk.
The checks stay put
Whichever model writes the words, the server still checks whether a slot is free, what something costs and whose booking it is. By default, a picture of a payment is not a payment: a person checks the bank before it counts.
CRM automation
CRM automation and GoHighLevel.
Most of what people mean by AI CRM automation is this: the assistant has the conversation, and the CRM ends up holding what it learned without anybody retyping it. GoHighLevel is the CRM IndunAI connects to, and it is a two-way WhatsApp CRM integration.
Access you can read
One sub-account, a GoHighLevel Private Integration token and a named list of scopes for contacts, opportunities and calendars, plus conversations only if you want the chat mirrored. The token lives in your instance's own credential store.
Your pipeline, your stages
Nothing pipeline-shaped happens until you map your own stages. Then an enquiry opens a card, qualifying answers tag and move it, a booking moves it again, and a lead who goes quiet is parked at Unresponsive, then closed as lost, on clocks you set. Each service can have its own board and calendar.
Tags your workflows can use
Every move the assistant makes also tags the contact with the assistant's name and the stage, such as New Lead, Qualified or Booked, so your own GoHighLevel workflows can trigger on it.
The CRM can talk back
A token-protected webhook lets your GoHighLevel workflows pause or resume a conversation, file a note as a hand-off, or, where you switch it on, open a WhatsApp conversation with an approved template when a form is submitted.
It leaves your records alone
Before it moves a quiet lead's card, it reads the card again, and one that somebody moved by hand stays where they put it. A number typed into your website chat arrives as a new contact tagged unverified, never over the contact that already owns it.
Alerts where your team works
Hand-off alerts can land in GoHighLevel as notes instead of on a phone, and a hand-off can move the card to your own assistance column. A crisis alert still goes to a phone as well.
In production
Why integrations fail in production, and how we guard them.
An integration works in the demo because nothing is slow, nobody edits the CRM by hand and the server never restarts at the wrong moment. Live, all three happen. This is what AI API integration actually meets, and what the code does about it.
Half a diary is not a quiet day
If only part of a calendar can be read, the read fails rather than returning the part, because a short list of busy times looks exactly like free time. A diary nobody could read is never treated as an empty one.
A slow CRM at the worst moment
Filing into GoHighLevel runs beside the booking, so a slow CRM never holds up a confirmation. Where availability lives in GoHighLevel, a slow read at the confirm step is asked once more; if it still fails, nothing is booked and your team gets a row naming the person and the time they chose.
A restart between two writes
The moment a booking is saved, the pushes it owes your calendar and your CRM are written to a journal. If the server restarts before they run, they run when it comes back.
Accepted is not delivered
WhatsApp accepting a message is not the message arriving. Where a send matters, the server listens for Meta's later failure notice instead of marking it sent on the first reply.
When two systems disagree
With cancellation read-back on, a cancellation your front desk makes inside GoHighLevel holds the reminder and tells you. The booking is not cancelled on the CRM's word unless you switch that on, because a mis-click should not drop somebody who is still coming.
Doors that check who knocked
WhatsApp messages need Meta's signature, the CRM webhook its own token, and a PayFast notice PayFast's own confirmation. Our AI and Google keys are attached by a proxy, so your instance never holds them.
Broken on purpose, first
Scripted conversations are run while the outside world misbehaves: the calendar timing out mid-booking, the CRM answering in the wrong shape, the model failing once, the same WhatsApp message arriving twice. The faults are injected at the edges, never by editing the code under test.
What it costs
The connections that exist are part of the price.
Connecting what is on this page is setting up the assistant, not building software.
R1 450 / month, including VAT
+ R2 500 once-off setup
- Up to 300 conversations a month: the IndunAI assistant as it is, with the connections on this page, on its own instance
- 300 to 500 conversations: R2 250 a month
- Managed, fully looked after: R4 995 a month, setup included, 2,000 conversations, build items within reason
- A new connection is scoped in writing and priced once you have signed up, before work starts
- Software that does something IndunAI does not do at all is priced per project
- Meta's WhatsApp message fees are Meta's, and separate
FAQ
Fair questions.
Which CRMs do you integrate with?
GoHighLevel, in both directions: the assistant files contacts, notes, pipeline stages, tags and appointments there, and your GoHighLevel workflows can pause or resume a conversation through a webhook. No other CRM is connected today. HubSpot, Salesforce, Zoho CRM or Pipedrive would be a build, and whether it makes sense depends on what that CRM's API allows, so we check before we quote.
Can you connect ChatGPT to our systems?
If you mean OpenAI's models answering your customers and working in your calendar, CRM and WhatsApp, yes: IndunAI runs on OpenAI's API by default, with our server checking every step. If you mean the ChatGPT app your team uses reaching into your CRM, no, we do not build that. On your own AI key the assistant can also run on another model over the same protocol, Claude included, through an OpenAI-compatible gateway.
Is our data used to train the model?
We do not train models on your conversations. The replies are written by an AI provider outside South Africa, and on our account your instance's privacy notice names it. On our provider account, its API terms provide that content sent through the API is not used to train its models; on a client's own AI key, that provider's terms apply instead.
Can it use Outlook or Microsoft 365 calendars?
Not today. Outlook and Microsoft 365 calendars do not speak CalDAV, and the Microsoft connection has not been built. Google Calendar, CalDAV calendars such as iCloud, and GoHighLevel's calendars all work. If Outlook is a diary your team will not give up, tell us early, because that is a build rather than a setting.
Tell us what needs connecting.
Which systems, what should move between them, and what has to be true when it works. Send it on WhatsApp or to angus@indunai.co.za, or ask the assistant in the corner of this page first.