REST API Create Channels for PJSIP Extension


(Brian Hong) #1

Anyone uses Asterisk 16 REST API Channels (POST) to create a call to an PJSIP extension with more than one contacts? When I call the POST, it doesn’t ring all devices assigned to one PJSIP extension. Any ideas why it’s doing this? Is it the device that’s causing it to choose priority over the other devices?


(Itzik) #2

Please post the data that you are posting to Asterisk


(Joshua C. Colp) #3

Only a single channel can be dialed directly using ARI, if you want to dial multiple you have to use a Local channel to go to the dialplan which then uses PJSIP_DIAL_CONTACTS.


(Brian Hong) #4

string username = “freepbxuser”;
string password = “REST API Password”;
string encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding(“ISO-8859-1”).GetBytes(username + “:” + password));

            Channels channels = new Channels
            {
                endpoint = string.Format("PJSIP/{0}", model.endpoint),
                extension = model.extension,
                context = "from-internal",
                priority = 1,
                timeout = 30,
                callerId = string.Format("Calling {0}", model.extension)
            };

            var bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(channels));

            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://freepbx_ip:8089/ari/channels");
            webRequest.Headers.Add("Authorization", "Basic " + encoded);

            webRequest.Method = "POST";

            webRequest.Accept = "*/*";
            webRequest.ContentType = "application/json";
            webRequest.ContentLength = bytes.Length;

            using (var requestStream = webRequest.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
            }

            HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();

            string result;
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                result = sr.ReadToEnd();
            }

(Brian Hong) #5

I found out the problem with my device that wasn’t ringing. It was the network settings on the device. It was using DNS for lookup and I changed it to use A Record. Now it’s working correctly. By the way, if you want to dial Zulu extensions, just place a “90” in front of the extension. Example: PJSIP/901001