Connect Retool to Skype using the Microsoft Bot Framework REST API via a REST API Resource. Register an Azure Bot Service, configure OAuth 2.0 credentials, and build a bot management dashboard that monitors Skype conversations, sends proactive messages, and tracks bot activity. The entire setup takes about 25 minutes.
| Fact | Value |
|---|---|
| Tool | Skype |
| Category | Communication |
| Method | REST API Resource |
| Difficulty | Intermediate |
| Time required | 25 minutes |
| Last updated | April 2026 |
Why Connect Retool to Skype?
While Skype has largely given way to Microsoft Teams in enterprise contexts, it remains widely used by consumer and small business audiences for customer communication, support, and alerts. Connecting Retool to Skype via the Microsoft Bot Framework lets internal operations teams build dashboards that monitor bot conversations, send proactive notifications to Skype contacts, and track message delivery and engagement — all from a centralized internal tool.
The Bot Framework API serves as the integration bridge: your Azure Bot Service registers a Skype channel, and Retool communicates with that bot using the Bot Connector API. This lets you build admin panels that can push messages into Skype conversations, retrieve conversation logs, and trigger alerts when operational thresholds are met. Unlike messaging through Skype's consumer app, this approach is fully server-side and scriptable.
Typical use cases include customer support bots where agents need a Retool dashboard to view active conversations and inject responses, alerting systems that send proactive Skype messages when database conditions are met, and bot health monitoring panels that track message volume and error rates. Since Retool proxies all Bot Framework API calls through its server-side resource layer, CORS is not an issue and credentials remain secure.
Integration method
Skype does not have a native Retool connector. Integration is achieved via the Microsoft Bot Framework REST API, which uses Azure Bot Service as a relay layer. You register a Bot Service in Azure, configure OAuth 2.0 client credentials to obtain access tokens, and connect Retool via a REST API Resource pointing to the Bot Framework API. Retool proxies all requests server-side, so your Azure credentials never reach the browser.
Prerequisites
- A Microsoft Azure account with permission to create Bot Services and app registrations
- A Skype account to test bot messaging (consumer Skype or Skype for Business)
- A Retool account (Cloud or self-hosted) with permission to add Resources
- Basic understanding of OAuth 2.0 client credentials flow
- An Azure Bot Service already registered (or willingness to create one during setup)
Step-by-step guide
Register an Azure Bot Service and enable the Skype channel
Open the Azure Portal (portal.azure.com) and navigate to Create a Resource. Search for 'Azure Bot' and select it from the Marketplace. Fill in the required fields: Bot handle (a unique name for your bot), Subscription, Resource group, and Pricing tier (F0 free tier is sufficient for testing). For the Microsoft App ID section, select 'Create new Microsoft App ID' — Azure will automatically create an Azure Active Directory app registration with a client ID and secret. Click Review + Create, then Create to provision the Bot Service. This typically takes 30-60 seconds. Once the Bot Service is created, navigate to it in the Azure Portal and click Channels in the left sidebar. You will see a list of available channels. Click the Skype icon to add Skype as a channel. On the Skype channel configuration page, you can configure messaging, calling, and groups settings. For messaging-only use cases, the defaults are sufficient. Click Save. The Skype channel will appear as Configured in your channel list. Next, retrieve your bot credentials: click Configuration in the Bot Service left sidebar. Note the Microsoft App ID — this is your OAuth client ID. Click Manage next to the App ID to open the app registration in Azure Active Directory. In the app registration, go to Certificates & secrets, click New client secret, add a description, set an expiration, and click Add. Copy the secret value immediately — it will not be displayed again. Store both the App ID and client secret securely.
Pro tip: Use the F0 (free) pricing tier for Azure Bot Service during development. It supports unlimited messages for standard channels including Skype at no cost.
Expected result: An Azure Bot Service exists with the Skype channel configured. You have a Microsoft App ID and client secret ready for use in Retool.
Create a REST API Resource in Retool for the Bot Framework
Open Retool and navigate to the Resources tab (left sidebar on the Retool home page, or via the top navigation Resources link). Click the blue Add Resource button in the top right corner. In the resource type selector, scroll to the API section or use the search bar and type 'REST API'. Select REST API to open the configuration form. Set the Base URL to the Microsoft Bot Framework API endpoint: https://smba.trafficmanager.net/apis/ — this is the global Bot Connector service endpoint. For environments in specific Azure regions, you may need a region-specific URL; check the Bot Framework documentation for your bot's region. For authentication, click the Authentication dropdown and select Bearer Token. However, the Bot Framework uses OAuth 2.0 client credentials that require a dynamic token (access tokens expire after 3600 seconds), so a static bearer token will not work long-term. Instead, set authentication to None and plan to handle token acquisition in a separate query, then pass the token as a dynamic Authorization header in each request. In the Headers section, add a default header: Key = Content-Type, Value = application/json. Give the resource a descriptive name like 'Skype Bot Framework' and click Save Changes. The resource will now appear in your Resources list and be available in the query editor dropdown.
1{2 "method": "POST",3 "url": "https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token",4 "body": {5 "grant_type": "client_credentials",6 "client_id": "{{ retoolContext.configVars.BOT_APP_ID }}",7 "client_secret": "{{ retoolContext.configVars.BOT_APP_SECRET }}",8 "scope": "https://api.botframework.com/.default"9 }10}Pro tip: Store your Bot App ID and client secret in Retool Configuration Variables (Settings → Configuration Variables) marked as Secret. Reference them as retoolContext.configVars.BOT_APP_ID to keep credentials out of queries and off the frontend.
Expected result: A REST API Resource named 'Skype Bot Framework' appears in your Resources list. A token acquisition query configuration is ready to be created.
Create a token acquisition query and send a proactive Skype message
The Bot Framework uses short-lived OAuth tokens, so the first query in your app fetches a fresh access token. In the Retool app editor, open the Code panel at the bottom and click the + New button to create a query. Name it getToken. Set the Resource to your Skype Bot Framework resource. Set the HTTP method to POST and the URL path to https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token (full URL override, or create a separate generic REST API resource for this token endpoint). Set the Body Type to x-www-form-urlencoded and add the following key-value pairs: grant_type = client_credentials, client_id = {{ retoolContext.configVars.BOT_APP_ID }}, client_secret = {{ retoolContext.configVars.BOT_APP_SECRET }}, scope = https://api.botframework.com/.default. Enable 'Run this query automatically on page load' and set a cache duration of 3500 seconds to avoid re-fetching on every action. Now create a second query named sendSkypeMessage. Set Resource to your Skype Bot Framework resource, method to POST. For the path, use /v3/conversations/{{ conversationIdInput.value }}/activities. Set the Authorization header dynamically: Key = Authorization, Value = Bearer {{ getToken.data.access_token }}. In the Body section, set Body Type to JSON and enter the message payload. Set trigger mode to Manual so it only fires on button click. This query sends a message into a specific Skype conversation identified by the conversation ID.
1{2 "type": "message",3 "from": {4 "id": "{{ retoolContext.configVars.BOT_APP_ID }}",5 "name": "Retool Bot"6 },7 "recipient": {8 "id": "{{ recipientIdInput.value }}"9 },10 "text": "{{ messageTextInput.value }}"11}Pro tip: Conversation IDs and service URLs for Skype conversations are obtained from incoming bot activity payloads. Store them in your database when users first message your bot so Retool can look them up for proactive messaging.
Expected result: The getToken query runs on page load and returns an access_token in its data. The sendSkypeMessage query is configured and ready to be triggered by a button.
Build a conversation monitoring table
To build a meaningful bot management dashboard, you need to display active Skype conversations. Since the Bot Framework API is event-driven (not pull-based for incoming messages), the standard pattern is to log incoming activity payloads to your own database as users message your bot, then query that database from Retool. Create a database query in Retool that reads from your bot_conversations table. In the Code panel, create a new query pointing to your PostgreSQL or other database resource. Write a SQL query that retrieves conversation records: SELECT conversation_id, user_id, last_message, last_activity_at, status FROM bot_conversations WHERE channel = 'skype' ORDER BY last_activity_at DESC LIMIT 50. Set this query to run automatically on page load. Drag a Table component from the Component panel onto the Retool canvas. In the Table's Inspector (right panel), set the Data Source to {{ getConversations.data }}. Map the columns: conversation_id as 'Conversation ID', user_id as 'User', last_message as 'Last Message', last_activity_at as 'Last Activity', status as 'Status'. Enable row selection by checking 'Allow row selection' in the Table settings. Add a Text Input component below the table labeled 'Message to send' (set a placeholder like 'Enter your message...'). Add a Button component labeled 'Send Skype Message'. In the button's Inspector, add an event handler: Event = Click, Action = Trigger query, Query = sendSkypeMessage. In the sendSkypeMessage query, reference the selected table row's conversation ID: {{ conversationsTable.selectedRow.conversation_id }}. This wires everything together: select a conversation, type a message, click Send.
1-- Query to fetch active Skype bot conversations2SELECT 3 conversation_id,4 user_id,5 user_display_name,6 last_message,7 last_activity_at,8 message_count,9 status10FROM bot_conversations11WHERE channel = 'skype'12 AND last_activity_at > NOW() - INTERVAL '7 days'13ORDER BY last_activity_at DESC14LIMIT 100;Pro tip: Add a Status dropdown filter above the Table to switch between 'active', 'resolved', and 'all' conversations. Reference the filter with {{ statusSelect.value }} in a WHERE clause to narrow results.
Expected result: A Table component displays Skype conversations from your database. Selecting a row and clicking Send Message triggers the Bot Framework API to deliver the typed message to that conversation.
Add a transformer to format Bot Framework response data
The Bot Framework API and your conversation log database may return data in formats that need reshaping before display in Retool components. JavaScript transformers let you normalize this data without modifying your queries or database schema. In the Code panel, click the + New button and select Transformer (not Query). Name it formatConversations. In the transformer editor, write JavaScript that takes the raw database query results and maps them to a clean display format. Access the raw data via the query name followed by .data — for example, getConversations.data. Return an array of objects with display-ready field names and formatted values such as relative timestamps and truncated message previews. To attach a transformer to a query instead, open the getConversations query, click the Advanced tab, and enable 'Transform data with a transformer'. Select your formatConversations transformer from the dropdown. The Table component's {{ getConversations.data }} binding will now automatically receive the transformed output, while {{ getConversations.rawData }} preserves the original for debugging. For bot activity metrics, add a separate transformer that calculates aggregates from the conversation data: total active conversations, messages sent today, and average response time. Display these in Stat components at the top of the dashboard. For complex integrations requiring multiple data sources, custom transformers, and Retool Workflows, RapidDev's team can help architect and build your Retool solution.
1// Transformer: formatConversations2// Reshapes raw conversation log data for Table display3const raw = getConversations.data;4if (!raw || !Array.isArray(raw)) return [];56return raw.map(conv => ({7 id: conv.conversation_id,8 user: conv.user_display_name || conv.user_id || 'Unknown',9 lastMessage: conv.last_message10 ? conv.last_message.substring(0, 80) + (conv.last_message.length > 80 ? '...' : '')11 : '(no message)',12 lastActivity: conv.last_activity_at13 ? new Date(conv.last_activity_at).toLocaleString()14 : 'N/A',15 messageCount: conv.message_count || 0,16 status: conv.status || 'active'17}));Pro tip: Use the transformer's return value in Stat components to show summary counts. For example, filter the array for status === 'active' and use .length as the value for an 'Active Conversations' stat card.
Expected result: The Table displays cleanly formatted conversation data with truncated message previews and human-readable timestamps. Stat components show aggregate metrics calculated by the transformer.
Common use cases
Build a bot conversation monitoring dashboard
Create a Retool dashboard that queries your Bot Framework activity logs stored in Azure or your own database, displays active Skype conversations in a Table component, and allows support agents to see recent messages and conversation state. Add a form panel that lets agents send proactive messages directly into any conversation from the Retool interface.
Build an admin panel that lists all active Skype bot conversations from the database, shows the last message and conversation ID in a Table, and includes a text input and Send button that triggers the Bot Framework API to send a proactive message to the selected conversation.
Copy this prompt to try it in Retool
Send Skype alert notifications from Retool Workflows
Build a Retool Workflow with a schedule trigger that checks your database for critical operational events — such as orders failing, errors spiking, or SLAs being breached — and sends a formatted Skype message to a designated bot conversation ID when a threshold is exceeded. This creates a lightweight alerting system without external infrastructure.
Build a Retool Workflow that runs every 15 minutes, queries the errors table for records where severity = 'critical' created in the last 15 minutes, and if any are found sends a Skype message via the Bot Framework API with the error count and top error type.
Copy this prompt to try it in Retool
Track bot activity metrics with a performance panel
Create a Retool analytics dashboard that pulls bot activity data from Azure Application Insights or your own logging database, displays message volume over time in a Chart component, shows error rates, and tracks unique user counts. Add filters for date range and bot channel to compare Skype performance against other Bot Framework channels.
Build a bot analytics panel with a line chart showing daily message counts for the past 30 days, a stat card showing total unique users this month, and a Table listing the top 10 most common user intents, all sourced from the bot activity log database.
Copy this prompt to try it in Retool
Troubleshooting
Token acquisition query returns 401 Unauthorized or 'invalid_client' error
Cause: The Bot App ID or client secret stored in Configuration Variables does not match the Azure AD app registration credentials, or the client secret has expired.
Solution: In the Azure Portal, navigate to Azure Active Directory → App registrations → find your bot's app → Certificates & secrets. Check whether the secret is expired. If so, create a new secret, copy its value immediately, and update the Retool Configuration Variable (Settings → Configuration Variables → edit the BOT_APP_SECRET value). Ensure there are no leading or trailing spaces in the stored secret.
Send message query returns 403 Forbidden even though the token is valid
Cause: The conversation ID or service URL being used does not match the actual Skype conversation, or the bot does not have permission to proactively message that conversation.
Solution: Proactive messaging requires a valid conversation reference obtained from a prior incoming message from that user. Verify that the conversation_id in your database matches the format returned by Bot Framework activity payloads (Skype conversation IDs are long strings starting with '29:'). Also confirm the service URL used in the request matches the serviceUrl field from the original incoming activity, not a hardcoded endpoint.
The Skype channel shows as Configured in Azure but bot messages are not delivered to Skype users
Cause: The Bot Service messaging endpoint (the webhook URL where Bot Framework sends incoming activities) is not configured or is pointing to a non-functional URL.
Solution: In the Azure Portal, go to your Bot Service → Configuration and check the Messaging endpoint field. This must be a publicly accessible HTTPS URL that returns a 200 response to Bot Framework POST requests. For testing, use a tool like ngrok to expose a local endpoint. For production Retool Workflows that only send proactive messages, the messaging endpoint can point to a simple webhook handler in your backend — it doesn't need to process incoming activities if you're only using Retool to send messages.
Access token expires mid-session and subsequent queries return 401 errors
Cause: The token is cached with a duration that does not account for the actual expiration window, or the cache is shared across users with different session start times.
Solution: In the getToken query settings, set the cache duration to 3500 seconds (slightly less than the 3600-second OAuth token lifetime). Enable 'Cache per user' if different Retool users need independent tokens. Add a query failure handler that re-runs getToken on 401 responses from any Bot Framework query, then retries the original query. Alternatively, add a Refresh button on the dashboard that manually triggers getToken.
Best practices
- Store Bot App ID and client secret in Retool Configuration Variables marked as Secret — never hard-code credentials in query fields or transformers.
- Cache the OAuth access token for 3500 seconds to avoid unnecessary token requests on every query execution while staying safely under the 3600-second expiration window.
- Log all incoming Bot Framework activity payloads to your own database so Retool can query conversation history and conversation IDs for proactive messaging.
- Use Manual trigger mode for sendSkypeMessage queries so messages are only sent when an agent explicitly clicks a button, preventing accidental duplicate sends.
- Add confirmation dialogs to Send Message buttons — proactive Skype messages cannot be unsent, so a 'Are you sure?' modal prevents accidental sends.
- Use Retool Workflows (with a schedule or webhook trigger) for automated Skype notifications rather than app-level queries, so alerts continue to fire even when no agent is logged in to Retool.
- Test all Bot Framework queries against Skype's sandbox environment or a test Skype account before enabling for production to avoid messaging real users during development.
Alternatives
Choose Microsoft Teams if your organization uses Microsoft 365 — Teams connects via Microsoft Graph API with richer enterprise features and is Microsoft's actively developed communication platform.
Choose Slack if your team uses Slack for internal communication — it has a native Retool connector with OAuth 2.0, making setup significantly simpler than the Bot Framework approach.
Choose Zoom if your use case centers on meeting scheduling and video conferencing management rather than text messaging and bot interactions.
Frequently asked questions
Does Retool have a native Skype connector?
No. Retool does not have a dedicated native Skype connector. Integration is achieved via the Microsoft Bot Framework REST API configured as a REST API Resource in Retool. You register an Azure Bot Service, enable the Skype channel, and connect Retool using OAuth 2.0 client credentials to obtain access tokens for the Bot Connector API.
Can Retool receive incoming Skype messages, not just send them?
Retool itself cannot receive incoming webhooks from external services — it is a dashboard and query builder, not a server. To handle incoming Skype messages, your Bot Service needs a messaging endpoint (a webhook URL) pointing to your own backend server or Azure Function that processes Bot Framework activity payloads. That backend can then log conversations to a database that Retool queries for display.
Is Skype still worth integrating given the shift to Microsoft Teams?
It depends on your user base. Microsoft deprecated Skype for Business in 2021 and pushes enterprises toward Teams. However, consumer Skype still has hundreds of millions of users, making it relevant for customer-facing bots that serve the general public. For internal team notifications, Teams is the better choice. For consumer-facing bot use cases, Skype remains viable through the Bot Framework.
How do I get the conversation ID needed to send proactive Skype messages?
Conversation IDs are included in the activity payload when a user first messages your bot. Your bot's messaging endpoint webhook receives a JSON object containing conversationId, serviceUrl, and recipient details. You must log these values to a database when they arrive — there is no API to look up conversation IDs for users who haven't messaged your bot first. Retool then queries your database to find conversation IDs when sending proactive messages.
Can I build a Retool dashboard that monitors multiple Bot Framework channels, not just Skype?
Yes. The Bot Framework supports multiple channels (Teams, Slack, Facebook Messenger, and more) from a single Bot Service registration. If you log incoming activities from all channels to a shared database table with a 'channel' column, your Retool dashboard can filter by channel using a Select component. The same Bot Framework REST API is used to send responses regardless of channel — only the conversation ID and service URL differ per channel.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation