求助:Node.js中Amazon Connect通话时发送数据的实现方法
解决Amazon Connect通话中发送数据的问题
获取当前活动通话连接
不管是发送DTMF按键还是自定义业务数据,核心前提是拿到有效的Connection实例,不要依赖全局变量,通过Streams API主动获取:
// 获取当前活跃通话Contact const activeContact = connect.contactCenter.getContactManager().getActiveContact(); if (activeContact) { // 筛选出已建立的通话连接 const connection = activeContact.getConnections().find(conn => conn.getStatus() === connect.ConnectionStatus.CONNECTED); if (connection) { // 在此执行发送操作 } }
注意:这段代码必须在onAccepted事件触发后执行,确保通话连接已经建立。
发送DTMF按键(对应你参考的sendDigits方法)
如果需求是发送DTMF信号,直接在已连接的Connection实例上调用sendDigits即可,不要搞错调用对象:
// 确保connection是已连接的有效实例 connection.sendDigits('1234');
常见踩坑点:提前调用(连接未建立时调用会失效)、获取到未连接的Connection实例。
发送自定义数据到Contact Flow
如果要传递业务自定义数据到Amazon Connect的Contact Flow,使用contact.setAttributes()方法,数据会同步到Contact属性中,可在Contact Flow里直接引用:
if (activeContact) { // 设置自定义属性 activeContact.setAttributes({ customOrderId: 'ORD-2024-001', userType: 'vip' }); // 在Contact Flow中通过 ${Attributes.customOrderId} 即可读取该数据 }
React环境下的正确实现方式
不要用useSelector监听Connect状态,改用Streams自身的事件监听机制,确保库初始化完成后再执行逻辑:
useEffect(() => { // 先确认Connect Streams库已加载完成 if (!window.connect) return; // 监听通话接通事件 const handleContactAccepted = (contact) => { const connection = contact.getConnections().find(conn => conn.getStatus() === connect.ConnectionStatus.CONNECTED); if (connection) { // 示例:发送DTMF或自定义数据 connection.sendDigits('9'); contact.setAttributes({ sessionData: 'react-client-data' }); } }; // 注册事件监听 connect.contactCenter.getContactManager().onContactAccepted(handleContactAccepted); // 组件卸载时清理监听 return () => { connect.contactCenter.getContactManager().offContactAccepted(handleContactAccepted); }; }, []);
内容的提问来源于stack exchange,提问作者Anuj
相关产品推荐
相关产品推荐

