Hi there,
Currently we are reviewing Azure communication service(ACS), in particular interop with Teams. We are trying to do a consultation transfer scenario using an ACS user with a teams identity and fails:
Here is the setup and scenario:
- Transferee(Caller): a standard teams user logged in on Teams app. =>"Test1 user"
- Transferor(Called): a ACS user logged in as a teams user. =>""Test2 user"
- Transfer destination(Consultation call called): a standard teams user logged in on Teams app. =>"Test3 user"
- ""Test1 user" calls "Test2 user" from Teams client.
- "Test2 user" accepts the call from my test web client. The call is connected.
- "Test2 user" puts the call on hold from my test web client.
- "Test2 user" make a consultation call to "Test3 user" from my test web client.
- "Test3 user" answers the call from Teams client. The consultation call is connected.
- "Test2 user" issues "Transfer" command using transfer to call option "TransferToCallLocator" from my test web client and it fails.
The failing point is at making outbound call to the transfer destination "Test3 user" from the transferee "Test1 user" after it receives the "TransferRequest" from the transferor "Test2 user". Here is error log in Teams debug log file from "Test1 user":
2022-05-02T22:40:31.488Z Err callingService: Could not complete scenarios [incoming_transfer_request] because call 784afaa7-1e7f-456b-908d-fe599f1c0dcb
was terminated with reason: 48
with following diagnostics data: Diagnostics information for all 1 participants in the call:
scrubbedParticipantId=8:orgid:06e58f11-9d71-4d0b-951a-633f2f1237d7, callControllerCode=500, callControllerSubCode=10046
[call][callId=784afaa7-1e7f-456b-908d-fe599f1c0dcb][terminatedReason=48][callType=1][scenarioName=inco...
The code for transfer scenario:
On both calls, I attached event handlers for them:
const callTransferApi = call.feature(Features.Transfer);
callTransferApi.on('transferRequested', args => {
console.log(Receive transfer request: ${args.targetParticipant}
);
args.accept();
});
const callTransferApi = call2.feature(Features.Transfer);
callTransferApi.on('transferRequested', args => {
console.log(Receive transfer request: ${args.targetParticipant}
);
args.accept();
});
code to complete transfer after we have 2 calls: one hold and the other connected:
async function handleCompleteXfer(event) {
event.preventDefault();
try {
const callTransferApi = call.feature(Features.Transfer);
// call transfer API
const transfer = callTransferApi.transfer({ targetCallId: call2.id });
transfer.on('stateChanged', () => {
console.log(Transfer state: ${transfer.state}
);
if (transfer.state === 'Transferred') {
call.hangUp();
}
});
}
catch (error) {
console.error('handleCompleteXfer: ${error}');
}
}
Log and test web client is available if it is required.
Any help is appreciated!
Josie