[00:00.000 --> 00:01.300] So welcome, everyone. [00:01.980 --> 00:07.500] A few announcements before we turn it over to our first session. [00:07.900 --> 00:15.100] First of all, for God's sake, turn your cell phone ringer off right now. [00:15.300 --> 00:20.040] If your cell phone rings, everyone will laugh at you. [00:20.600 --> 00:23.640] Alright, so please do that if you haven't already done that. [00:23.720 --> 00:26.840] I don't see phones lighting up with people turning their ringers off. [00:26.840 --> 00:28.260] You should be doing that right now. [00:28.400 --> 00:29.060] Thank you very much. [00:29.280 --> 00:30.760] Okay, that was the main thing. [00:31.180 --> 00:51.760] The second thing, there is still time to sign up for Lightning Talks, which we are going to be doing at 4 o'clock today and tomorrow, to sign up in the Madison Room, which is also where the Lightning Talks will be, which is just down the hall that way. [00:51.760 --> 00:56.180] Alright, so we have a great conference. [00:56.200 --> 01:04.520] I was on the speaker selection committee and we had to turn away some terrific talks, leaving us with some even more terrific talks. [01:04.540 --> 01:06.020] So we've got a great program. [01:06.240 --> 01:16.220] I want to congratulate everyone for staying up late enough to make the first session, which I assume is the only way anybody is going to be here at 10 a.m. [01:17.540 --> 01:27.440] We have a tradition of telephony and telephony related content at this conference. [01:27.440 --> 01:39.180] So I am just delighted that our first session this morning is going to be on sip and IP telephony. [01:39.180 --> 01:51.920] Are You Ready to SIP the Kool-Aid with Gaston Draque and our own Cheshire Catalyst, who needs no introduction, but will introduce himself and Gus. [01:52.120 --> 01:53.440] So please take it away. [01:56.840 --> 01:57.720] Thank you, Matt. [02:00.180 --> 02:12.280] I am Richard Cheshire, known to many here as the Cheshire Catalyst from my days as editor of the TAP newsletter, the Technological Assistance Program, which was a precursor to 2600 Magazine. [02:13.520 --> 02:17.760] TAP started life as a phone phreak magazine and was kind of morphing into computer stuff. [02:18.500 --> 02:20.100] 2600 definitely started life. [02:20.300 --> 02:21.440] Well, look at the title. [02:22.060 --> 02:24.340] Do any of you have your Cap'n Crunch whistles in your pocket? [02:24.480 --> 02:25.420] I will leave your assistance in a minute. [02:26.360 --> 02:31.980] You see, back in the day, the telephone network sent signals down the same wire you spoke on. [02:32.100 --> 02:33.880] That was called in-band signaling. [02:34.540 --> 02:39.500] And when a line was free, the telephone company would send a signal of 2600 hertz. [02:40.020 --> 02:40.640] Any whistles? [02:42.140 --> 02:43.680] I thought for... there we are. [02:48.210 --> 02:49.150] It's about there. [02:49.930 --> 02:54.070] 2600 hertz was sent down the wire to denote that the line was free and available for use. [02:55.450 --> 03:01.250] When you placed... picked up the phone and placed a touch-tone call from your home phone, it put out a certain set of frequencies. [03:01.630 --> 03:12.490] But if you asked the operator to place the call for you, her touch-tone dial, using multi... dual-tone multi-frequency tones, put out a different set of frequencies that directly controlled the long line's network. [03:12.990 --> 03:18.510] The blue box duplicated the operator's frequencies and allowed a phone phreak to make his own free calls. [03:19.230 --> 03:23.970] 2600 magazine was named for the 2600 hertz that would free up a tandem line for your use. [03:25.230 --> 03:38.670] I am honored, once again, to be the first session, albeit on the secondary track, and to be a telephony talk, to hearken back to the roots of 2600 magazine as a phone phreak journal, which, of course, later morphed into computers. [03:39.130 --> 03:42.470] And, of course, the phone phreaks themselves morphed into computer hackers. [03:44.770 --> 03:55.610] A few years ago, I was introduced to Mark Spencer, a Linux developer who had his own little Linux shop in, I believe it was Huntsville, Alabama, and who needed a telephone system. [03:56.090 --> 04:12.230] He started pricing business telephone systems and thought they were very expensive, but he had a bunch of dusty old IBM PCs lying around, and he wound up cobbling together station cards to connect telephones to and line cards to hook up telephone lines to and created his own little PBX, [04:12.230 --> 04:13.370] private branch exchange. [04:14.150 --> 04:23.370] That turned into asterisks, an open-source PBX system that anyone can download for free off the Internet from asterisk.org. [04:24.190 --> 04:29.130] There are instructions there and links to vendors for the station cards and the line cards. [04:29.430 --> 04:31.790] And it is the future of phone phreaking. [04:32.070 --> 04:36.410] It is phone phreaking via VoIP, Voice Over Internet Protocol. [04:37.230 --> 04:43.090] The gateway drug to that is SIP, Session Initiation Protocol. [04:43.810 --> 04:48.310] And that is why this session is punnily called, Are You Ready to Sip the Kool-Aid? [04:48.990 --> 04:51.890] Because the Kool-Aid is asterisk and voice over IP. [04:52.430 --> 04:55.870] And if you are going to be a phone phreak in the future, this is how you will be playing the game. [04:56.710 --> 04:58.390] For that, I had to bring in an expert. [04:58.850 --> 05:02.790] And that brings us to Gaston Draque, who will now introduce us. [05:02.790 --> 05:06.570] Oh, I should explain that Mark Spencer is one of my heroes. [05:06.950 --> 05:08.350] I put him on a pedestal. [05:08.530 --> 05:11.750] And it is the pedestal next to the pedestal for Almon Strowger. [05:12.830 --> 05:16.750] Strowger was an undertaker in Kansas City, Missouri many years ago. [05:16.950 --> 05:22.430] And he is considered the first phone phreak because he built the first device meant to get around the telephone operator. [05:22.690 --> 05:24.170] The rotary telephone dial. [05:24.590 --> 05:26.650] And of course, the switching equipment that went with it. [05:26.650 --> 05:38.370] His problem at the time was that when someone died, their relatives would just pick up the phone and talk to Central, the switchboard operator, and say, I need you to speak with an undertaker, please. [05:38.890 --> 05:44.190] The switchboard operator in town had a boyfriend who was Almon Strowger's competition. [05:44.870 --> 05:49.830] And so he had to develop a device that would get past the operator so that people could call him directly. [05:50.430 --> 05:52.570] And that is why Almon Strowger is the first phone phreak. [05:53.190 --> 06:01.170] And I put Mark Spencer on the pedestal next to him as the fellow who has developed Asterisk, our route into voice over IP. [06:01.470 --> 06:02.850] And now, Gus. [06:10.250 --> 06:11.090] Hi, everyone. [06:12.730 --> 06:14.870] So, we skipped this one. [06:15.090 --> 06:16.970] And we skipped this one, too. [06:18.050 --> 06:19.050] My name is Gus. [06:19.370 --> 06:20.910] I am a VoIP integrator. [06:21.330 --> 06:25.130] I have been working with Asterisk roughly since 2005. [06:26.390 --> 06:29.650] I have two kids, one wife, many males. [06:29.890 --> 06:34.890] And I work at Nexacom, which is a voice integrator and VoIP provider here in New York. [06:35.570 --> 06:37.150] Of course, I love Asterisk. [06:38.270 --> 06:42.230] And I love it so much that I can actually work and make a living out of it. [06:43.070 --> 06:46.850] And I am 100% biodegradable, which by now means nothing. [06:46.850 --> 06:51.730] But trust me, in a couple of years, it's going to mean a lot to be 100% biodegradable. [06:52.530 --> 06:53.470] That was G-share. [06:53.790 --> 06:54.930] So, what is Asterisk? [06:55.210 --> 06:56.130] And who made it? [06:57.490 --> 06:57.870] Okay. [06:58.610 --> 07:01.170] So, well, yeah. [07:01.290 --> 07:02.250] Mark Spencer built it. [07:02.490 --> 07:05.550] The reason why is, well, you know, they were too expensive. [07:05.550 --> 07:12.970] And his Linux hacking was good enough that he actually went and built the Asterisk core. [07:14.170 --> 07:16.550] Now, Asterisk is great. [07:16.930 --> 07:20.170] And it's a modularized system. [07:20.410 --> 07:23.630] But it really needs to talk to the PSTN at some point. [07:23.630 --> 07:30.550] So, there's another phreak, actually, who really helped him out, which is Jim Dixon. [07:31.530 --> 07:33.430] Jim Dixon is a phreak. [07:33.650 --> 07:35.750] He wanted to start a revolution. [07:35.750 --> 07:38.710] And he did it by creating the Zapata Project. [07:39.050 --> 07:44.070] The Zapata Project stated for, basically, we don't need no stinking DSPs. [07:45.710 --> 08:00.190] So, instead of having to buy those extremely expensive digital signaling processing hardware, he actually started building one for his own. [08:00.370 --> 08:08.170] And he did so by building the Tormento board with BSD drivers, because BSD was the main thing that he was working on. [08:08.990 --> 08:22.070] So, he posted the hardware online, totally open-sourced, open-designed hardware, and wishing that somebody could, you know, finally call him up. [08:22.230 --> 08:23.430] And actually, it happened. [08:23.950 --> 08:24.990] Mark Spencer did. [08:25.210 --> 08:32.410] And so, he wrote the Linux drivers for the Zapata Project. [08:32.690 --> 08:35.410] And that's where everything came together. [08:36.350 --> 08:42.570] And now, Asterisk was able to actually talk to the world through the PSTN. [08:44.090 --> 08:45.670] That's the Public Switch Telephone Network. [08:45.830 --> 08:46.090] Oh, yeah. [08:46.330 --> 08:46.510] Sorry. [08:46.630 --> 08:46.950] My bad. [08:49.630 --> 08:51.470] So, at the end, what is Asterisk? [08:51.550 --> 08:53.930] Well, Asterisk is an open-source telephony toolkit. [08:54.910 --> 09:05.690] I wouldn't call it a PBX, because it's a lot of things also a PBX, but some of the things that make it actually great, especially for hacking. [09:05.850 --> 09:13.110] You can do pretty much whatever you want with it, and accompany with them some weird things with it, actually. [09:14.250 --> 09:19.830] It's over one million production systems, 170, blah, blah, blah. [09:20.130 --> 09:22.570] It's very important to know that it has a dual license. [09:22.750 --> 09:27.030] It's GPL version 2, and it has an OEM license as well. [09:27.030 --> 09:28.430] And it has dual support. [09:28.570 --> 09:41.990] It has community support and the support by Digium, which is the company that Mark Spencer ended up founding, after he figured out that his Asterisk business was way bigger than his Linux support system. [09:41.990 --> 09:49.170] And let me say here that the community support is incredible. [09:49.510 --> 09:50.930] It's really incredible. [09:51.210 --> 09:52.190] It's huge. [09:52.510 --> 09:58.710] And it has had the ability to renew itself and evolve. [09:58.890 --> 10:06.510] And even though some of the main developers shifted to a different project and evolved, they were quickly replaced by others. [10:07.010 --> 10:11.350] And so that's probably one of the reasons you can see that Asterisk has... [10:11.350 --> 10:14.350] there's a real evolution in the versions. [10:14.730 --> 10:24.270] Not only adding features, but sometimes changing very, very important parts of its architecture. [10:26.190 --> 10:27.670] Sorry, I have an awful cough. [10:27.670 --> 10:36.170] So Asterisk runs on BSD systems, Solaris, even Mac, but mainly in Linux. [10:37.430 --> 10:43.610] So if you're going to try Asterisk, I suggest you do so using a Linux distribution. [10:45.370 --> 10:50.150] So we said this, you know, Asterisk is more than just a PBX. [10:50.650 --> 10:59.350] It acts as a TDM PBX, as an IP PBX, for what obviously didn't need it, the Jim Dixon project. [10:59.670 --> 11:06.270] But in order to actually sell boards, you know, you need to be able to have that connection to the Asterisk score. [11:06.890 --> 11:09.630] So obviously you can build hybrid PBXs. [11:09.730 --> 11:13.050] And this is great because there's so many things you can do with that. [11:13.190 --> 11:14.990] So many solutions you can provide to people. [11:15.510 --> 11:21.190] People that have some old PBXs with TDM technology. [11:21.190 --> 11:24.630] And they need to add features to it. [11:24.850 --> 11:27.570] Like, you know, voicemail and conferences. [11:28.230 --> 11:34.690] And sometimes some other things that are not even in the plain old telephony system menu. [11:35.590 --> 11:38.030] And they don't actually need to change that. [11:38.210 --> 11:42.870] All they have to do is put an Asterisk behind it. [11:42.870 --> 11:49.870] And route the calls from that TDM system into the Asterisk box. [11:51.250 --> 11:55.490] And, you know, do all the features on the Asterisk side. [11:58.010 --> 12:00.870] Obviously it acts as a VoIP gateway, right? [12:01.730 --> 12:06.510] There's so many call center solutions out there that are Asterisk based. [12:06.510 --> 12:09.170] Some of them actually say so. [12:09.690 --> 12:11.210] Many of them don't. [12:11.490 --> 12:18.330] But you would be amazed at how many times you're actually talking to an Asterisk system and you don't know it. [12:19.670 --> 12:25.070] And last but not least, we call them voice application servers. [12:25.570 --> 12:27.950] Well, voice application server is pretty much that. [12:28.190 --> 12:30.830] It's, okay, here's voice and let's do something. [12:31.430 --> 12:39.630] It's not just, you know, voicemail or conferences or things that are parking or whatever. [12:40.970 --> 12:43.530] There's pretty much whatever you want to do with it. [12:43.750 --> 12:53.770] Because once you have that leg, once you have that channel in control, you can do pretty much whatever you can do with the Linux system. [12:55.890 --> 12:59.410] So here comes, you know, the big cloudy word. [12:59.410 --> 13:04.970] We have the unified communications word, which is nothing and everything. [13:05.630 --> 13:10.030] We have call distribution systems, third-party software integration. [13:10.490 --> 13:13.670] And that's what I'm referring to, to voice application server. [13:14.350 --> 13:18.350] By putting Asterisk there, you can do pretty much whatever you want. [13:18.530 --> 13:21.610] Even though it sometimes doesn't make too much sense. [13:22.210 --> 13:29.830] Once we had a client that used it to control the monitors on the screens. [13:30.090 --> 13:33.910] So instead of getting the remote or whatever. [13:35.430 --> 13:40.510] Another thing that you need to know is that flavors come basically in two big groups. [13:40.710 --> 13:50.630] Either you'll find a distro that usually comes with a GUI in it, or you'll find the raw one, right, with no GUI. [13:50.910 --> 13:54.010] I strongly suggest you start there at the top. [13:54.770 --> 13:57.270] Downloading the source code and compiling it. [13:57.410 --> 13:59.050] It's not hard, it's really simple. [13:59.350 --> 14:04.090] Trust me, when you go to tutorials online, you'll see how easy it is. [14:04.870 --> 14:05.890] Don't freak out. [14:05.890 --> 14:07.350] Well, do freak out. [14:07.870 --> 14:09.410] Well, do freak out. [14:09.410 --> 14:18.150] But troubleshooting that installation is going to give you an experience that no amount of documentation will. [14:18.550 --> 14:19.110] Okay? [14:19.450 --> 14:24.530] So I really, really strongly urge you to go that route. [14:25.450 --> 14:28.170] You can also use Linux packages, of course. [14:30.170 --> 14:34.270] And then you have the myriad of GUIs. [14:34.270 --> 14:37.150] Which, by the way, I don't know why I say myriad, because there are not that many. [14:37.250 --> 14:42.230] The reason why there are not that many GUIs for asterisk is that it's really complicated. [14:42.830 --> 14:44.150] It's really complicated. [14:44.270 --> 14:46.410] And we're going to see why it's really complicated. [14:48.610 --> 14:51.530] And so basically there are two flavors. [14:51.730 --> 14:59.250] There's the free PBX, the distributions, asterisk now, elasterisk, trick box. [14:59.250 --> 15:06.530] And there's the DGM switchbox appliance, which comes with every bell and whistle possible. [15:06.530 --> 15:08.650] But it's proprietary. [15:09.330 --> 15:20.690] And then you have niche solutions, like, you know, the ones built by my friend, Nicolas Godinio, Anastronik, A2Billy, Qmetrics, and the works. [15:22.450 --> 15:24.630] But I strongly suggest you go without the GUI. [15:24.950 --> 15:26.730] And try and build your own GUI. [15:26.870 --> 15:29.730] And then you'll have a lot of respect for those guys. [15:30.110 --> 15:31.890] Trust me, I've been there. [15:33.610 --> 15:44.530] The other thing you need to be aware of is the version scheme, which is kind of confusing if it's the first time you go in there, because you go from 1.1.1 to 10, 11, yada, yada. [15:47.630 --> 15:50.890] And basically, you know, we switched to the... [15:51.430 --> 15:51.910] We. [15:52.230 --> 15:57.370] We switched to the Ubuntu model in 2010. [15:58.410 --> 16:02.290] The main thing you need to know is that there are three flavors, basically. [16:03.590 --> 16:05.570] Basically, it's two and a derivative. [16:05.570 --> 16:12.750] You have standard, you have LTS version, long time support version, and the certified. [16:13.150 --> 16:19.370] The certified is a derivative of one of the LTS versions. [16:19.650 --> 16:35.570] And that's the version that you will have to work with if you're trying to develop a commercial solution and being able to have and lean on the safety net that the Digium support system provides. [16:37.700 --> 16:40.130] And other things like... [16:40.130 --> 16:45.910] Digium also produces their own phones, their own SIP phones. [16:46.490 --> 16:53.450] And their functionality is incredibly enhanced if you're using a certified version, okay? [16:58.900 --> 16:59.620] So... [16:59.620 --> 17:00.360] Thank you. [17:02.980 --> 17:04.860] So this is how I look. [17:05.740 --> 17:06.460] Asterisk. [17:07.140 --> 17:08.680] From 10,000 feet. [17:09.200 --> 17:15.820] When I try and explain what these means for a company or client or friend. [17:18.140 --> 17:21.520] And basically what we have is we have asterisk, right? [17:21.520 --> 17:24.820] And that's why we call it basically a voice application server there. [17:25.500 --> 17:27.420] And there we have trunking. [17:29.000 --> 17:33.340] And you can trunk to SIP providers, for instance. [17:33.860 --> 17:37.900] You can trunk to another asterisk box somewhere else, right? [17:38.300 --> 17:39.760] In another location. [17:40.240 --> 17:47.980] You can do that through SIPs, through EECs, or through the TDM cards, right? [17:49.000 --> 17:53.600] T1s, E1s, depending on where it is that you live. [17:54.420 --> 17:58.200] And Asterisk would handle all the voice services, right? [17:58.720 --> 18:07.980] Queues, recording, parking, voicemail, IVRs, which are big to develop applications. [18:09.460 --> 18:10.440] That's the one. [18:11.860 --> 18:13.160] Who are we laughing at? [18:15.320 --> 18:16.800] We should turn the spotlights. [18:17.200 --> 18:17.360] Okay. [18:17.960 --> 18:18.980] But that's not a cell phone. [18:21.080 --> 18:22.540] So, somebody's calling. [18:22.920 --> 18:34.620] So, in the inside, we can have via SIP or EECs or even TDM, we can have our own desk phones or mobile phones even with SIP clients. [18:34.620 --> 18:38.760] And we can connect to applications and services. [18:39.120 --> 18:47.780] And here's where most of the Asterisk development gets done in the integration side. [18:47.920 --> 18:49.160] And that's what we do. [18:49.380 --> 18:55.400] We usually focus on that little application slash services and Gears and Cloud at the bottom. [18:57.560 --> 19:01.240] But what's the Asterisk architecture? [19:01.240 --> 19:04.880] Well, the Asterisk architecture is pretty simple. [19:05.860 --> 19:07.400] So, I don't know. [19:07.480 --> 19:09.540] Many of you might be familiar with, like, Apache. [19:09.920 --> 19:12.620] It's very, very similar. [19:12.860 --> 19:15.000] Even its configuration files are, which is... [19:15.000 --> 19:16.120] I don't know if that's good or not. [19:17.780 --> 19:27.520] And so, we have the core that takes care of mainly, you know, module management and the rich configuration files on boot and the system... [19:27.520 --> 19:28.620] It takes care of system timing. [19:28.840 --> 19:31.020] That's a big thing for Asterisk. [19:31.140 --> 19:35.520] Remember that this is, after all, a voice server, right? [19:35.520 --> 19:36.840] A media server. [19:37.080 --> 19:39.300] That's also the way most people call it. [19:39.860 --> 19:44.760] And so, for media streaming, timing is pretty much everything, right? [19:46.340 --> 19:52.400] I mean, if you don't want to get echo and all sort of weird things in the voice channel. [19:53.100 --> 19:55.940] And obviously, channel management, right? [19:56.780 --> 19:57.820] You'll find... [19:57.820 --> 20:01.560] This is probably the only directory that I'm going to show. [20:02.940 --> 20:04.620] It's very important, actually. [20:04.940 --> 20:08.520] Which is the modules, the modules directory. [20:08.840 --> 20:10.820] And is where modules live. [20:11.360 --> 20:15.880] And is where, if you ever develop a module, is where your module will lie. [20:16.440 --> 20:22.260] And that gives you an idea of the different components of Asterisk. [20:22.260 --> 20:24.220] We have the channel drivers. [20:24.900 --> 20:27.440] For dial plans, we have applications and functions. [20:27.640 --> 20:30.360] And that sometimes is kind of weird. [20:30.560 --> 20:36.460] Functions are basically what you use to take care of channels and modify them. [20:36.620 --> 20:39.440] Like changing their caller ID or doing something like that. [20:39.600 --> 20:41.580] And we're going to talk about that later on. [20:43.380 --> 20:45.400] And applications are basically the applications. [20:45.400 --> 20:48.760] Like Q application, like PARC. [20:48.980 --> 20:49.400] And so... [20:50.140 --> 20:51.620] And that's a feature, actually. [20:51.760 --> 20:52.340] PARC is a feature. [20:54.060 --> 20:55.440] So we have the codecs. [20:57.580 --> 21:03.400] The format files, which are the ones taking care of the file format drivers. [21:04.700 --> 21:08.380] CDRs, which are call detail records, which are very, very important. [21:08.380 --> 21:11.740] And that's another big use for Asterisk, right? [21:11.880 --> 21:12.280] Billing. [21:13.540 --> 21:17.560] And being able to keep track of everything, every single call. [21:17.760 --> 21:19.140] And even trace it. [21:19.300 --> 21:23.720] Tracing calls in Asterisk is not as easy as it sounds. [21:23.920 --> 21:26.580] Because remember that in Asterisk, most... [21:26.580 --> 21:27.480] What happens... [21:27.480 --> 21:33.180] It's rare the case that you would have somebody calling in to somebody directly, right? [21:33.180 --> 21:33.560] Like... [21:33.560 --> 21:34.260] Well, it could be... [21:34.260 --> 21:35.600] You could have a DID, right? [21:35.740 --> 21:37.760] And that would be a direct inbound call. [21:38.420 --> 21:38.840] But... [21:38.840 --> 21:43.420] But most of the times, that call gets parked or places on hold. [21:43.720 --> 21:45.160] Or sends into a... [21:45.160 --> 21:47.540] Or sent into a conference room, right? [21:47.760 --> 21:48.860] Or even to a queue. [21:49.460 --> 21:50.760] And from that queue to another. [21:51.380 --> 21:56.080] And so call detail records are, in itself, a niche. [21:56.560 --> 22:02.080] And a very valuable expertise, which not many people are... [22:03.320 --> 22:04.100] Excelling at. [22:05.820 --> 22:08.580] And for that reason, it came up. [22:08.800 --> 22:09.300] The cell... [22:09.300 --> 22:11.000] The cell drivers are... [22:11.000 --> 22:13.320] Are pretty much like the CDRs. [22:13.560 --> 22:18.320] But they have a very, very low level of detail. [22:18.980 --> 22:21.100] But again, they're hard to combine. [22:22.380 --> 22:23.840] We have the bridge drivers. [22:24.060 --> 22:25.400] And the bridge is... [22:25.400 --> 22:28.660] Along with the channel, those are the two kind of weird words there. [22:28.820 --> 22:31.800] We're gonna have to explain a little bit why is it that we need. [22:31.800 --> 22:33.000] We need bridge drivers. [22:33.980 --> 22:35.120] And resources. [22:35.360 --> 22:36.720] That's pretty much everything else. [22:38.440 --> 22:40.320] So, this is how... [22:41.280 --> 22:46.400] This is how the architecture actually looks like, in general. [22:46.720 --> 22:47.500] This is from the... [22:47.500 --> 22:48.660] From the... [22:48.660 --> 22:50.520] Asterisk.org wiki. [22:50.740 --> 22:52.880] Which is incredibly... [22:52.880 --> 22:56.940] That's been one of the major overhauls. [22:56.940 --> 23:00.660] Documentation in Asterisk is really something that... [23:00.660 --> 23:03.840] It's taken very seriously by the community. [23:05.420 --> 23:05.980] And... [23:06.660 --> 23:09.140] And if you go there, you'll find pretty much everything. [23:09.380 --> 23:12.080] You'll have to figure out how to go around it. [23:12.280 --> 23:12.880] That's all. [23:14.580 --> 23:16.620] So, basically we have the network. [23:16.820 --> 23:18.300] We have the hardware layer. [23:18.300 --> 23:20.480] We have the local operating system. [23:21.040 --> 23:21.120] Right? [23:21.320 --> 23:22.840] And we have the Asterisk components. [23:24.120 --> 23:24.600] Now... [23:25.340 --> 23:26.300] The one... [23:26.300 --> 23:26.840] Let me see. [23:26.960 --> 23:27.340] I can... [23:27.340 --> 23:28.280] Do I have a pointer here? [23:28.580 --> 23:28.980] No? [23:29.240 --> 23:29.360] Yeah. [23:29.780 --> 23:29.860] Here. [23:30.000 --> 23:30.160] Yeah. [23:30.400 --> 23:30.600] Right. [23:31.180 --> 23:31.660] So... [23:31.660 --> 23:31.740] So... [23:32.400 --> 23:34.080] So this is the one that... [23:35.360 --> 23:35.920] That... [23:35.920 --> 23:37.400] That Mark Spencer wrote for the... [23:37.400 --> 23:38.640] For Zapata project. [23:39.120 --> 23:41.300] Originally it was called Saptel. [23:41.760 --> 23:45.540] But some guy came up and said, Listen, Saptel is a registered mark. [23:45.780 --> 23:46.360] You know... [23:46.360 --> 23:47.240] Please don't use it. [23:47.620 --> 23:50.060] And so we changed for... [23:50.060 --> 23:50.520] Daddy. [23:52.660 --> 23:53.220] Okay. [23:54.420 --> 23:54.980] So... [23:54.980 --> 23:55.540] That's that. [23:56.960 --> 23:58.040] And the libPRI. [23:58.220 --> 23:58.400] Right? [23:58.480 --> 24:00.160] Which is the library for PRIs. [24:02.120 --> 24:02.720] So... [24:02.720 --> 24:07.280] What would happen normally is that you would have some kind of inbound call. [24:07.500 --> 24:11.440] Whether it's via the BSDN or via a network. [24:11.760 --> 24:13.460] And not necessarily a call itself. [24:13.900 --> 24:13.980] Right? [24:14.360 --> 24:15.040] It could be... [24:15.040 --> 24:19.240] A network call could be something from another application, for instance. [24:19.580 --> 24:22.420] And it's going to go through the hardware layer. [24:22.560 --> 24:23.400] It's going to go through the... [24:24.960 --> 24:28.440] Through the networking or TDM layer. [24:28.700 --> 24:28.960] Right? [24:28.960 --> 24:33.420] And usually it would go into a particular channel driver. [24:33.660 --> 24:34.180] Right? [24:34.560 --> 24:38.440] And the channel driver is going to basically manage that channel. [24:38.600 --> 24:38.880] Right? [24:38.980 --> 24:39.300] Obviously. [24:39.860 --> 24:40.500] And... [24:41.200 --> 24:42.800] And connect to the core. [24:43.060 --> 24:43.460] Right? [24:43.940 --> 24:44.580] And... [24:44.580 --> 24:49.460] The thing that's going to happen there is that the call is going to go into a context. [24:49.460 --> 24:54.120] And here we have another word that is different from the PSTN... [24:54.120 --> 24:58.900] From the typical telephony lingo. [24:59.300 --> 25:00.900] Which is... [25:00.900 --> 25:04.160] Usually a dial plan would be just that. [25:04.360 --> 25:04.420] Right? [25:04.600 --> 25:05.600] A dial plan. [25:06.120 --> 25:11.400] But in asterisk, a dial plan is really the switching core in terms of logic. [25:11.400 --> 25:26.640] So whenever you set up any channel driver, whether it's SIP, whether it's EX, whether it's SS7, or whatever it is that you're setting up, it's always going to have a context component. [25:26.980 --> 25:32.760] And basically that's the incoming route for that channel into the asterisk dial plan. [25:33.540 --> 25:34.060] So... [25:34.060 --> 25:38.520] The dial plan becomes the center of the logic of asterisk. [25:39.180 --> 25:39.700] And... [25:39.700 --> 25:44.820] And to make matters worse, the configuration file for the dial plan is called extensions.conf. [25:45.280 --> 25:45.800] So... [25:45.800 --> 25:46.640] That's... [25:46.640 --> 25:48.140] That's kind of... [25:48.140 --> 25:49.220] Weird, I know. [25:50.840 --> 25:52.360] But I guess it's too hard to change. [25:52.920 --> 25:53.640] Or not. [25:54.580 --> 25:55.100] But... [25:55.100 --> 25:56.220] So what I was... [25:56.220 --> 25:56.480] Oh, okay. [25:57.680 --> 25:58.200] So... [25:58.200 --> 26:01.360] Let me move ahead a little bit. [26:03.840 --> 26:04.780] There we go. [26:05.220 --> 26:05.440] Okay. [26:05.600 --> 26:05.960] That's better. [26:07.620 --> 26:14.440] So what we have in the asterisk components, obviously, are the channel drivers, which are the ones that allow asterisk to talk to the outside. [26:16.460 --> 26:18.520] We have APIs. [26:18.940 --> 26:22.580] We have programming interfaces for external applications. [26:23.420 --> 26:26.760] And I'm going to say that different than APIs, because actually APIs are... [26:26.760 --> 26:29.120] It's a broader concept. [26:29.120 --> 26:33.960] So basically we have three right now, adding a fourth. [26:35.440 --> 26:36.440] We have... [26:36.440 --> 26:36.920] I'm sorry. [26:37.020 --> 26:38.080] We have two adding a third. [26:38.300 --> 26:47.020] We have AGIs, which is the asterisk gateway interface, which is a typical standard input-output interface. [26:47.480 --> 26:52.820] We have AMI, which is asterisk manager interface, which is a socket-based interface. [26:52.820 --> 26:58.180] And we have ARI, which is a REST interface. [26:58.540 --> 27:03.340] And that's the last one that was created. [27:03.860 --> 27:08.100] And I'm going to talk later on about it, because it's very important how that evolved and why. [27:09.940 --> 27:17.740] And we have, obviously, the PBX configuration, which are all the configurations files, which leave in ETC slash asterisk. [27:20.760 --> 27:31.360] And the main ones you should fiddle with is asterisk.conf to configure, basically, the general aspects of asterisk. [27:31.360 --> 27:38.680] You should work with extension.conf, which I already explained, is the main logic hub for asterisk. [27:39.260 --> 27:41.620] Logger.conf, for login purposes. [27:42.720 --> 27:44.280] Do fiddle with that. [27:44.460 --> 27:55.640] The first time you play with asterisk, go into logger.conf and really enable the full logs, right, with everything, and the messages with everything. [27:55.840 --> 27:59.320] Just enable every single login thing that you have. [27:59.320 --> 28:00.700] It's not a production server. [28:00.820 --> 28:02.100] It's not going to hurt you, okay? [28:04.800 --> 28:18.400] Because debugging asterisk or working with it and trying to solve the problem sometimes requires you to go to different places and figure out what's going on. [28:18.500 --> 28:21.280] You're not going to be able to do that in a single spot. [28:21.380 --> 28:22.500] Definitely not the CLI. [28:22.620 --> 28:31.080] For those of you who have played with the CLI, you must already know that the CLI is great for presentations, but it's not very good for debugging. [28:31.440 --> 28:36.420] There's a lot of things going on, especially in a working system, which is usually pretty much turned off. [28:40.640 --> 28:47.740] for configuration files, we have also a DB backend architecture, which is really great. [28:49.660 --> 29:17.700] It's used in REST ODBC, and there's an architecture that's called ARI, sorry, Asterisk real-time architecture, which basically takes away, or I don't know, I wouldn't say a burden, but if certain commercial systems, you really need to dynamically and constantly modify the configuration of your asterisk system, [29:17.820 --> 29:18.200] right? [29:18.600 --> 29:24.780] And that is kind of hard to do on a file-based system, and it's prone to errors. [29:25.440 --> 29:32.600] So once you have that database really tuned up, it's easier, especially to integrate with other systems. [29:34.060 --> 29:36.540] And for reporting, I already explained that. [29:36.660 --> 29:38.840] When we saw the modules, we have the CDR, the CLI itself. [29:40.440 --> 29:50.160] And last but not least, the command line interface, which is, like I said, good for learning, but definitely not very useful when you're trying to debug things. [29:51.260 --> 29:55.080] So I already explained what a dial plan is. [29:56.480 --> 29:59.480] Now, why are we talking so much about channels? [30:01.300 --> 30:19.600] And to explain that, I'll have to explain something that is kind of the topic of the talk, and it's really not the topic of the talk, because what we were discussing before with Cheshire is that usually people approach asterisk because of SIP. [30:20.480 --> 30:23.840] And asterisk is so much more than SIP. [30:24.060 --> 30:33.950] Actually, a lot of work has been done on SIP to the point that the main library for SIP has been totally overhauled. [30:35.890 --> 30:38.370] Redone, I would say, actually. [30:39.430 --> 30:43.390] But still, it's just a piece of asterisk. [30:44.770 --> 30:46.530] But still, I have to show it. [30:47.070 --> 30:51.490] So, who's familiar with SIP? [30:53.070 --> 30:53.890] Great, good. [30:53.890 --> 30:55.490] Okay, so we have... [30:56.410 --> 30:58.470] So, for you, this is really boring. [30:59.750 --> 31:00.630] Extremely boring. [31:02.310 --> 31:04.450] Yeah, this is not a SIP server session. [31:04.670 --> 31:05.090] Definitely. [31:05.510 --> 31:09.250] So, we have the typical messages. [31:09.810 --> 31:16.870] For those of you who are not familiar with SIP, SIP is a signaling protocol. [31:16.870 --> 31:17.810] Okay? [31:18.670 --> 31:25.530] In terms of what Cheshire was referring to before is what used to be in the inbound signaling. [31:25.930 --> 31:26.030] Right? [31:26.570 --> 31:27.210] That's SIP. [31:27.650 --> 31:27.910] Right? [31:28.130 --> 31:29.950] SIP is just for signaling. [31:30.210 --> 31:31.730] It's for controlling the session. [31:31.930 --> 31:34.930] It's for letting the parties know what's going to happen and how. [31:35.570 --> 31:42.710] And the good thing about SIP is that it has the ability to modify that session on the fly. [31:42.710 --> 31:43.550] Right? [31:44.030 --> 31:48.290] And add participants dynamically and take away participants dynamically and fork them. [31:48.610 --> 31:50.430] And do all sorts of crazy things. [31:51.830 --> 31:58.950] And one of the things about SIP is it can do so much that the implementation of SIP... [31:59.710 --> 32:02.730] Everybody has implemented the parts that they needed. [32:03.210 --> 32:06.450] And there are very, very few that... [32:06.450 --> 32:09.370] Well, I don't know actually any that has implemented everything. [32:11.450 --> 32:13.450] So that's one of the problems. [32:13.710 --> 32:17.630] And then that has been an issue with Asterisk for some time. [32:17.830 --> 32:25.230] Because there's a certain amount of energy that the project can put into one part of the solution. [32:26.350 --> 32:28.410] But now it's been tackled, definitely. [32:28.870 --> 32:30.430] So this is a typical dialogue. [32:31.410 --> 32:31.590] Sorry. [32:31.890 --> 32:33.070] These are text-based. [32:33.290 --> 32:35.090] This is just a diagram, obviously. [32:35.090 --> 32:55.570] And so those of you who are familiar with HTTP, which I believe most of you are, or many of you are, SIP is very, very similar because it's mimicking the message codes and the error codes and pretty much everything from HTTP. [32:56.350 --> 33:01.150] So we have an invite, basically, you know, I want to talk to you kind of message. [33:02.690 --> 33:06.210] And it's text-based with all the information in it. [33:07.490 --> 33:09.750] And I get a hundred trying back. [33:09.970 --> 33:11.210] Might get it, might not. [33:11.890 --> 33:13.210] I get a ringing back. [33:13.450 --> 33:14.650] Might get it, might not. [33:14.910 --> 33:16.910] And this is a very, very simple one, right? [33:16.990 --> 33:19.170] Those of you, yeah, I see the ones that know about SIP. [33:19.170 --> 33:19.990] They're laughing already. [33:21.250 --> 33:22.190] How come... [33:22.190 --> 33:22.670] Hold on. [33:22.850 --> 33:23.710] Is this a standard? [33:23.990 --> 33:26.270] Yeah, well, it's an RFC, you know. [33:26.870 --> 33:28.170] It's a work in process. [33:28.470 --> 33:30.090] It's been in process for 10 years. [33:30.230 --> 33:31.050] Yeah, even more. [33:32.730 --> 33:34.750] But some SIP servers do things. [33:34.930 --> 33:35.890] Some others don't. [33:36.410 --> 33:38.450] Then we got the 200 okay back. [33:38.730 --> 33:39.630] Then we have the YAC. [33:40.190 --> 33:47.990] And then we start sending RTP, obviously, not through SIP itself. [33:48.850 --> 33:51.090] They have the YAC and there it goes, the call. [33:52.070 --> 33:57.190] So that's a typical direct call between two SIP user agents. [33:58.030 --> 34:02.430] Now, a SIP proxy, and it's not asterisk, okay? [34:02.890 --> 34:07.810] A SIP proxy, basically, would be the one doing the hops, right? [34:08.070 --> 34:14.510] If you were thinking about the plain old telephony system, those would be kind of the PBXs for the telco, right? [34:14.590 --> 34:19.710] You would call somebody, but for that to happen, you would have to call your local PBX. [34:19.830 --> 34:27.970] And that local PBX will forward the call to the other local PBX, and that other local PBX will call your person or whatever, right? [34:29.950 --> 34:34.470] So that's pretty much what the SIP proxies do, right? [34:35.610 --> 34:41.170] And so, well, we added a 407 there because there was authentication required there. [34:42.130 --> 34:46.750] And basically, we have the cascading going one way or the other, right? [34:47.030 --> 34:49.450] But asterisk is not a SIP proxy. [34:49.450 --> 34:52.350] And this is very important to understand. [34:54.510 --> 35:03.770] Because if you do know something about SIP and you don't know that asterisk is a SIP proxy, you're going to freak out when you start taking a look at the packages, right? [35:05.090 --> 35:10.270] And so, in asterisk, what happens is that the user would call... [35:10.270 --> 35:17.130] The relation between user A and proxy 1 would be the relation basically between user A and asterisk, right? [35:17.910 --> 35:20.950] But in between, right, nothing is going to happen. [35:21.210 --> 35:23.430] That goes into the core, right? [35:23.670 --> 35:25.190] And basically, it goes into dial plan. [35:25.370 --> 35:32.250] And the dial plan might or might not execute a... well, in this case, an application called dial, right? [35:32.250 --> 35:37.510] And, of course, if you want to call that person, it's going to execute dial. [35:37.650 --> 35:38.430] But maybe not. [35:38.630 --> 35:45.590] Maybe you don't want to be called at, I don't know, between 4 and 5, because it's your yoga class time, whatever, right? [35:45.850 --> 35:47.330] And so asterisk will know that. [35:47.910 --> 35:49.550] And so it's not going to even dial. [35:49.910 --> 35:53.990] It's going to tell me, listen, you know, user B is in his yoga class. [35:54.350 --> 35:55.670] Wouldn't you mind calling later? [35:55.810 --> 35:57.610] But whatever you want to do with it, okay? [35:59.890 --> 36:02.230] So if that doesn't happen, user A will be the same. [36:02.230 --> 36:03.070] We'll call asterisk. [36:03.130 --> 36:05.270] Asterisk will call user B. [36:05.690 --> 36:10.810] And when asterisk has both channels, and this is where we come... [36:10.810 --> 36:15.110] channels or collects, it's going to then bridge them together, right? [36:15.330 --> 36:17.590] And then you're going to be able to talk to each other. [36:18.950 --> 36:21.850] So that's what a... by the way, I didn't write it. [36:21.910 --> 36:22.370] That's weird. [36:22.550 --> 36:25.390] So that's what a back-to-back user agent is, right? [36:25.690 --> 36:29.410] It's actually acting as a user agent for both parties. [36:29.410 --> 36:36.090] And so you have basically two channels and a bridge in order to generate a call. [36:37.030 --> 36:39.810] Which, again, is not a zip proxy. [36:41.810 --> 36:51.130] And so the way asterisk handles zip, basically asterisk had to make certain decisions on how zip was going to be handled, right? [36:51.430 --> 36:56.430] And those decisions obviously, you know, took a certain path and not another path. [36:56.430 --> 37:02.830] And so every possibility... I've heard so many times people that go and read an RFC and go, yeah, but asterisk is not doing this. [37:03.250 --> 37:05.190] Asterisk should do that and these and that. [37:05.470 --> 37:05.970] No, no, no. [37:06.370 --> 37:09.430] Asterisk is doing what it needs to do. [37:09.530 --> 37:10.790] It could do it better. [37:11.370 --> 37:17.610] And better is so much now that that's why the zip stack is being changed. [37:17.610 --> 37:18.130] Okay? [37:18.350 --> 37:26.550] But still, the fact that the zip stack changed doesn't mean that all the features in the zip stack are available to asterisk. [37:27.010 --> 37:27.270] Okay? [37:28.830 --> 37:30.570] So still a lot of work to be done. [37:31.170 --> 37:34.270] So that's what I already described pretty much. [37:34.270 --> 37:40.850] Let's say we have a sub phone and in my laptop and a hard phone, which is zip phone. [37:41.370 --> 37:44.270] And they go through the network and they go into the... [37:44.790 --> 37:46.230] They're being handled by... [37:46.870 --> 37:47.830] They were... [37:47.830 --> 37:51.310] They used to be handled by chanzip, which was the channel driver for zip. [37:52.030 --> 38:01.630] Now it's chanpjzip because it's based on the pjzip stack, which is open-source, obviously. [38:03.750 --> 38:08.210] And basically that's going to send it to the core and it's going to go into the dial plan. [38:08.530 --> 38:11.670] And the dial plan is going to say, okay, whether we dial it out or not. [38:12.910 --> 38:17.790] And if they do, it's going to execute another application, which is not dial actually. [38:17.810 --> 38:20.650] It's only executable from the dial plan itself. [38:21.010 --> 38:21.850] From the core, sorry. [38:23.610 --> 38:26.950] The same would happen, and this is the beauty of the back-to-back user agent. [38:26.950 --> 38:33.970] So, yeah, okay, but a zip proxy is good between two zip endpoints. [38:34.130 --> 38:34.650] It's great. [38:35.410 --> 38:36.710] Yeah, kind of. [38:37.290 --> 38:41.790] Because what happens when you don't have another zip endpoint, right? [38:41.810 --> 38:45.390] I have a PSTN interface. [38:45.410 --> 38:52.050] I have a plain old telephony system line, and I have a POTS card, right? [38:52.050 --> 38:58.350] A TDM card in my PC, and that's, you know, how do I breach those? [38:58.750 --> 38:59.890] Do I need a gateway? [39:00.230 --> 39:00.590] Do I need... [39:00.590 --> 39:01.210] Well, no. [39:01.370 --> 39:02.370] That's the beauty of Asterisk. [39:02.470 --> 39:03.110] You can have... [39:03.110 --> 39:08.510] As long as you have two channels, Asterisk doesn't care that the channels are different. [39:08.810 --> 39:10.070] It really doesn't. [39:10.550 --> 39:12.570] And that makes a lot of difference. [39:12.810 --> 39:16.250] And also, you can have two zip endpoints, right? [39:16.390 --> 39:18.510] But they don't have the same codecs. [39:18.710 --> 39:20.530] They don't have the same capabilities. [39:21.030 --> 39:22.370] Maybe you don't want them to. [39:23.090 --> 39:24.650] That could be also the case. [39:24.870 --> 39:33.570] Maybe one is a remote worker working using G729 for highly compressed audio. [39:34.310 --> 39:37.550] And the other phone is in your local network. [39:37.910 --> 39:39.170] Why pay for a license? [39:39.410 --> 39:43.510] You have 711 in the local, and you have 729 in the outside. [39:43.790 --> 39:45.210] This is very common, right? [39:45.210 --> 39:51.150] So, Asterisk would be doing transcoding there, which is... [39:51.150 --> 39:53.670] Whenever I say transcoding, people go, whoops. [39:54.210 --> 39:54.310] Yeah. [39:54.510 --> 39:58.090] People transcoding, CPU, death, death, death. [39:58.350 --> 40:01.850] But sometimes it's required, right? [40:03.510 --> 40:06.750] And let's be honest, CPUs are very cheap now. [40:06.750 --> 40:09.970] That's no longer a problem. [40:10.510 --> 40:12.510] Unless we're talking volume here. [40:12.690 --> 40:16.650] And then all those little things become very important and actually vital. [40:19.310 --> 40:23.790] So, I was saying before that APIs application... [40:23.790 --> 40:25.010] Yeah, well, actually there are many. [40:25.290 --> 40:28.050] But that was one of the discussions. [40:28.050 --> 40:28.890] It's... [40:28.890 --> 40:31.590] I said before that the community is very interesting. [40:31.790 --> 40:37.490] Just reading the mailing lists, it's extremely... [40:39.030 --> 40:39.910] It's extremely... [40:41.930 --> 40:42.370] Great. [40:42.570 --> 40:42.750] Good. [40:43.350 --> 40:46.950] I'm not an English speaker, but most would have already noticed that. [40:48.590 --> 40:49.030] It's... [40:49.030 --> 40:50.150] You learn a lot from that. [40:50.370 --> 40:52.810] From the dev list and the user's list, kind of. [40:52.950 --> 40:54.770] But the dev list is actually great. [40:56.970 --> 41:01.470] And kind of a flame went on about the APIs a couple of years ago. [41:02.370 --> 41:04.030] And these are really the APIs. [41:04.230 --> 41:04.950] You have the... [41:04.950 --> 41:09.010] Remember I said that Astros is actually a telephony toolkit. [41:10.130 --> 41:16.470] And, of course, if you enjoy C, then you can do pretty much whatever you want. [41:16.550 --> 41:17.790] You can write your own module. [41:18.230 --> 41:21.670] And to do that, you don't actually have to go through all the panes. [41:21.670 --> 41:30.350] You can actually use the libraries that Astros comes from to handle channels and to playback audio files and everything. [41:30.690 --> 41:33.950] So, actually, there is an internal API, right? [41:35.110 --> 41:37.070] Which is heavily documented, by the way. [41:37.250 --> 41:44.730] But if you go to a module that does something that you want to do and take a look at that, then I would do that, really, instead of... [41:44.730 --> 41:48.010] I mean, reading the entire code, I believe it's impossible at this point. [41:48.890 --> 41:51.490] Then we have the dial plan scripting languages. [41:51.970 --> 42:06.130] Aside from the typical extensions.conf configuration language, you can use Lua or you can use AAL instead of the Astros dial plan. [42:07.070 --> 42:12.270] The Astros gateway interface itself is an API. [42:12.590 --> 42:17.650] A very powerful one and a very dangerous one if nobody reads... [42:17.650 --> 42:21.090] If you don't read the documentation, which nobody does, right? [42:22.650 --> 42:23.890] Who reads the documentation? [42:24.130 --> 42:26.290] I mean, I had to ask where this was. [42:26.450 --> 42:28.030] And the guy went, here it is. [42:28.210 --> 42:28.290] Oh. [42:28.910 --> 42:29.910] Yeah, who reads it, right? [42:30.850 --> 42:31.250] So... [42:33.030 --> 42:34.050] AGI is tricky. [42:34.390 --> 42:40.810] If you're starting with AGI, which seems really powerful, once you set up your first Astros, you say, okay, with this I can do whatever in my... [42:40.810 --> 42:43.270] This application that I have, this application that I have... [42:44.330 --> 42:53.970] I mean, it's open to pretty much anything that handles standard input-output, whether it's, you know, Python, even... [42:53.970 --> 42:54.690] Well, a C application. [42:54.850 --> 42:57.710] Making an AGI with a C application might not make sense. [42:57.710 --> 43:01.250] We did it at some point, but really it doesn't make any sense. [43:01.630 --> 43:03.610] You might as well write the module yourself. [43:05.550 --> 43:08.790] And so AMI, it's also great. [43:09.310 --> 43:12.750] Asterisk Manager Interface is a great API because it only... [43:12.750 --> 43:16.970] It not only allows you to send commands into Astros, but it... [43:16.970 --> 43:20.990] The power, I believe, for AMI is the way it lists... [43:20.990 --> 43:25.470] It allows you to listen to events that are going on in Astros. [43:25.470 --> 43:39.590] And this is really, really, really powerful, although it's really hard to fiddle with, because every single event is coming your way, and so you have to start filtering them and doing some logic there in the outside. [43:40.430 --> 43:44.270] They're very interesting projects using Astros Manager Interface. [43:44.390 --> 43:46.570] So basically, like I said, it's a socket connection. [43:49.190 --> 43:50.750] So it's obviously bidirectional. [43:53.010 --> 43:55.450] And most solutions, what they do is that just... [43:55.470 --> 43:57.570] they just open, you know, two sockets. [43:57.850 --> 44:03.530] One just for listening events, and the other one just for commands. [44:06.170 --> 44:06.650] The... [44:06.650 --> 44:07.250] Where are we talking? [44:07.350 --> 44:07.670] Wow. [44:08.030 --> 44:08.330] Okay. [44:09.250 --> 44:11.630] I had a lot of things going on, but I'm not going to make it. [44:13.030 --> 44:15.090] External AVR is really interesting as well. [44:15.390 --> 44:16.370] Command Line Interface. [44:16.690 --> 44:17.490] Call files. [44:17.590 --> 44:23.250] Call files are still around, and I believe they will, because they're very easy to use. [44:23.410 --> 44:28.330] Basically, there's a spool directory where you just move a file in there, right? [44:29.490 --> 44:32.910] And boom, out it goes, a call, right? [44:33.290 --> 44:36.050] It's basically like a contact file. [44:36.070 --> 44:44.570] You send it there, and it makes the event call, and it takes a specific channel that's all there, and a color ID, pretty much everything. [44:46.110 --> 44:48.170] So, call files are still around. [44:48.410 --> 44:51.470] I thought they were going away, but they're definitely being used a lot. [44:52.430 --> 44:55.730] The Azure's real-time infrastructure already explained. [44:55.870 --> 45:02.770] It's the one that allows you to put the configuration files in a database backend in a dynamic way. [45:02.910 --> 45:03.870] This is very important. [45:04.070 --> 45:05.550] You don't have to reload anything. [45:06.770 --> 45:10.730] And last but not least, the Asterisk REST interface. [45:11.550 --> 45:15.910] And why the Asterisk REST interface in LAST? [45:16.090 --> 45:19.250] Because the Asterisk REST interface is still in the making. [45:19.430 --> 45:20.030] Okay? [45:20.750 --> 45:33.850] And all of this discussion came up because whenever you need to develop an application or do an integration, you find yourself with Asterisk going through a hundred places at the same time. [45:34.390 --> 45:55.190] And having to coordinate all of that and putting all the safety measures and taking care of, you know, basically garbage collection in terms of not programming, but the myriad of different languages and scripts and things that you have to deal with. [45:56.410 --> 45:58.610] And it can be very cumbersome. [46:00.250 --> 46:03.390] So here comes, you know, the web. [46:03.650 --> 46:05.170] Everybody's here in REST APIs. [46:05.470 --> 46:08.370] They make sense, which is, I believe, very important. [46:08.510 --> 46:09.670] They really make sense. [46:09.930 --> 46:18.210] They open up a door for web developers to actually use Asterisk as a black box for voice applications. [46:19.030 --> 46:19.490] Period. [46:19.710 --> 46:20.410] That's it. [46:21.270 --> 46:27.330] And that's beautiful because they can take care of whatever it is that they do best, right? [46:27.670 --> 46:32.110] Come up with the next super geeky application that needs voice. [46:32.310 --> 46:33.110] Yeah, so be it. [46:33.190 --> 46:34.150] Let's add it to it. [46:34.830 --> 46:35.190] No. [46:35.350 --> 46:37.730] Well, if you need to add voice, you need to learn all of this. [46:38.470 --> 46:40.190] And, well, can I learn only one? [46:40.350 --> 46:41.150] No, probably not. [46:41.310 --> 46:42.150] It's not going to be enough. [46:42.230 --> 46:47.430] You might need two, three, four of these items to actually come with a complete solution. [46:47.930 --> 46:48.690] That's not good. [46:50.290 --> 46:56.570] So, the Asterisk REST interface, I believe, is something that is very, very worth looking into. [46:59.170 --> 47:07.990] And the latest changes in Asterisk are basically, I already said, the SIP stack, which is PJ SIP. [47:08.510 --> 47:11.110] A lot of incredible things are happening there. [47:11.110 --> 47:17.750] For both of you who know about SIP, there are still things that are not there yet, okay? [47:17.990 --> 47:23.350] In PJ SIP, like AORs, the way you would handle them naturally on a SIP server. [47:24.430 --> 47:26.750] Several things, but are still in the works. [47:27.650 --> 47:32.050] The Stasis core message bus. [47:32.050 --> 47:42.050] That's beautiful, because one of the reasons why we had so many things is that there wasn't a common core bus for messaging. [47:42.830 --> 47:49.850] And so, the Stasis message core allows actually for the REST API to exist, right? [47:49.990 --> 47:53.190] Because the REST API has to access pretty much everything, right? [47:53.290 --> 47:55.270] Even AMI and events, but I'm sorry. [47:55.870 --> 48:04.090] And so, to actually put a REST API on top of everything, but have that connect to the all ways of doing asterisks. [48:04.410 --> 48:06.210] Actually, it didn't make much sense, right? [48:06.290 --> 48:10.210] That's kind of a big wrapper on top of a complicated thing already. [48:12.030 --> 48:13.030] And the bridge. [48:13.870 --> 48:15.590] And we're out of time. [48:15.870 --> 48:16.970] I have way more. [48:19.030 --> 48:24.190] But the bridge in technology that was introduced for ConfBridge for a long time. [48:24.470 --> 48:30.650] You might not know this, but outside of the United States, conferences are not that popular. [48:31.250 --> 48:31.970] Trust me. [48:33.310 --> 48:34.190] I know. [48:34.430 --> 48:34.850] I know. [48:35.030 --> 48:35.870] I live in Buenos Aires. [48:36.070 --> 48:36.570] A conference? [48:36.730 --> 48:37.190] What's the conference? [48:37.550 --> 48:38.390] Yeah, you call in. [48:38.430 --> 48:38.950] He calls in. [48:39.130 --> 48:40.630] No, let's meet and have some coffee. [48:40.770 --> 48:41.170] Well, okay. [48:41.910 --> 48:42.350] So... [48:42.950 --> 48:44.210] That's why I live in Buenos Aires. [48:48.910 --> 48:54.890] So, Meet.me was a problem because it needed a daddy driver for timing and reasons. [48:54.890 --> 48:57.810] And then you couldn't have more than 20. [48:57.810 --> 49:00.730] Then when CPUs came up, you couldn't have more than 100. [49:00.730 --> 49:02.150] But we want to have a cillion. [49:02.390 --> 49:03.630] Who wants a cillion people? [49:03.770 --> 49:04.310] I don't know. [49:04.450 --> 49:06.550] But everybody wants to be in a Meet Me room. [49:07.150 --> 49:08.210] For some reason. [49:09.150 --> 49:15.310] But here comes ConfBridge, which actually solves everything. [49:15.830 --> 49:23.030] It really nicely takes care of each channel and the bridge in and takes out the channels. [49:23.210 --> 49:26.390] And no more zombie channels and all that thing that were awful. [49:26.690 --> 49:33.970] And more work that we had to deal with and put programs in place to do garbage collection of zombie channels and stuff. [49:35.170 --> 49:39.830] And it was so good that it grew in the community. [49:39.990 --> 49:42.510] And so, basically, they're going, okay, let's bridge everything. [49:45.130 --> 49:49.370] Let's handle things as bridges because, actually, after all, that's what we do, right? [49:49.370 --> 49:51.430] We have channels and we bridge them and we move them. [49:51.590 --> 49:53.310] So, let's have a bridge here. [49:53.310 --> 49:56.950] And when we move a channel, let's keep the bridge, right? [49:57.150 --> 50:01.790] And let's add another one and let's move them over and let's clone bridges. [50:01.790 --> 50:04.810] And that's been growing, sorry. [50:05.050 --> 50:11.730] So, if I were you, I would look into bridges and the Astros community. [50:13.090 --> 50:14.190] We're done with time. [50:14.390 --> 50:15.590] Oh, no, I'm sorry. [50:15.670 --> 50:17.530] We have at least two times, yeah. [50:17.950 --> 50:18.930] Two minutes, sorry. [50:19.090 --> 50:20.790] I have cases and stuff, but... [50:22.950 --> 50:23.750] Any questions? [50:24.190 --> 50:24.610] Sorry. [50:24.950 --> 50:25.950] Let me move. [50:26.170 --> 50:27.750] Let me jump to... [50:28.450 --> 50:30.330] Let me jump to... [50:31.410 --> 50:34.710] We're going to have to end the session soon so we can bring in the next session. [50:37.190 --> 50:37.550] Question? [50:37.730 --> 50:45.570] Gus now will be going out the door and then to the right, for people who want to swap business cards with us so that we can let the next session come in. [50:46.270 --> 50:47.710] And thank you very much for your time. [51:06.180 --> 51:07.140] Sorry about that. [51:07.440 --> 51:07.900] I...