Krayin CRM WhatsApp turns your WhatsApp Business number into a lead source, and then keeps the whole conversation on the lead.
Messages travel both ways. A customer writes in, the module raises the lead, and your team replies without ever leaving Krayin.
The CRM system facilitates the management of customer interaction across various sources and channels throughout the customer life cycle, involving both the customer and the sales department.
Features
- Automatic lead generation: an unknown number creates the contact, the lead and the first activity together, while a known number appends to the lead that already exists.
- Floating chat widget: leads that have replied carry a bottom-right toggle that opens the whole exchange in WhatsApp’s own colours.
- Two-way messaging: send text, images and documents from the lead view or straight from the chat widget.
- Inbound media capture: incoming images and documents arrive as activities with the file attached, not merely as a note.
- Delivery ticks: every outgoing bubble shows sent, delivered or read, and a failed message carries Meta’s own reason.
- 24-hour window: the widget warns as WhatsApp’s free-form reply window closes, then disables the composer once it has.
- WhatsApp timeline tab: a dedicated tab, icon and empty state filter the activity timeline down to the WhatsApp exchange.
- Paged history: the twenty newest messages load first, and a message over 200 words clips behind a Read more link.
- Signed webhooks: every inbound request must carry a valid signature, and without an app secret the module rejects it outright.
- Separate permissions: sending a message and reading a conversation are granted independently per role.
- Encrypted credentials: Meta tokens are encrypted with the application key before the module writes them.
- Ten locales: ar, en, es, fa, ja, ko, pt_BR, tr, vi and zh_CN, including right-to-left layouts.
Requirements
- Krayin: v2.2.6
- PHP: 8.3 or higher
- Laravel: 12.x
- A Meta WhatsApp Business account with a phone number ID, an access token and an app secret
Krayin – Laravel CRM
Krayin is built on the most popular PHP framework available in the market today, named Laravel. Since Krayin inherits features of Laravel, it makes Krayin a super flexible and scalable CRM software.
With the code-driven approach and also the fully customizable structure, you can easily add/change anything and can even deploy your code in the Krayin CRM.
Krayin ->
Readme File(For Installation).
Installation
Unzip the respective extension zip and then merge the “packages” folder into the project root directory.
- Add this in
bootstrap/providers.phpunder the providers array:
Webkul\WhatsApp\Providers\WhatsAppServiceProvider::class,
- Add to
composer.jsonunder ‘psr-4’:
"Webkul\\WhatsApp\\": "packages/Webkul/WhatsApp/src"
Run these commands below to complete the setup
composer dump-autoload php artisan whatsapp-crm:install
That is it. The installer runs the migrations, seeds the WhatsApp lead source and publishes the module assets.
No other file needs to change. Earlier releases asked for a CSRF exception in bootstrap/app.php, which is no longer required.
The webhook route now sits outside the web middleware group, so it never needs a CSRF token. Meta’s signature proves it instead.
Create Meta APP
First, log into the Facebook Meta developer account and click on the Create App button.

In the App details panel, fill out your custom App name and provide your active App contact email credentials.

Under Add use cases, find Connect with customers through WhatsApp, toggle its checkbox, and click Next.

Review the Publishing requirements checklist to ensure compliance, then hit Next to move to the final review screen.

Check your application overview configurations, associate your business portfolio, and finalize by clicking Create app.

Open your newly created app, look at the sidebar menu options, navigate to Use case, and choose Try it out under WhatsApp.

Hit Claim test number to generate a default sandbox number alongside your Phone Number ID and temporary Access Token.

Launch the recipient configuration prompt, choose your country code, and input your mobile number to clear it for message testing.

Advance to Production setup to bind webhooks. Enter your application Callback URL, establish your custom Verify Token, and save changes.

Scroll down to the permanent credential section and select Generate permanent token to secure non-expiring credentials.

Copy your newly generated token strings, Phone Number ID, and App Secret parameters into your Krayin dashboard panel configurations.

