Skip to content

I ported this project to Typescript #176

Description

@foureight84

I've been working on this for a while and finally have some spare time to complete. You can find it here. I have been testing it locally with my landline and in the next few days I will be deploying it on my home server using Docker. I don't have a Raspberry Pi on hand (with full working GPIO pins -- the crucial ones are fried) so I can't guarantee the GPIO features were ported correctly (please create tickets with bugs you encounter). You can find the project here: https://github.com/foureight84/CallAttendantNext

This project builds upon the incredible effort Bruce started with functionality improvements and some new features to extend usability.

What's New vs. the Original Python Project

  • Non-blocking call handling — async/await throughout, no blocking main thread
  • Easier debugging — structured log events streamed to the browser via SSE; Debug Console page
  • Piper TTS instead of WAV files — greetings are synthesized on demand from .txt scripts; no per-voice audio files to manage
  • ffmpeg voicemail encoding — recordings saved as MP3 (falls back to WAV if ffmpeg is unavailable)
  • Updated Nomorobo scraping — adapted for their current website format
  • Improved serial port handling — faster modem detection, reduced call response time
  • Raspberry Pi GPIO LED support — toggle via ENABLE_GPIO=true in .env
  • Wild card permitted and block list

What's next:

  • I need to build a migration strategy so that you can import your call logs, blocklist, permitted and voicemails over to the new project. If this is a necessary feature, I would recommend to wait for another week or two and when have this feature implemented.
  • Extending attendant functionalities like checking voicemail from your cellphone. Self-hosting will always be the use case you'll never need to expose this service to the internet. I was thinking of using the traditional way that a few fancy answering machines used to have: calling your landline from another phone to access voicemail. Utilizing Caller ID to enable this menu when set phone number calls and use the key pad to navigate a simple menu to play new voicemails. This wouldn't have been possible with the old implementation but with Piper-TTS we should be able to dynamically generate voice and provide a robust experience.
  • If you have any features you want added, open a "Feature Request" ticket at https://github.com/foureight84/CallAttendantNext and we can discuss feasibility of implementation.
  • Integration with https://www.ipqualityscore.com/ for Caller ID screening as an alternative to NOMOROBO.
  • Integration with Home Assistant

Stack

  • Next.js 15 — frontend and API routes
  • React 19 — settings, call log, whitelist/blacklist, voicemail UI
  • ts-rest + zod — type-safe REST API contract
  • SQLite via drizzle-orm + libsql
  • serialport — serial communication with USB modem
  • Piper TTS — real-time speech synthesis for greetings
  • ffmpeg — voicemail encoding (MP3) and audio conversion
  • Docker — containerized deployment

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions