Skip to content

Self-hosted contact server for receiving telegram messages.

License

Notifications You must be signed in to change notification settings

dsabre/contact-server

Repository files navigation

Contact server

Self-hosted contact server for receiving telegram messages. Install it, configure it, create a secret key and start receiving messages.

Most used case when you have a site with a contact form and want receive messages in telegram.

Badges

Version License Issues

Run Locally

Clone the project

  git clone [email protected]:dsabre/contact-server.git

Go to the project directory

  cd contact-server

Install dependencies

pnpm install

Start development server

pnpm dev

Start production server

pnpm start

Environment Variables

To run this project, you will need to add the following environment variables to your host server (inside a .env.local file in project root).

You can use pnpm set-config command to interactively create a configuration file.

Example of .env.local file:

# Port where the program will listen
PORT=...

# Telegram bot token
BOT_TOKEN=...

# Telegram chat id where the bot will send messages
CHAT_ID=...

# allowed origin
CORS_ORIGIN=...

# secret passphrase for encode and decode secret keys (see secret key generation section for further details)
CRYPTO_SECRET=...

# google recaptcha secret, used for server-side request validation
RECAPTCHA_SECRET=...

# enable or disable logging
LOG_ENABLED="true|false"

API Reference

Send Telegram message

  POST /send-message
Parameter Type Description
message string Required. The message to send via telegram
secretKey string Required. Your encoded secret key
grecaptchaToken string Required if RECAPTCHA_SECRET is not empty. Token returned from a Google reCAPTCHA challenge
title string The contact request title, if not provided will be used "CONTACT REQUEST!"
extraData object Any extra data you want to send on Telegram message

Usage/Examples

Send message from a client

// the contact server url to call, change it to match your requirements
const sendMessageUrl = 'http://localhost:3000/send-message';

// message to send via Telegram, usually this will be passed via form
const message = 'Hello!!';

// set here any extra data you want to send on Telegram message, here is an example of what I used for my personal site
const extraData = {
    Name: 'John Doe',
    Locale: 'en', 
    Site_theme: 'dark' // <-- underscores will be replaced by spaces
};

// Axios example, but you can use what you want:
axios.post(sendMessageUrl, {
    message:         message.trim(),
    grecaptchaToken: 'TOKEN RETURNED FROM A GOOGLE RECAPTCHA CHALLENGE',
    secretKey:       'YOUR ENCODED SECRET KEY',
    extraData:       extraData
}).then(() => {
    console.log('success');
}).catch(() => {
    console.error('error!');
});

To know the chat id

Before to launch this, write a sample message to the bot.

pnpm get-chat-ids

Generate a new secret key

pnpm get-secret-key

Screenshots

App Screenshot

Authors

🔗 Links

portfolio linkedin twitter github npm

Support me

Buy Me a Coffee

About

Self-hosted contact server for receiving telegram messages.

Topics

Resources

License

Stars

Watchers

Forks