Then click on save.
Here the admin gets the Access Token.
Customer Workflow
A WhatsApp lead begins on the customer’s phone rather than on a web page. The customer simply messages your WhatsApp Business number.
Meta then posts that message to the module’s webhook. Krayin creates the contact, the lead and the first activity together.
Note: Krayin is an admin-only CRM. Therefore no storefront widget exists here — the conversation starts inside WhatsApp itself.
- The customer messages your WhatsApp Business number.
- Meta delivers that message to the module’s webhook endpoint.
- The module verifies Meta’s X-Hub-Signature-256 header before trusting anything.
- Next it matches an existing lead by phone number, or creates a new one.
- Finally the message is stored as a WhatsApp activity on that lead.
Step-by-Step: Following an inbound message
- Ask a colleague to message your WhatsApp Business number.
- Open Leads in the admin panel.
- Look for a lead titled New Lead by WhatsApp followed by the sender name and number.
- Open that lead and switch to the WhatsApp tab to read the message.
Module Configuration
Every setting lives in the admin panel, so the module reads no environment variables. Go to Configure → General → WhatsApp.

Status: turns the integration on. Consequently the remaining fields become required once it is enabled.
WhatsApp Chat Widget: shows the floating chat popup on leads that have replied. Additionally, a role permission controls who may open it.
Phone number ID: the WhatsApp Cloud API phone number id taken from your Meta app.
Access Token: the Meta Graph API token the module uses for every outgoing call.
Webhook Verification Token: any secret you choose. Enter the same value in Meta’s webhook setup screen.
App Secret: your Meta app secret. Notably it is mandatory, because the module checks every inbound webhook against it.
Krayin stores configuration in plain text, so the module encrypts these three credentials itself before writing them.
Step-by-Step: Configuring the module
- Open Configure → General → WhatsApp.
- Switch Status on.
- Paste the Phone number ID and Access Token from your Meta app.
- Choose a Webhook Verification Token and paste your App Secret.
- Click Save Configuration, then register the webhook URL in Meta.
Permissions
The module registers two permissions under Activities. Grant them per role in Settings → Roles.

Send WhatsApp: allows a role to send messages from a lead.
WhatsApp Chat: allows a role to open the chat widget and read the conversation.
Krayin matches permissions exactly, without inheritance. Therefore granting one never implies the other, as the screenshot above shows.
Consequently a role can read a conversation while remaining unable to reply. In that case the widget hides the composer rather than showing one that fails.
Step-by-Step: Granting WhatsApp access
- Open Settings → Roles and edit a role.
- Set Permission Type to Custom.
- Expand Activities in the permission tree.
- Tick Send WhatsApp, WhatsApp Chat, or both.
- Click Save Role.
Generating Leads
An unknown number produces a fresh contact and lead. Meanwhile a known number appends to the lead that already exists.

The module resolves the pipeline, stage, source and owner at runtime. As a result the module hardcodes no ids, so any installation works.

Each lead records WhatsApp as its source. Additionally the sender becomes a person record with the number attached.
The module handles retries too. Meta resends a message when it is unsure, so the module remembers each message id for 24 hours.
Step-by-Step: Checking a generated lead
- Open Leads from the left menu.
- Open the lead whose title begins with New Lead by WhatsApp.
- Check Source under About Lead; it reads WhatsApp.
- Check About Persons for the contact and the number that started the conversation.
Inbound Images and Documents
Text is not the only thing customers send. The module also captures inbound images and documents as activities.
Meta sends a media id instead of the file. Therefore the module resolves that id against the Graph API and downloads the bytes.
The module writes the activity during the webhook, then fetches the file afterwards. Consequently Meta receives a fast acknowledgement.
- Accepted types are an allow-list: JPEG, PNG, WebP, PDF, Word, Excel, PowerPoint, CSV and plain text.
- The size ceiling is 16 MB, and the module checks it from Meta’s metadata before transferring anything.
- Moreover the download URL must belong to a Meta host, otherwise the module refuses to fetch it.
- Files are stored under a generated name, with the extension taken from the verified MIME type.
Audio, video and stickers reach the log and receive an acknowledgement, however the module stores none of them.
Step-by-Step: Receiving an image or document
- Send an image or a PDF to your WhatsApp Business number.
- Open the matching lead in the admin panel.
- Switch to the WhatsApp tab on the activity timeline.
- Open the new activity; the file appears as an attachment beneath the caption.
WhatsApp Activity Timeline
Every lead gains a dedicated WhatsApp tab. It filters the timeline down to the WhatsApp exchange alone.

Each entry carries its own label for sent and received. Similarly each row carries the WhatsApp icon rather than the generic activity mark.
The tab arrives through Krayin’s own extension points. As a result core views stay untouched and survive upgrades.
Step-by-Step: Reading the WhatsApp timeline
- Open any lead that has WhatsApp activity.
- Find the activity tabs above the timeline.
- Click WhatsApp.
- Scroll the filtered list to follow the exchange in order.
Replying From a Lead
The lead view carries a green WhatsApp action button. Clicking it opens a compose panel without leaving the record.

