hello
As the title suggests, I am trying to make a softphone’s answer function using the AMI’s bridge action.
Below is my code and AMI websocket server used amiws. (GitHub - staskobzar/amiws: Asterisk Management Interface (AMI) to Web-socket proxy)
== Part of HTML ==
Softphone Login== Part of JS ==
const socket = new WebSocket(‘ws://XXX.XXX.XXX.XXX:8000’);
socket.onopen = function() {
const login = {
action: ‘login’,
username: ‘XXX’,
secret: ‘XXX’
};
socket.send(JSON.stringify(login));
};
let loginEndpoint;
let answerChannel1;
let answerChannel2;
socket.onmessage = function(event) {
const eventData = JSON.parse(event.data);
const parseData = eventData.data;
if (parseData.Event === "DialState" && parseData.DestExten === document.getElementById('loginEndpointInput').value) {
answerChannel1 = parseData.DestChannel;
answerChannel2 = parseData.Channel;
console.log('channel1: ' + answerChannel1 + ' channel2: ' + answerChannel2);
};
};
function login(){
loginEndpoint = “PJSIP/” + document.getElementById(‘loginEndpointInput’).value;
console.log('Login Endpoint: ’ + loginEndpoint);
};
function answerCall() {
const bridge = {
action: ‘bridge’,
channel1: answerChannel1,
channel2: answerChannel2
};
socket.send(JSON.stringify(bridge));
console.log('Answercall: ’ + answerChannel2 + ’ to ’ + answerChannel1);
};
For example, when PJSIP/1102 calls PJSIP/1101, the softphone receives the channels of PJSIP/1101 and PJSIP/1102 and sends a bridge action.
however,
The answer function does not work with the log as below.
-- Executing [1101@Long-Distance:1] NoOp("PJSIP/1102-0000004c", "") in new stack
-- Executing [1101@Long-Distance:2] Dial("PJSIP/1102-0000004c", "PJSIP/1101") in new stack
-- Called PJSIP/1101
-- PJSIP/1101-0000004d is ringing
== Everyone is busy/congested at this time (1:0/0/1)
– Executing [1101@Long-Distance:3] Goto(“PJSIP/1102-0000004c”, “Internal-Main,1101,1”) in new stack
– Goto (Internal-Main,1101,1)
– Executing [1101@Internal-Main:1] Verbose(“PJSIP/1102-0000004c”, “1, “User 1102 dialed an invalid number.””) in new stack
“User 1102 dialed an invalid number.”
– Executing [1101@Internal-Main:2] Playback(“PJSIP/1102-0000004c”, “pbx-invalid”) in new stack
> 0x7fe66404c850 – Strict RTP learning after remote address set to: 192.168.1.161:4016
– <PJSIP/1102-0000004c> Playing ‘pbx-invalid.gsm’ (language ‘en’)
> 0x7fe66404c850 – Strict RTP switching to RTP target address 192.168.1.XXX:4016 as source
– Channel PJSIP/1101-0000004d joined ‘simple_bridge’ basic-bridge
– Executing [h@Internal-Main:1] Hangup(“Surrogate/PJSIP/1102-0000004c”, “”) in new stack
== Spawn extension (Internal-Main, h, 1) exited non-zero on ‘Surrogate/PJSIP/1102-0000004c’
– Channel PJSIP/1102-0000004c joined ‘simple_bridge’ basic-bridge
> 0x7fe66404c850 – Strict RTP learning complete - Locking on source address 192.168.1.XXX:4016
Can someone please help me?