136 lines
Revenue Workflows

Solution Page

Call Prep

Pull calendar context, Slack history, and Salesforce account signals into a concise meeting prep brief before the call starts.

Sales
Account executives
Customer success
Google Calendar
Slack
Salesforce

Overview

For Sales, Account executives, Customer success

Integrations: Google Calendar, Slack, Salesforce

Meeting brief

Account context

Recent activity summary

Prep packet

Reduces pre-call scrambling for customer-facing teams.

Improves meeting quality with a consistent prep artifact.

Brings CRM and collaboration context into one operational view.

What It Solves

Important meetings start without a shared prep packet, leaving teams to hunt for context across systems minutes before the call.

Workflow

1

Pull meeting context from the calendar and supporting systems.

2

Combine Slack history and account signals into a single prep brief.

3

Deliver a concise package the team can use immediately before the meeting.

Implementation

Review the underlying plan definition, inspect the template when available, and see how the workflow is encoded for repeatable execution.

Plan Code

call-prep.yaml

136 lines

requiredTools:
  - name: gcal
    type: mcp
  - name: salesforce
    type: mcp
  - name: slack
    type: mcp

parameters:
  - name: meetingQuery
    schema:
      type: string
      description: "Search query to find the meeting on Google Calendar (e.g., 'Life360')"

transformers:
  - name: extract_meeting_details
    onFunctionOutput: calendar_events_list
    jmesPath: |-
      items[0].{
        title: summary,
        start: start.dateTime,
        timezone: start.timeZone,
        meeting_id: id,
        participants: attendees[*].{email: email, name: displayName},
        external_emails: attendees[?!ends_with(email, '@barndoor.ai')].email
      }

components:
  schemas:
    meeting_context:
      type: object
      properties:
        title: { type: string }
        start: { type: string }
        participants:
          type: array
          items:
            type: object
            properties:
              email: { type: string }
              name: { type: string }

    signal:
      type: object
      properties:
        source: { type: string, description: "Source system (Slack, Gmail, Salesforce)" }
        summary: { type: string, description: "Summary of the signal" }
        relevance: { type: string, description: "Why this is relevant to the meeting" }
        timestamp: { type: string, description: "When this signal occurred" }

sessions:
  fetch-signals:
    preCalls:
      - name: calendar_events_list
        description: "Calendar event"
        args:
          calendarId: primary
          q: "{{ .params.meetingQuery }}"
          maxResults: 5
          orderBy: startTime
          singleEvents: true

      - name: search_messages
        description: "Slack messages"
        args:
          query: "{{ .params.meetingQuery }}"
          limit: 20

      - name: queryAccount
        description: "Salesforce accounts"
        args:
          where: "Name LIKE '%{{ .params.meetingQuery }}%'"
          fields: ["Id", "Name", "Industry", "Website", "Description"]

      - name: queryOpportunity
        description: "Salesforce opportunities"
        args:
          where: "Account.Name LIKE '%{{ .params.meetingQuery }}%'"
          fields: ["Id", "Name", "StageName", "Amount", "CloseDate", "NextStep", "Description"]

    prompt: |-
      Givenn all the data retrieved, extract relevant signals that could be important for the upcoming meeting.

  build-prep:
    dependsOn:
      - session: fetch-signals
    context: true
    prompt: |-
      Using the meeting details and signals gathered, create a comprehensive meeting prep summary.

schema:
  type: object
  properties:
    meeting_details:
      type: object
      x-session: fetch-signals
      $ref: "#/components/schemas/meeting_context"

    signals:
      type: array
      x-session: fetch-signals
      items:
        $ref: "#/components/schemas/signal"

    prep_summary:
      type: object
      x-session: build-prep
      properties:
        overview: { type: string, description: "preparation details of the upcoming meeting details and context" }
        crm_details:
          type: object
          properties:
            account_info: { type: string, description: "Key details about the account from Salesforce" }
            opportunity_info: { type: string, description: "Key details about any open opportunities from Salesforce" }
        recent_slack_activity:
          type: array
          items:
            type: object
            properties:
              message: { type: string, description: "Summary of the Slack message" }
              timestamp: { type: string, description: "When the message was sent" }
              relevance: { type: string, description: "Why this message is relevant to the meeting" }
        talking_points:
          type: array
          items: { type: string, description: "Key talking points to address in the meeting" }
        open_items:
          type: array
          items:
            type: object
            properties:
              item: { type: string, description: "Description of the open item or commitment" }
              owner: { type: string, description: "Who is responsible for this item" }
              source: { type: string, description: "Where this item was identified (e.g., Slack, Salesforce, Gmail)" }
        suggested_agenda:
          type: array
          items: { type: string }