I love it that he uses the payphone to talk to his daughter's phone in her room... or rather that she uses her phone to call him ;) I also just set up a private phone network in my house, and my daughter can also call my room, from her bedroom. But it spiraled very quickly into something more evolved & more fun.

It all started when I discovered after buying our new house that most rooms were pre-wired with RJ11 outlets, with all the lines going to a central closet. So one day I bought a cheap 8-port PBX for $80 (https://www.amazon.com/dp/B015MIQ12A) and bought a classic rotary phone for my daughter's room, and a regular phone for our room. The PBX needed no configuration whatsoever, it comes with the ports assigned extensions 601, 602, etc, so right away my daughter was elated she could call us from her room by just dialing "601" or whatever. It's important to note we do not have a landline; the PBX's outgoing lines were left unconnected, so it was purely a private phone network. The PBX could also be configured so it auto-dials an extension as soon as the phone is picked up. But I wanted my daughter to learn how to use a rotary dial so I didn't use that feature. As a side note, the "phone line simulator" that the OP uses is basically a minimalist 2-port PBX with no outgoing line.

But I thought, how hard is it to replace the PBX with an Asterisk VOIP system? So I replaced the PBX with a $140 Analog Telphone Adapter (also 8 ports: https://www.amazon.com/dp/B07B6TL7N6), I configured the ATA to route calls via SIP to my Linux gateway, on which I installed Asterisk. I wrote a simple Asterisk config defining even shorter extensions so my daughter only has to dial "1" or "2" instead of "601" or "602". Then I set up some extensions that play recorded audio files, like songs, or sweet messages we recorded to each other.

Then, later I thought it might be practical for my daughter to be able to call my cellphone (in case of emergencies or whatnot). So I searched for VOIP providers, found https://voip.ms/ and signed up for an account. I configured Asterisk to place outgoing calls through this provider. And I defined new extensions: 3 rings my cellphone, and 4 rings my wife's cellphone, while the other extensions work just as before (eg. 1 still rings our bedroom.) But I specifically did NOT configure Asterisk to be able to place outgoing calls to arbitrary numbers. So the internal phones are only able to call my predefined extensions.

And again later I thought it might be practical to be able to call her bedroom phone from my cellphone. So I added a DID number (direct inward dialing) to my voip.ms account. Then I configured Asterisk to accept incoming calls from voip.ms, then prompt for an extension, and forward the call accordingly. So when I call the number, I hear "please dial an extension", then I can type 2, and my daughter's phone rings.

In order to avoid spam calls, I made Asterisk check the caller ID and accept calls coming ONLY from my cellphone or from my wife's cellphone. (I'm well aware that caller ID can be spoofed, in fact I have spoofed it myself a few times with my setup as a demonstration to family & friends.) In the 2 months since I bought the DID number I did not see a single call intercepted by my caller id filter. So it looks like I got a pretty "clean" number. I understand that I might not have been that lucky.

And that's basically where I'm at today. We have a mostly private in-home phone network, that can also call our cellphones, and our cellphones only are allowed to call into the house phone system.

Our daughter will call us in the morning when she wakes up to say what she wants for breakfast. When her cousins visit, they chat on the phone from room to room. It's fun!

As someone who knew nothing about Asterisk, I found the official documentation utterly mediocre. The process of configuring it consisted mostly of finding real-world examples, then trying to reverse engineer them by finding what they do from the documentation. But in the end I still got everything to work exactly the way I wanted it.