You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Connect ChatJS中Agent发消息时onMessage事件未触发问题

问题:Amazon Connect ChatJS的onMessage/onTyping事件未触发,WebSocketManager返回undefined

我正在集成Amazon Connect聊天机器人,需要建立客户与坐席的连接。原本用aws-sdk和@aws-sdk/client-connectparticipant,通过startChatContact -> createParticipantConnection -> sendEvent -> sendMessage流程实现了客户发消息给坐席,但获取坐席消息只能靠每2秒轮询getTranscript并去重,现在想换更优的ChatJS方案,但遇到以下问题:

  • 创建Agent/Customer ChatSession后,onMessage事件完全没触发
  • onTyping事件也未触发
  • 新增日志后发现代码没走到contact.onAccepted回调,且connect.core.getWebSocketManager()返回undefined

现有代码

Agent端会话创建代码

import "amazon-connect-streams";
import "amazon-connect-chatjs";

connect.contact(contact => {
  if (contact.getType() !== connect.ContactType.CHAT) {
    return;
  }

  contact.onAccepted(() => {
    // 此处添加console.log未输出,说明回调未执行
    const cnn = contact.getConnections().find(cnn => cnn.getType() === connect.ConnectionType.AGENT);

    const agentChatSession = connect.ChatSession.create({
      chatDetails: cnn.getMediaInfo(),
      options: {
        region: "us-west-2"
      },
      type: connect.ChatSession.SessionTypes.AGENT,
      websocketManager: connect.core.getWebSocketManager()
    });
  });
});

尝试过的Customer端会话创建代码

const customerChatSession = connect.ChatSession.create({
  chatDetails: {
    contactId: "...",
    participantId: "...",
    participantToken: "..."
  },
  options: {
    region: "us-west-2"
  },
  type: connect.ChatSession.SessionTypes.CUSTOMER
});

排查与解决方案

1. 先确认Streams和ChatJS的加载顺序与初始化流程

  • 必须确保Streams先完成初始化:ChatJS依赖Streams的核心上下文,不能仅靠import顺序,要等connect.core.init()完成后再执行ChatSession相关代码。示例:
    connect.core.init({
      ccpUrl: 'https://<你的实例地址>.awsapps.com/connect/ccp-v2/',
      loginPopup: true,
      region: 'us-west-2'
    });
    
    // 等CCP初始化完成后再监听contact事件
    connect.core.onConnect(function() {
      connect.contact(contact => {
        // 后续逻辑
      });
    });
    
  • 当前代码没触发contact.onAccepted,大概率是Streams还没完成初始化就绑定了contact监听,导致错过了事件。

2. WebSocketManager返回undefined的解决

  • connect.core.getWebSocketManager()只有在Streams初始化完成(CCP加载完成)后才会返回实例,必须放在connect.core.onConnect回调内执行。
  • 如果是自定义集成(不嵌入官方CCP),需要手动初始化WebSocketManager:
    const websocketManager = new connect.WebSocketManager({
      region: 'us-west-2',
      instanceId: '<你的Connect实例ID>'
    });
    // 替换原来的connect.core.getWebSocketManager()
    

3. 必须为ChatSession绑定事件监听并启动会话

你当前代码只创建了ChatSession,但遗漏了事件绑定和会话启动步骤,这是核心问题:

// Agent端示例
contact.onAccepted(() => {
  const cnn = contact.getConnections().find(cnn => cnn.getType() === connect.ConnectionType.AGENT);
  const websocketManager = connect.core.getWebSocketManager();

  const agentChatSession = connect.ChatSession.create({
    chatDetails: cnn.getMediaInfo(),
    options: { region: "us-west-2" },
    type: connect.ChatSession.SessionTypes.AGENT,
    websocketManager: websocketManager
  });

  // 绑定onMessage事件
  agentChatSession.onMessage((message) => {
    console.log('收到消息:', message);
  });

  // 绑定onTyping事件
  agentChatSession.onTyping((typingEvent) => {
    console.log('对方正在输入:', typingEvent.participantId);
  });

  // 必须启动会话
  agentChatSession.connect();
});

4. Customer端会话的注意事项

  • Customer端的chatDetails必须包含有效的participantToken,这个token是从createParticipantConnection接口返回的,不能使用过期或无效的token。
  • 创建后同样需要绑定事件并调用connect():
    const customerChatSession = connect.ChatSession.create({
      chatDetails: {
        contactId: "<有效contactId>",
        participantId: "<有效participantId>",
        participantToken: "<有效participantToken>"
      },
      options: { region: "us-west-2" },
      type: connect.ChatSession.SessionTypes.CUSTOMER
    });
    
    customerChatSession.onMessage((msg) => console.log('收到消息:', msg));
    customerChatSession.connect();
    

5. 权限与配置检查

  • 确认你的IAM角色拥有connect:GetContactAttributes、connect:SendChatMessage等必要权限。
  • 检查Amazon Connect实例的聊天配置是否开启了WebSocket支持(默认开启,需确认无手动关闭)。

内容的提问来源于stack exchange,提问作者Aditya Shrivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:31:13