Log Call Transcripts logo

Log Call Transcripts

Organization
microsoft
log-call-transcripts

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.

Overview

Publishermicrosoft
Repositorydataverse-business-skills
Skill namelog-call-transcripts
Stars
52
Forks
9
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by microsoft on GitHub. Read the source before you install it.

Installation

Install the Log Call Transcripts AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/microsoft/dataverse-business-skills/tree/main/skills/log-call-transcripts
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/microsoft/dataverse-business-skills.git /tmp/dataverse-business-skills
mkdir -p .claude/skills
cp -r /tmp/dataverse-business-skills/skills/log-call-transcripts .claude/skills/log-call-transcripts
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Log Call Transcripts in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Log Call Transcripts on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Log Call Transcripts is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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.

Instructions

Step 1: Receive and Parse Transcript

When the user provides a call transcript:

  1. Accept the transcript content (text or file upload)
  2. Identify the transcript format and parse it appropriately
  3. Extract speaker labels if available (e.g., "Sales Rep:", "Customer:")
Step 2: Extract Key Information from Transcript

Analyze the transcript to identify and extract:

Participant Information:

  • Customer name(s) mentioned
  • Company/Account name mentioned
  • Customer's role or title if mentioned
  • Phone numbers discussed

Call Metadata:

  • Call duration (if mentioned or calculable)
  • Date/time of call (if mentioned, otherwise use current datetime)
  • Call direction (inbound/outbound based on context)

Content Analysis:

  • Subject/Topic: Main purpose of the call (e.g., "Product demo follow-up", "Pricing discussion", "Support inquiry")
  • Key Discussion Points: Summarize 3-5 main topics discussed
  • Action Items: Any commitments or next steps mentioned
  • Customer Pain Points: Problems or challenges the customer mentioned
  • Competitor Mentions: Any competitor products or companies referenced
  • Budget Signals: Any pricing or budget discussions
  • Decision Maker Signals: References to decision-making process or stakeholders
  • Timeline Signals: Any urgency or timing requirements mentioned
Step 3: Match to Existing Records

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)
Step 4: Prepare Phone Call Activity Record

Construct the Phone Call record with extracted information:

Required Fields:

  • subject: Generated from call topic (max 200 characters)
  • description: Detailed call summary including:
    • Key discussion points
    • Customer pain points identified
    • Action items and next steps
    • Any competitor or budget mentions
  • phonenumber: Customer phone if extracted
  • directioncode: true for outgoing, false for incoming
  • actualdurationminutes: Call duration in minutes

Regarding Object (Link to primary record):

  • Set regardingobjectid to the most relevant record:
    • If opportunity was discussed → link to Opportunity
    • If no opportunity but account identified → link to Account
    • If only contact identified → link to Contact
    • If only lead identified → link to Lead

Activity Party Fields:

  • from: The sales rep (current user/systemuser)
  • to: The customer contact(s) identified

Additional Fields:

  • statecode: 1 (Completed)
  • statuscode: 2 (Made) for outgoing or 4 (Received) for incoming
  • category: "Sales Call" or appropriate category
  • actualstart: Call start time
  • actualend: Call end time
Step 5: Create the Phone Call Record
Use create_record tool with tablename: phonecall
Include all prepared fields in the item parameter as JSON
Step 6: Create Follow-up Task (if action items identified)

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)
Step 7: Add Detailed Notes (if needed)

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"

Step 8: Update Related Records (if applicable)

Based on transcript content, suggest updates to related records:

Update Opportunity (if linked):

  • If competitor mentioned → suggest updating opportunity competitive information
  • If budget discussed → suggest updating budgetamount
  • If timeline clarified → suggest updating estimatedclosedate

Update Lead (if linked):

  • If qualification signals found → suggest updating leadqualitycode
  • If budget discussed → suggest updating budgetstatus
  • If decision maker confirmed → suggest updating decisionmaker field

Examples

Example 1: Standard Sales Call Logging

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:

  1. Parse transcript and extract participant names (John, Sarah), company (Contoso)
  2. Query Dataverse for matching Account "Contoso" and Contact "John"
  3. Extract key signals: budget ($50K), timeline (Q1), competitor (Acme Corp), stakeholder (Mike Chen, CTO)
  4. Create Phone Call record linked to Contoso account
  5. Create follow-up Task "Send proposal to Contoso" due Friday

Result:

  • Phone Call created: "Enterprise Solution Discussion with Contoso"
  • Follow-up Task created with Friday deadline
  • Suggested updates: Add $50K budget to opportunity, add Acme Corp as competitor

Example 2: Support Call with No Existing Records

User says: "Process this support call - customer called about integration issues"

Actions:

  1. Parse transcript for customer details
  2. Search Dataverse - no matching account/contact found
  3. Create Phone Call with extracted details
  4. Prompt user: "No matching account found. Would you like to create a new Lead?"

Result: Phone Call logged with suggestion to create new Lead record

Troubleshooting

Error: No matching Account or Contact found

Cause: Company or person name in transcript doesn't match any Dataverse records Solution:

  • Check for spelling variations or abbreviations
  • Ask user to confirm the correct account/contact
  • Offer to create a new Lead record if appropriate

Error: Multiple matching records found

Cause: Common names or company names match multiple Dataverse records Solution:

  • Present the list of potential matches to the user
  • Ask user to select the correct record before proceeding
  • Use additional context (phone number, email) to narrow matches

Error: Phone Call creation failed

Cause: Missing required fields or invalid field values Solution:

  • Ensure subject is under 200 characters
  • Verify regardingobjectid points to a valid record
  • Check that directioncode is a valid boolean value

Output Format

After processing, provide the user with:

  1. Summary: Brief confirmation of what was logged
  2. Phone Call Record: Link/ID of created phone call activity
  3. Key Extracted Information: Bullet points of main findings
  4. Follow-up Task: Link/ID if created
  5. Suggested Updates: Any recommended updates to related records

Example Interaction

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:

  • Account: Contoso (matched in Dataverse)
  • Contact: John (linked to Contoso)
  • Topic: Enterprise solution evaluation
  • Competitor Mentioned: Acme Corp (reliability issues)
  • Budget Signal: $50,000 for implementation
  • Timeline: Decision by end of Q1
  • Decision Maker: Mike Chen (CTO) to be included

Follow-up Task Created: "Send proposal to Contoso" - Due: Friday

Suggested Updates:

  • Update Opportunity "Contoso Enterprise Deal" with budget amount $50,000
  • Add competitor "Acme Corp" to opportunity
  • Update estimated close date to Q1 end

Dataverse Tables Used

TablePurpose
phonecallPrimary record created for the call activity
accountQuery to match company mentioned in transcript
contactQuery to match participant names
opportunityQuery for related open deals, link as regarding object
leadFallback if no account/contact found
taskCreate follow-up tasks for action items
annotationStore full transcript as attachment

Key Fields Reference

phonecall:

  • subject (NVARCHAR 200) - Call title
  • description (MULTILINE TEXT) - Call summary and notes
  • phonenumber (PHONE) - Customer phone number
  • directioncode (BIT) - true=Outgoing, false=Incoming
  • actualdurationminutes (DURATION) - Call length in minutes
  • actualstart (DATETIME) - When call started
  • actualend (DATETIME) - When call ended
  • regardingobjectid (LOOKUP) - Polymorphic link to account, contact, lead, or opportunity
  • from (ACTIVITY PARTY) - Caller (systemuser, contact, account, lead)
  • to (ACTIVITY PARTY) - Call recipient (contact, account, lead)
  • leftvoicemail (BIT) - Whether voicemail was left
  • statecode (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 title
  • notetext (MULTILINE TEXT) - Full transcript content
  • objectid (LOOKUP) - Link to phonecall record
  • objecttypecode (NVARCHAR) - "phonecall"

Frequently asked questions

What does the Log Call Transcripts AI skill do?

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.

Why use Log Call Transcripts on TypingMind?

Because you install it once and use it with any model. Log Call Transcripts is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Log Call Transcripts in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/microsoft/dataverse-business-skills/tree/main/skills/log-call-transcripts. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Log Call Transcripts?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Log Call Transcripts?

As many as you like. As long as a model supports skills, you can use Log Call Transcripts with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Log Call Transcripts AI skill free?

Yes. It is published on GitHub by microsoft under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