examples | ||
src | ||
.env.example | ||
.gitignore | ||
bootstrap.php | ||
composer.json | ||
composer.lock | ||
config.php | ||
LICENSE | ||
README.md | ||
server.php |
TelegramApiServer
Fast, simple, async php telegram api server: MadelineProto and AmpPhp Server
- Online server for tests: tg.i-c-a.su
- My content aggregator: i-c-a.su
- Im using this micro-service with: my TelegramRSS micro-service
Features
- Fast async server
- Full access to telegram api: bot and user
Installation
-
Git clone this repo
-
composer install -o --no-dev
to install required libs -
Create .env from .env.example
-
Fill variables in .env
-
Get app_id and app_hash at my.telegram.org or leave blank. MadelineProto will generate them on start.
Optional:
-
Use supervisor to monitor and restart swoole/amphp servers. Example of
/etc/supervisor/conf.d/telegram_api_server.conf
:[program:telegram_api_server] command=/usr/bin/php /home/admin/web/tg.i-c-a.su/TelegramApiServer/server.php numprocs=1 directory=/home/admin/web/tg.i-c-a.su/TelegramApiServer/ autostart=true autorestart=true stdout_logfile=none redirect_stderr=true
Usage
-
Run server/parser
usage: php server.php [--help] [-a=|--address=127.0.0.1] [-p=|--port=9503] [-s=|--session=session] Options: --help Show this message -a --address Server ip (optional) (default: 127.0.0.1) To listen external connections use 0.0.0.0 and fill IP_WHITELIST in .env -p --port Server port (optional) (default: 9503) -s --session Name for session file (optional) (default: session) Multiple sessions can be specified: "--session=user --session=bot" Each session is stored in `sessions/%session%.madeline`. Nested folders supported. See README for more examples. Also options can be set in .env file (see .env.example)
-
Access telegram api directly with simple GET/POST requests.
Rules:-
All methods from MadelineProto supported: Methods List
-
Url:
http://%address%:%port%/api[/%session%]/%class%.%method%/?%param%=%val%
-
Important: api available only from ip in whitelist. By default it is:
127.0.0.1
You can add client ip in .env file toAPI_CLIENT_WHITELIST
(use json format) -
If method is inside class (messages, contacts and etc.) use '.' to separate class from method:
http://127.0.0.1:9503/api/contacts.getContacts
-
If method requires array of values, use any name of array, for example 'data':
?data[peer]=@xtrime&data[message]=Hello!
. Order of parameters does't matter in this case. -
If method requires one or multiple separate parameters (not inside array) then pass parameters with any names but in strict order:
http://127.0.0.1:9503/api/getInfo/?id=@xtrime
orhttp://127.0.0.1:9503/api/getInfo/?abcd=@xtrime
works the same -
CombinedAPI (multiple sessions) support.
When running multiple sessions, need to define which session to use for request. Each session is stored in
sessions/{$session}.madeline
. Nested folders supported.Examples:
php server.php --session=bot --session=users/xtrime --session=users/user1
http://127.0.0.1:9503/api/bot/getSelf
http://127.0.0.1:9503/api/users/xtrime/getSelf
http://127.0.0.1:9503/api/users/user1/getSelf
- sessions file paths are:
sessions/bot.madeline
,sessions/users/xtrime.madeline
andsessions/users/user1.madeline
- glob syntax for sessions:
--session=*
to use allsessions/*.madeline
files.--session=users/* --session=bots/*
to use all session files fromsessions/bots
andsessions/users
folders.
-
EventHandler updates via websocket. Connect to
ws://127.0.0.1:9503/events
. You will get all events in json. Each event is json object in json-rpc 2.0 format. Example:When using CombinedAPI (multiple accounts) name of session can be added to path of websocket endpoint: This endpoint will send events only from
users/xtrime
session:ws://127.0.0.1:9503/events/users/xtrime
PHP websocket client example: websocket-events.php
Examples:
- get_info about channel/user:
http://127.0.0.1:9503/api/getInfo/?id=@xtrime
- get_info about currect account:
http://127.0.0.1:9503/api/getSelf
- repost:
http://127.0.0.1:9503/api/messages.forwardMessages/?data[from_peer]=@xtrime&data[to_peer]=@xtrime&data[id]=1234
- get messages from channel/user:
http://127.0.0.1:9503/api/getHistory/?data[peer]=@breakingmash&data[limit]=10
- get messages with text in HTML:
http://127.0.0.1:9503/api/getHistoryHtml/?data[peer]=@breakingmash&data[limit]=10
- search:
http://127.0.0.1:9503/api/searchGlobal/?data[q]=Hello%20World&data[limit]=10
- sendMessage:
http://127.0.0.1:9503/api/sendMessage/?data[peer]=@xtrime&data[message]=Hello!
- copy message from one channel to another (not repost):
http://127.0.0.1:9503/api/copyMessages/?data[from_peer]=@xtrime&data[to_peer]=@xtrime&data[id][0]=1
-
Contacts
- Telegram: @xtrime
- Email: alexander(at)i-c-a.su
Donations
- BTC: 1BE1nitXgEAxg7A5tgec67ucNryQwusoiP
- ETH: 0x0e2d369E28DCA2336803b9dE696eCDa50ff61e27