Configure Custom API and event webhooks
Configure Custom API Callback or local Pull, signatures, and event webhooks.
Updated 2026-08-29
A white-label chat bubble for your site
Send and receive through your own system
Bring customer email into one inbox
Connect WhatsApp Business to serve customers
Connect Facebook Pages and handle messages
Receive and reply to Instagram DMs
Connect a LINE official account to serve customers
Connect a Telegram bot for customer messages
Connect a Zalo Official Account
Receive and reply to comments
Connect official enterprise customer service accounts
Authorize securely with Facebook
No App Secret, verify token, or Page token to copy. YundaDesk lists manageable Pages and checks the connection automatically.
Authorize myself
The current staff member manages the Facebook Page.
Connect with FacebookSelect a Facebook Page
Complete authorization in the new tab. It closes automatically and returns the result to this workspace.
YundaDesk subscribes messages, postbacks, delivery, and read events, then runs a live connection check.
Finish connectionChoose your email provider
Microsoft OutlookConnect an Outlook or Microsoft 365 mailboxChannel maintenanceMail settings are filled in from your address. You can edit them.
No preset matched. You can enter the mail settings manually in the next step.
Advanced settings
imap.yourbrand.com · 993smtp.yourbrand.com · 465Save disabled first, test IMAP and SMTP, and enable the channel only after both pass.
Connect & enableSelect customer service accounts
Each selected account becomes an independent channel that is enabled immediately, with AI replies off by default.
DEMO_REDACTED_IDENTITY_KEYWhen off, customers wait for a team member.
View the customer identity signing key in channel settings. Your website backend signs an HS256 JWT for the current signed-in user. Keep the key on your backend only.
Include user_id, widget_key, iat, and exp; set aud to yundadesk-widget-identity. Use Unix seconds for timestamps. A 5-minute token lifetime is recommended.
Run this code after website login. Replace /support/identity with your website endpoint, which returns { token }.
const loginSupport = () => YundaDesk.login({
getToken: () => fetch('/support/identity', { credentials: 'same-origin' })
.then(response => {
if (!response.ok) throw new Error('Identity request failed');
return response.json();
})
.then(({ token }) => token),
});
if (window.YundaDesk?.login) loginSupport();
else window.addEventListener('yundadesk:ready', loginSupport, { once: true });Call YundaDesk.logout() before website logout or account switching to clear the customer identity in the Widget.
Optional fields: name, email, phone, avatar, locale. custom_attributes accepts enabled customer custom fields only; use their field keys.
<script src="https://cdn.yundadesk.com/widget.js" data-yd-key="yd_widget_main" async></script>- Widget Key
- yd_widget_main
- Script URL
- https://cdn.yundadesk.com/widget.js
- Direct link
- https://cdn.yundadesk.com/?widget_key=yd_widget_main
Telegram bot setup guide
Three steps: ① find @BotFather to create a bot and get the token → ② paste the token on the left → ③ save and enable; the system receives new messages automatically.
1. Create a Telegram bot
- In Telegram, search for @BotFather and open the chat.
- Send /newbot to create a new bot.
- Follow the prompts to set a display name and username (ending in _bot).
- Copy the bot token returned by BotFather.
2. Enter the token on the left and enable
- Paste the token into “Bot Token” on the left.
- Click “Save” at the top, then “Enable”.
- Click “Test connection” to verify the bot token works.
3. Test the bot
- Search for the bot username in Telegram and start a chat.
- Send any message and AI / an agent will reply automatically.
- See Telegram Bot API docs.
Inbound webhook URL
Copy this full URL into the webhook settings of the third-party console so customer messages reach YundaDesk.
https://api.example.invalid/hooks/channel/line/demo-onlyCopyLINE Official Account setup guide
1. Enable the Messaging API
- Sign in to LINE Official Account Manager, select the official account to connect, and enable the Messaging API under Settings > Messaging API.
- Copy the Channel ID and Channel Secret from the same page.
2. Save and enable in YundaDesk
- Enter the Channel ID and Channel Secret on the left and save. YundaDesk verifies them with LINE and then shows the matching LINE Official Account.
- Click Enable so the channel starts receiving messages.
3. Set up the webhook and test
- Copy the inbound webhook URL above, paste it into Webhook URL under Settings > Messaging API in LINE Official Account Manager, and save.
- Turn on Webhook under Settings > Response settings. We also recommend turning off auto-response and greeting messages so customers don't get duplicate replies.
- Back in YundaDesk, click Test connection. Once it passes, send a message to the official account from LINE and check that it appears in Chat.
The channel credential has expired. Please reauthorize and try again.
Connection failedBot receiving conflict
Bot webhook is active
Telegram bot setup guide
Three steps: ① find @BotFather to create a bot and get the token → ② paste the token on the left → ③ save and enable; the system receives new messages automatically.
1. Create a Telegram bot
- In Telegram, search for @BotFather and open the chat.
- Send /newbot to create a new bot.
- Follow the prompts to set a display name and username (ending in _bot).
- Copy the bot token returned by BotFather.
2. Enter the token on the left and enable
- Paste the token into “Bot Token” on the left.
- Click “Save” at the top, then “Enable”.
- Click “Test connection” to verify the bot token works.
3. Test the bot
Callbacks go through YundaDesk fixed secure egress. If your receiver restricts sources, add the egress IPs to its allowlist.
Callbacks go through YundaDesk fixed secure egress. Allowlist these IPs: 203.0.113.10, 203.0.113.11
View allowlist IPsCustom API setup guide
1. Create a Custom API channel
- Enter the channel name and “your system callback URL” on the left.
- After saving, the system generates a connection key and signing key to confirm message ownership and request authenticity.
- (Optional) Add an IP allowlist to restrict sources.
2. Forward customer messages to YundaDesk
- POST messages as JSON to the webhook URL above.
- Include the connection key, timestamp, signature, and idempotency key in the headers.
- A 200 response means received; other statuses are treated as failures and retried.
3. Receive reply pushes
- Once enabled, YundaDesk pushes agent / AI replies to the “your system callback URL” you entered on the left.
- Deduplicate by external message ID for idempotency.
| Event | Time | Status |
|---|---|---|
| message.created | 2026/07/28 14:20 | Delivered |
| message.created | 2026/07/28 14:06 | Timeout · retrying |
| conversation.assigned | 2026/07/28 13:41 | Signature rejected |
Publish a public help center so customers can find answers on their own and cut repeat questions.
Install one YundaDesk plugin to add live chat, AI support, and a secure Widget binding to a WordPress site.
Use the same YundaDesk WordPress plugin; after WooCommerce is detected and authorized read-only, sync store, customer, order, product, and current cart context.
Connect SHOPLINE to sync orders, customers, and products, and enable YundaDesk storefront chat in the theme when needed.
Connect a BigCommerce store, sync customer order context, and show recent orders in the workspace sidebar.
Can’t find what you need?
Store actions awaiting approval
Review the store-generated preview before approval. Approval triggers one controlled commit; changed inputs require a new preview.
Create recovery discount · DEMO-SAVE10Live store preview · 10% · Demo Yundastore
The store has not returned a definitive result. Do not submit it again; this control only queries the result and never repeats the action.
Check resultRequest
Inputs
Outputs
Usage rules
☑ Require verified customer identity
Only customers verified in the current conversation can use this function. Otherwise, execution pauses.
Request
Enable only if this POST endpoint queries data without changing it.
Inputs
Parameter settings
Sent as a JSON body field. Enter valid JSON and describe its structure in the parameter description.
Request
Inputs
Usage rules
Result verification (optional)Use the API response by default. Add a read-only check if further verification is needed.
View tests and Agent calls for this function.
Select tools for future use. Saving does not grant Agent execution permission.
Credentials are stored securely and never displayed.
Connectors
Choose the functions this Agent can use. Calls follow function settings and business rules in skills.
Search connections or functions
☑ lookup_order
☐ lookup_order Select the output fields available to the Agent first.
☐ lookup_refund Configuration changed. Select again to authorize.
| Customer | Channel / source | Location / language | Tags | Last interaction | Added | |
|---|---|---|---|---|---|---|
| MMaria Garciamaria@example.com | Web Widget | 🇪🇸 SpainSpanish | 05/22/2026 | 05/18/2026 | ||
| LLukas Schneider+49 30 123456 | Telegram | 🇩🇪 GermanyGerman | 05/20/2026 | 05/16/2026 | ||
| AAna Silva | 🇧🇷 BrazilPortuguese | 05/22/2026 | 05/16/2026 |
| Agent | Role | Reception channels | Readiness | Status |
|---|---|---|---|---|
| AAlexManaged AI | General reception | Website · WhatsApp | Ready | Running |
| NNovaManaged AI | General reception | Messenger | Ready | Running |
| SSamExternal AI | General reception | — | Setup incomplete | Draft |
Choose which tools and actions this Agent may call. These switches never replace runtime authorization, approval, or audit.
When a customer asks where an order is, look it up first, then reply in brand voice.
Yuna finds opportunities in real customer conversations. Nothing updates knowledge or skills until you approve it.
↳Yes, Brazil shipping usually takes 7-12 business days.
Human answered·1↳Auto-detect VIP customers · Detect VIP status and prompt agents to follow up first.
Human answered·1·L2 risk↳Opened items can be returned within 30 days if the package is complete.
Human answered·1↳If DHL has not updated for over 72 hours, check the order first, then hand off for compensation review.
You corrected·1·L2 riskManage how Agents handle customer-initiated requests. Skills affect live conversations only after simulation and publishing.
2 items| Skill | Status | Use case | Last 7 days | Actions |
|---|---|---|---|---|
| Order tracking lookupWhen a customer asks where an order is, look it up first, then reply in brand voice. | Active | Lookup | Used 12 times92% success | |
| Auto-detect VIP customersDetect VIP status and prompt agents to follow up first. | Testing | Triage | Not used yet |
Conversation volume, response efficiency, and AI service quality at a glance.
Last 7 daysLast 30 daysLast 90 days| Dimension | Conversations | Messages | Avg. first response | Resolved | Share |
|---|---|---|---|---|---|
| Web Widget | 712 | 4,128 | 38s | 496 | 60% |
| Telegram | 284 | 1,620 | 45s | 219 | 24% |
| 198 | 980 | 3m 12s | 146 | 17% |
Language & timezone
Local time 16:30 · UTC+00:00
Appearance
Account actions
Danger zone
The workspace is disabled immediately. Ops can restore it within 2 hours; after that it is permanently deleted.
Delete workspaceAgent identity
PNG, JPG, or WebP up to 5 MB
Project identity
Reply entries
Create your first quick reply; agents can invoke it by typing /.
New quick replyBrand configuration
256×256 PNG / SVG recommended; you can crop to a square after uploading
Notification permission
Notification settings
Notification scenes
Test notification
Send testSend a test notification to verify everything works.
Send key
Conversation handling
Translation settings
Create a subscription to push events to your own backend for integration or data archiving.
AI Credit
Buy AI CreditCurrent cycle resets on 09/30/2026
Plan quota 10,000
Knowledge import, parsing, and offline compilation do not consume AI Credit
Record list