Message Type is the first field, and it decides everything below it. Choose Text, Image or Document.
Each choice reveals only the fields it needs. Consequently the panel never shows an upload box for a plain text reply.
Text
A single message box appears, and it accepts up to 4096 characters. That ceiling comes from WhatsApp itself.
Image
A required Caption field appears above the picker. Additionally you may attach up to ten images in one go.
- Accepted formats are JPEG and PNG only.
- Each file may reach 5 MB.
- The caption is limited to 1024 characters.
Notably the module rejects WebP and GIF before upload. Meta accepts such files, issues a message id, then quietly never delivers them.
Document
Here the panel asks for a caption and exactly one file. The caption travels with the document as its visible label.
- Accepted formats are PDF, Word, Excel, PowerPoint, CSV, plain text, ZIP, and image files.
- The ceiling is 16 MB, matching the WhatsApp Cloud API.
What happens after you press send
Media reaches Meta first as an upload. The module then sends the message by media id rather than by URL.
Next it records the reply as an activity on the lead, so the WhatsApp tab and the chat widget both show it straight away.
Finally it stores Meta’s message id, which is what later turns into the delivery tick described further down.
A rejected send returns a readable reason instead of a blank failure. Therefore the activity list keeps working rather than breaking.
Step-by-Step: Sending a message from a lead
- Open the lead and click the WhatsApp action button.
- Pick a Message Type.
- For Text, type the message. For Image or Document, fill the caption and attach the files.
- Click Send WhatsApp.
- Watch the new entry appear on the WhatsApp tab.
WhatsApp Chat Widget
Leads that have replied show a floating toggle in the bottom-right corner. It opens the whole exchange in WhatsApp’s own colours.

The header reports when the lead last replied. That timestamp matters, because the reply window runs from the customer’s message.
Attachments sit behind the paperclip, so images and documents go out from the widget too. Furthermore previews appear before sending.
The widget only appears where there is something to read. Specifically, the lead must already carry at least one inbound message.
Step-by-Step: Replying from the chat widget
- Open a lead that has received a WhatsApp message.
- Click the green toggle in the bottom-right corner.
- Read the conversation, which opens on the newest message.
- Type a reply, or attach a file with the paperclip.
- Press the send button; the bubble appears immediately.
Delivery Status and the 24-Hour Window
Outgoing bubbles carry ticks, exactly as WhatsApp does. Consequently a rep can tell at a glance whether a message actually landed.

- One grey tick means Meta accepted the message.
- Two grey ticks mean the handset received it.
- Two blue ticks mean the customer opened it.
- A red mark means delivery failed, and it carries Meta’s own reason.
These states arrive through Meta’s status webhooks. The module maps each message id to its activity in a table of its own.
WhatsApp also limits free-form replies to 24 hours after the customer’s last message. The widget therefore warns as that window closes.
Once it has closed the widget disables the composer. As a result a rep sees the reason instead of an opaque failure from Meta.
Step-by-Step: Reading a delivery state
- Open the chat widget on a lead you have messaged.
- Look at the small tick beneath each outgoing bubble.
- Hover over the tick to read the state in words.
- For a failed message, the same hover shows Meta’s reason.
Long Conversations
Busy leads accumulate hundreds of messages. The widget therefore loads the twenty newest first and opens on the latest one.

Scrolling to the top fetches another twenty. Older pages slide in above without moving your place in the thread.
The widget clips very long messages as well. Specifically, a body over 200 words shows its first 150 behind a Read more link.
While the widget stays open it refreshes itself. Consequently ticks advance and fresh replies appear without reopening anything.
Step-by-Step: Reading conversation history
- Open the chat widget on a lead with a long history.
- Scroll upward inside the thread to load older messages.
- Click Read more on any clipped message to expand it.
- Leave the widget open; new replies arrive on their own.
Support
So, that is all about Krayin CRM WhatsApp. If you have any queries regarding the plugin, contact us at Webkul Support System.
For developer documentation visit devdocs.krayincrm.com, and for user guides see docs.krayincrm.com.
Current Product Version - v2.2.6
Supported Framework Version - v2.2.6
Be the first to comment.