Analyzes sales call transcripts to extract key information and automatically logs the call as a Phone Call activity in Dataverse. Use when user says "log this call", "process this transcript", "save this call to CRM", "create a phone call record from this transcript", uploads a call recording transcript, or pastes meeting/call notes to be logged.
npx skills add https://github.com/microsoft/dataverse-business-skills --skill log-call-transcripts
When a sales representative uploads or provides a call transcript, this skill extracts actionable information from the conversation and creates a properly structured Phone Call activity record in Dataverse. This eliminates manual data entry and ensures consistent activity logging across the sales team.
When the user provides a call transcript:
Analyze the transcript to identify and extract:
Participant Information:
Call Metadata:
Content Analysis:
Query Dataverse to find matching records:
Find Account:
Use read_query to search the account table:
- Search by company name mentioned in transcript
- Match on account.name field
- If multiple matches, list them for user confirmation
Find Contact:
Use read_query to search the contact table:
- Search by participant name(s) from transcript
- Match on contact.fullname or contact.firstname + contact.lastname
- Filter by accountid if account was identified
- If multiple matches, list them for user confirmation
Find Related Opportunity (if applicable):
Use read_query to search the opportunity table:
- Filter by customerid matching the identified Account or Contact
- Filter by statecode = 0 (Open)
- Present open opportunities for user selection if multiple exist
Find Related Lead (if no Account/Contact found):
Use read_query to search the lead table:
- Search by companyname or fullname
- Filter by statecode = 0 (Open)
Construct the Phone Call record with extracted information:
Required Fields:
subject: Generated from call topic (max 200 characters)description: Detailed call summary including:phonenumber: Customer phone if extracteddirectioncode: true for outgoing, false for incomingactualdurationminutes: Call duration in minutesRegarding Object (Link to primary record):
regardingobjectid to the most relevant record:Activity Party Fields:
from: The sales rep (current user/systemuser)to: The customer contact(s) identifiedAdditional Fields:
statecode: 1 (Completed)statuscode: 2 (Made) for outgoing or 4 (Received) for incomingcategory: "Sales Call" or appropriate categoryactualstart: Call start timeactualend: Call end timeUse create_record tool with tablename: phonecall
Include all prepared fields in the item parameter as JSON
If action items were extracted from the transcript:
Use create_record tool with tablename: task
- subject: First action item or "Follow-up from call with [Customer Name]"
- description: List of all action items from the call
- regardingobjectid: Same as the phone call record
- scheduledend: Based on timeline mentioned or 3 business days from now
- prioritycode: Based on urgency signals (1=High, 2=Normal, 3=Low)
If transcript contains detailed technical or strategic information:
Use create_record tool with tablename: annotation
- subject: "Call Transcript - [Date]"
- notetext: Full transcript or detailed notes
- objectid: Link to the created Phone Call activity
- objecttypecode: "phonecall"
Based on transcript content, suggest updates to related records:
Update Opportunity (if linked):
Update Lead (if linked):
User says: "Log this call transcript:
Sales Rep: Hi John, thanks for taking my call today.
John: No problem Sarah. We're really interested in learning more about your Enterprise solution.
Sales Rep: Great! I know Contoso has been evaluating options. What's driving the timeline?
John: We need to make a decision by end of Q1. Our current vendor Acme Corp has been having reliability issues.
Sales Rep: I understand. What's your budget range for this project?
John: We're looking at around $50,000 for the initial implementation.
Sales Rep: Perfect. Let me send you a proposal by Friday and we can schedule a demo for your team next week.
John: Sounds good. Make sure to include our CTO, Mike Chen, on that invite."
Actions:
Result:
User says: "Process this support call - customer called about integration issues"
Actions:
Result: Phone Call logged with suggestion to create new Lead record
Cause: Company or person name in transcript doesn't match any Dataverse records
Solution:
Cause: Common names or company names match multiple Dataverse records
Solution:
Cause: Missing required fields or invalid field values
Solution:
subject is under 200 charactersregardingobjectid points to a valid recorddirectioncode is a valid boolean valueAfter processing, provide the user with:
User Input:
"Log this call transcript:
Sales Rep: Hi John, thanks for taking my call today.
John: No problem Sarah. We're really interested in learning more about your Enterprise solution.
Sales Rep: Great! I know Contoso has been evaluating options. What's driving the timeline?
John: We need to make a decision by end of Q1. Our current vendor Acme Corp has been having reliability issues.
Sales Rep: I understand. What's your budget range for this project?
John: We're looking at around $50,000 for the initial implementation.
Sales Rep: Perfect. Let me send you a proposal by Friday and we can schedule a demo for your team next week.
John: Sounds good. Make sure to include our CTO, Mike Chen, on that invite."
Skill Output:
✅ Phone Call Logged Successfully
Record Created: Phone Call - "Enterprise Solution Discussion with Contoso"
Key Information Extracted:
Follow-up Task Created: "Send proposal to Contoso" - Due: Friday
Suggested Updates:
| Table | Purpose |
|-------|---------|
| phonecall | Primary record created for the call activity |
| account | Query to match company mentioned in transcript |
| contact | Query to match participant names |
| opportunity | Query for related open deals, link as regarding object |
| lead | Fallback if no account/contact found |
| task | Create follow-up tasks for action items |
| annotation | Store full transcript as attachment |
phonecall:
subject (NVARCHAR 200) - Call titledescription (MULTILINE TEXT) - Call summary and notesphonenumber (PHONE) - Customer phone numberdirectioncode (BIT) - true=Outgoing, false=Incomingactualdurationminutes (DURATION) - Call length in minutesactualstart (DATETIME) - When call startedactualend (DATETIME) - When call endedregardingobjectid (LOOKUP) - Polymorphic link to account, contact, lead, or opportunityfrom (ACTIVITY PARTY) - Caller (systemuser, contact, account, lead)to (ACTIVITY PARTY) - Call recipient (contact, account, lead)leftvoicemail (BIT) - Whether voicemail was leftstatecode (STATE) - Open(0), Completed(1), Canceled(2)statuscode (STATUS) - Open(1), Made(2), Canceled(3), Received(4)activityparty (for from/to fields):
partyid (LOOKUP) - Polymorphic reference to participant (contact, account, lead, systemuser)participationtypemask (CHOICE) - Sender(1), To Recipient(2), etc.annotation (for transcript storage):
subject (NVARCHAR 500) - Note titlenotetext (MULTILINE TEXT) - Full transcript contentobjectid (LOOKUP) - Link to phonecall recordobjecttypecode (NVARCHAR) - "phonecall"Analyzes meeting transcripts and recordings to uncover behavioral patterns, communication insights, and actionable feedback. Identifies when you avoid conflict, use filler words, dominate conversations, or miss opportunities to listen. Perfect for professionals seeking to improve their communication and leadership skills.
Toolkit for creating animated GIFs optimized for Slack, with validators for size constraints and composable animation primitives. This skill applies when users request animated GIFs or emoji animations for Slack from descriptions like "make me a GIF for Slack of X doing Y".
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like "make me a GIF of X doing Y for Slack.
A skill that creates new Claude skills and automatically shares them on Slack using Rube for seamless team collaboration and skill discovery.
Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include "automate Slack app", "control VS Code", "interact with Discord app", "test this Electron app", "connect to desktop app", or any task requiring automation of a native Electron application.
Prepare meeting materials with Notion context and Codex research; use when gathering context, drafting agendas/pre-reads, and tailoring materials to attendees.
Interactive daily standup/meeting update generator. Use when user says 'daily', 'standup', 'scrum update', 'status update', 'what did I do yesterday', 'prepare for meeting', 'morning update', or 'team sync'. Pulls activity from GitHub, Jira, and Claude Code session history. Conducts 4-question interview (yesterday, today, blockers, discussion topics) and generates formatted Markdown update.
Take microsoft/log-call-transcripts from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.