Subscription active
Current cycle ends 09/30/2026.
AI Credit
Pro and Enterprise support connecting your own AI in Agents. External AI has no additional charge and uses no YundaDesk AI Credits. Third-party AI fees are paid separately; managed AI continues to use Credits.
2,400 used
Current cycle resets on 09/30/2026
1,000 used
Other usage
Seats used
3Channels connected
2Yuna requests completed this month
42New conversations this month
128Messages this month
580Documents indexed
12Deliveries this month
0These workspace-wide rules apply to proactive customer outreach. They do not affect internal reports sent to you.
Cooldown is 24 hours per customer; at most 2 touches in 7 days.
Quiet hours
Contact frequency
Team members
| Member | Role | Status & skills | Last sign-in | Last used | Actions |
|---|---|---|---|---|---|
| ACAnna ChenMeanna@yundadesk.testOnline | Admin | ActiveEnglishRefundsMax 12 concurrent | Today, 09:42 | 2 min ago | |
| LWLeo Wangleo@yundadesk.testOnline | Agent | ActiveEnglishAfter-salesMax 6 concurrent | Yesterday, 18:20 | Today, 10:06 | |
| MGMaria Garciamaria@yundadesk.testOffline | Agent | PendingSpanishPre-salesMax 8 concurrent | — | — |
Could not establish a secure connection. If the site is HTTP-only, crawl it again with an http:// URL
| Document | Size | Tags | Updated | Status | Actions |
|---|---|---|---|---|---|
| demo-owner/support-guide 2 | — | — | Updated Jun 3, 2026, 4:00 PM | Healthy |
| Document | Size | Tags | Updated | Status | Actions |
|---|---|---|---|---|---|
| https://tgo.ai/help/shipping· 47 pages | — | — | — | Searchable | ⋯ |
| Support knowledge · Notion · 128 docs | — | — | Last synced 2026/07/29 03:10 | Retrievable | ⋯ |
| Brazil shipping timelines | — | Updated Jun 3, 2026, 4:00 PM | Searchable | ⋯ | |
| EU customs & duties | — | Updated Jun 4, 2026, 2:30 PM | Indexing | ⋯ | |
| 30-day refund policy | — | Updated Jun 2, 2026, 8:00 PM | Searchable | ⋯ |
| Document | Size | Tags | Updated | Status | Actions |
|---|---|---|---|---|---|
| Brazil shipping timelineshttps://tgo.ai/help/shipping/brazil | — | shipping | 10/04 | Searchable | ⋯ |
| Load more | |||||
| Document | Size | Tags | Updated | Status | Actions |
|---|---|---|---|---|---|
| Brazil shipping policy | — | Updated Jun 3, 2026, 4:05 PM | Waiting to index | ⋯ | |
| EU customs & duties | — | Updated Jun 4, 2026, 2:30 PM | Indexing | ⋯ | |
| Brazil shipping timelines | — | Updated Jun 3, 2026, 4:00 PM | Searchable | ⋯ | |
| Import restrictions PDFError: The PDF contains no readable text | — | Updated Jun 7, 2026, 4:30 PM | Indexing failed | ⋯ |
| Document | Size | Tags | Updated | Status | Actions |
|---|---|---|---|---|---|
| https://tgo.ai/help/shipping · 0 pagesProcessed 3 / Discovered 50 pages | — | — | Crawl job running | Crawling | ⋯ |
| https://tgo.ai/help/shipping · 47 pagesLast sync succeeded · 47 pages | — | — | Last synced Jun 20, 2026, 4:00 PM | Searchable | ⋯ |
| Customer question | Standard answer | Source | Tags | Status | Actions |
|---|---|---|---|---|---|
| Do you ship to Brazil? | Shipping to Brazil usually takes 7-12 business days. | Compiled · Brazil shipping policy | Enabled | ⋯ |
Stop syncing and keep this source's 2 documents. Existing content can still be used in AI replies.
Stop syncing and move this source's 2 documents to Trash. They will no longer be used in AI replies. The remote repository and other sources will not be changed.
Separate with commas; * and ** are supported. Exclusions win. Select at least one file type.
2 files to import
- help/shipping.md
- help/returns.md
No files match. Adjust the selection or filters and preview again.
Connect Notion, choose the pages to sync, and import documents automatically.
Connect NotionNotion is not connected yet
Test the saved reception setup as a visitor without creating a real conversation.
What needs my attention today?
Three things: 2 learning suggestions to review and 1 outreach waiting for your confirmation. Yesterday's auto-resolution hit 84%, up 3 points.
Support Agent · External AI
External setup
Edit external AI- Connection
- OpenAI Chat Completions
- Endpoint
- https://api.example.com/v1
- Key
- Configured · DEMO-REDACTED
Maintain persona, knowledge, and reply logic in your external service. Use “Edit external AI” to update the endpoint or key, and the preview on the right to test replies.
External AI only handles auto-replies. It is not written into YundaDesk AI learnings and does not generate AI skills.
Your plan does not include external AI, so external reception is paused and its configuration is retained. Upgrade to Pro to resume, or create a managed Agent and reassign its channels.
Choose which tools and actions this Agent may call. These switches never replace runtime authorization, approval, or audit.
When a customer asks where an order is, look it up first, then reply in brand voice.
Both visitors and agents will see this name
Online queue, no-agents-online, and agent-joined notices apply only to messaging channels. Email channels do not send these three reception messages.
This Agent can only search explicitly selected content. Its reception focus never grants knowledge access.
Knowledge searchCould not generate suggested questions. Please regenerate them.
Selected channels are handled by the current AI. Channels not selected here will not use AI replies.
SelectCustom API channels and event webhooks are grouped as developer integrations. Pro, Enterprise, and custom plans that inherit the entitlement can create and enable them.
Custom API channels and event webhooks connect your own systems to YundaDesk. Current availability is shown on the in-product plan page.
What happens after a plan change#
If the workspace moves to a plan that no longer includes a developer-integration capability:
- Existing configuration, signing secrets, and delivery history are preserved.
- The corresponding Custom API channel or event webhook is disabled and stops accepting or sending new integration traffic.
- You can still view, disable, or delete existing configuration, but you cannot create, enable, test, replay, or rotate secrets.
- Regaining the entitlement does not restore integrations automatically. Review the configuration and enable it manually.
Choose a reply mode#
When creating a Custom API channel, choose one reply mode:
- Callback: YundaDesk pushes agent replies to your public callback URL. Use it when your system already has a public HTTPS service.
- Pull (local Connector): a local Connector long-polls YundaDesk and forwards replies to a service on your machine. Use it for development machines, store computers, or systems without a public ingress.
Both modes are permanent options, not a migration path. One channel selects one mode, while different channels can use Callback and Pull at the same time. Customer-message ingress is unchanged and continues to use the Custom API inbound URL shown on the page.
The creation form does not show the Channel Key or signing secret. YundaDesk generates both values after the channel is saved and provides them in the saved channel details.
Configure a Callback URL#
Only Callback mode needs a callback URL. A callback or event webhook URL must:
- Be a public
https://URL on port 443. - Contain no username, password, or
#fragment. - Match the saved allowed domain. Use an explicit, controlled wildcard when multiple subdomains are required.
- Accept traffic from the fixed egress IPs published by YundaDesk.
After saving, use the page's test action. A successful test proves that the current request is reachable; before going live, also verify the signature, event payload, and source IP in the receiving system.
Configure the Pull API#
- Create or edit a Custom API channel, set the reply mode to Pull (local Connector), and save.
- After selecting Pull, the right-hand guide shows Send to your development Agent. The prompt identifies two public endpoints: send customer messages to the Custom API inbound endpoint and pull agent replies from the Pull endpoint. It also includes the authentication headers, request bodies, and offset handling. Before creation, the Channel Key is a placeholder; after saving, the prompt uses the current channel value.
- The prompt never includes the signing secret. After saving the channel, put the signing secret from the channel details into secure project configuration; never paste it into an Agent conversation, source code, logs, or the offset state file.
- Your system calls the Pull endpoint directly. A successful response is
{ "success": true, "data": { "updates": [...], "next_offset": 1 }, "error": null }. Start withoffset=0, persistdata.next_offsetafter processingdata.updates, and send it with the next request. Do not advance the offset if any update fails. An emptydata.updatesarray is a normal long-poll timeout. - If you do not want to implement polling, set
YD_CUSTOM_API_SIGNING_SECRETsecurely and use the local Connector to forward replies to a local HTTP endpoint such ashttp://127.0.0.1:8080/yundadesk/callback:
``bash customapi-pull \ --pull-url "<Pull URL shown on the page>" \ --channel-key "<Channel Key shown on the page>" \ --forward-url "http://127.0.0.1:8080/yundadesk/callback" \ --consumer-id "my-local-connector" ``
The Connector stores only a non-sensitive offset in the user configuration directory. It acknowledges a reply only after the local endpoint returns 2xx. A process interruption can repeat the last reply, but it cannot lose one by acknowledging early. Deduplicate with the Idempotency-Key or X-YD-Update-ID request header.
Do not run multiple Connectors for the same channel. To move to another machine, stop the old Connector first and securely move the offset state file. If that is not possible, make sure the receiver can deduplicate possible repeats.
Fixed egress IPs#
YundaDesk sends Custom API Callback and event webhooks from fixed egress IPs. Pull is an outbound connection from your local Connector to YundaDesk, so it does not need the YundaDesk egress allowlist. The page keeps Callback/Event Webhook egress IPs collapsed by default. When configuring the receiver, select the blue View allowlist IPs link, then add the displayed addresses to the receiving server's allowlist.
If the page says no egress IPs have been published, contact YundaDesk support instead of allowing traffic from every source. The page may show multiple IPs; allow all of them.
Verify requests#
Verify the YundaDesk signature and timestamp in the receiving system, and use the event or delivery ID for idempotency. Do not use source IP as the only authentication control.
Use the public Custom API inbound URL shown in the product. Sending the same signed receipt again does not apply the delivery transition twice.
Troubleshoot delivery failures#
Start with the delivery status and error type on the relevant Custom API or event webhook page:
- Plan or quota blocked: check the current plan and usage.
- URL or domain rejected: verify HTTPS, port, domain, and URL contents.
- Timeout or target unavailable: confirm that the target is online and allows every published egress IP.
- Signature rejected: verify the current secret; after rotation, confirm that the receiver uses the new secret.
- Pull returns 401: verify the Channel Key, signing secret, local clock, and that every request uses a new nonce.
- Pull returns 409: retry only
CUSTOM_API_PULL_BUSYafter waiting. For any other 409, first confirm that the channel is still in Pull mode and that the local offset was not advanced beyond received updates; do not retry blindly. - Pull returns 429: wait for
Retry-Afterbefore retrying; do not add parallel pollers. - The local receiver keeps failing: the Connector does not advance the offset. Restore the local service and return 2xx to resume.
Temporary network or DNS failures are retried automatically. After the retry limit is reached, use the replay action provided by the product.
