Skip to content

Spark 760515 ai assistant generated summaries in call history#4753

Open
Hem-Dutt wants to merge 8 commits intowebex:nextfrom
Hem-Dutt:SPARK-760515-AI-Assistant-generated-summaries-in-Call-history
Open

Spark 760515 ai assistant generated summaries in call history#4753
Hem-Dutt wants to merge 8 commits intowebex:nextfrom
Hem-Dutt:SPARK-760515-AI-Assistant-generated-summaries-in-Call-history

Conversation

@Hem-Dutt
Copy link
Contributor

@Hem-Dutt Hem-Dutt commented Mar 5, 2026

COMPLETES #< SPARK-760515 >

This pull request addresses

WXC within MS Teams: AI Assistant generated summaries in Call history

< DESCRIBE THE CONTEXT OF THE ISSUE >

by making the following changes

  • Introduces @webex/internal-plugin-ai-summary, a new internal plugin that retrieves
    AI-generated call summaries, notes, action items, and transcript URLs from the
    Pragya and AI Bridge services
  • All AI-generated content is JWE-encrypted; the plugin decrypts via KMS using
    @webex/internal-plugin-encryption
  • Service URL resolution uses the SDK service catalog (WDM device registration) —
    no hardcoded service URLs

< DESCRIBE YOUR CHANGES >

Change Type

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Tooling change
  • Internal code refactor

The following scenarios were tested

< ENUMERATE TESTS PERFORMED, WHETHER MANUAL OR AUTOMATED >
2 Manual tests introduced.

  • manual-pragya-api-test.js for pragya api testing
  • manual-integration-test.js for integration testing

The GAI Coding Policy And Copyright Annotation Best Practices

  • GAI was not used (or, no additional notation is required)
  • Code was generated entirely by GAI
  • GAI was used to create a draft that was subsequently customized or modified
  • Coder created a draft manually that was non-substantively modified by GAI (e.g., refactoring was performed by GAI on manually written code)
  • Tool used for AI assistance (GitHub Copilot / Other - specify)
    • Github Copilot
    • Other - Please Specify
  • This PR is related to
    • Feature
    • Defect fix
    • Tech Debt
    • Automation

I certified that

  • I have read and followed contributing guidelines
  • I discussed changes with code owners prior to submitting this pull request
  • I have not skipped any automated checks
  • All existing and new tests passed
  • I have updated the documentation accordingly

Make sure to have followed the contributing guidelines before submitting.

HemDutt and others added 8 commits February 19, 2026 21:05
…s-in-Call-history

* next: (36 commits)
  fix(*): move @webex/event-dictionary-ts to dev dependency and upgrade (webex#4710)
  fix(calling): new method getDevices added (webex#4684)
  fix(ai-assistant): add renderProtocolVersion header (webex#4711)
  Revert "fix(calling): add .js extensions to ESM output for Node.js compatibility (webex#4706)"
  feat(internal-plugin-metrics): add unit tests for pre-login metrics
  feat(metrics): add prelogin metrics interface to new-metrics - update api
  feat(metrics): add prelogin metrics interface to new-metrics
  fix: added locusSessionId to MQEs and CA events (webex#4709)
  fix(calling): add .js extensions to ESM output for Node.js compatibility (webex#4706)
  fix(ci): Updated webex package in changelog URL  for Github-Bot (webex#4695)
  fix(ai-assistant): remove mercury disconnect on deregister (webex#4707)
  fix(contact-center): allow profile update for all fields (webex#4704)
  fix(plugin-cc): adding int setup support (webex#4377)
  fix(calling): clears a call keepalive interval before creating one (webex#4700)
  feat: process for handling old/unmaintained npm libraries of SDK (webex#4637)
  feat(plugin-meetings): add support for Metadata object in Locus Hash trees (webex#4697)
  feat(meetings): added rootHash query param to Locus hash tree sync requests (webex#4699)
  feat(internal-plugin-calendar): remove redundant KMS key pre-generation logic (webex#4665)
  fix(plugin-mercury): fix closing a unopen websocket with a custom code (webex#4698)
  fix(deps-dev): drop usage of @ciscospark/test-users-legacy dependency (webex#4516)
  ...
@Hem-Dutt Hem-Dutt requested a review from a team as a code owner March 5, 2026 11:49
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e33fd0bbf1

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +165 to +168
const actionItemsData = Array.isArray(body) ? body[0] : body;

const decryptedSnippets = await Promise.all(
(actionItemsData.snippets || []).map(async (snippet: any) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Handle empty action-items array before accessing first element

When getActionItems() receives an empty array response, actionItemsData is set to body[0] and becomes undefined, but the next access to actionItemsData.snippets immediately throws. This turns a valid “no action items yet” case into a hard failure (getActionItems failed) instead of returning an empty snippets list, so calls without generated action items are incorrectly treated as errors.

Useful? React with 👍 / 👎.

@Shreyas281299 Shreyas281299 added the validated If the pull request is validated for automation. label Mar 6, 2026
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we move this test file @webex/internal-plugin-ai-summary/test/integration/index.js.
Also we would need some unit tests as well for this

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we not use existing packages like Karma for integration tests. Its just this process of testing is not how we do testing. We can actuall move this file out and have a separate ticket to add integration tests for this plugin.

console.log('objectType:', container.objectType);
console.log('encryptionKeyUrl:', container.encryptionKeyUrl);
console.log('summaryUrl:', container.summaryData.summaryUrl);
console.log('transcriptUrl:', container.summaryData.transcriptUrl);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can have better logging

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we put this in @webex./internal-plugin-ai-summary/ai-docs/Architecture.md. This documentation folder is for sample apps

Comment on lines +3 to +5
## 1. Overview
The Webex JS SDK will provide call recording retrieval capabilities through a new **`plugin-recordings`** public plugin. This document describes the architecture for exposing the Webex **Converged Recordings API** (`/v1/convergedRecordings`) to SDK users, enabling them to retrieve call recording details, download links, AI-generated summaries, and transcripts programmatically.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We dont have plugin-recording? We would have to create this as well

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a docs for another user-case and not for ai-summary

Comment on lines +174 to +182
Client
|
| 1. Get call history
+-> callHistory.getCallHistoryData()
| +-> Janus API: GET /history/userSessions
| +-> Response includes extensionPayload.callingContainerIds
|
| 2. Resolve container
+-> webex.internal.aisummary.getContainer(containerId)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can make calling as a dependency and do all this inside the aisummary plugin itself.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see the issue in that approach, we would need the containerId to identify the call.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we move this to ai-docs/Agents.md to align with our specs

@@ -0,0 +1,46 @@
{
"name": "@webex/internal-plugin-ai-summary",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is only for call-ai-summary we should rename the plugi

Suggested change
"name": "@webex/internal-plugin-ai-summary",
"name": "@webex/internal-plugin-call-ai-summary",

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

validated If the pull request is validated for automation.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants