2019-06-09 19:47:46 +02:00
# TelegramApiServer
2019-06-09 19:18:49 +02:00
Fast, simple, async php telegram api server:
[MadelineProto ](https://github.com/danog/MadelineProto ) and [AmpPhp ](https://github.com/amphp/amp ) Server
2019-01-07 13:24:29 +01:00
2019-06-02 18:22:03 +02:00
* Online server for tests: [tg.i-c-a.su ](https://tg.i-c-a.su )
* My content aggregator: [i-c-a.su ](https://i-c-a.su )
* Im using this micro-service with: [my TelegramRSS micro-service ](https://github.com/xtrime-ru/TelegramRSS )
2019-01-07 13:24:29 +01:00
**Features**
2019-06-09 19:18:49 +02:00
* Fast async server
2019-06-09 19:47:46 +02:00
* Full access to telegram api: bot and user
2019-06-02 18:22:03 +02:00
**Example Architecture**
2019-09-10 11:51:37 +02:00
![Proposed Architecture ](https://hsto.org/webt/j-/ob/ky/j-obkye1dv68ngsrgi12qevutra.png )
2019-06-02 18:22:03 +02:00
2019-01-07 13:24:29 +01:00
**Installation**
2019-06-09 19:18:49 +02:00
1. Git clone this repo
2019-11-22 23:58:52 +01:00
1. `composer install -o --no-dev` to install required libs
2019-03-05 15:28:32 +01:00
1. Create .env from .env.example
1. Fill variables in .env
2019-06-09 19:18:49 +02:00
1. Get app_id and app_hash at [my.telegram.org ](https://my.telegram.org/ ) or leave blank.
MadelineProto will generate them on start.
2019-01-07 13:24:29 +01:00
2019-03-05 15:28:32 +01:00
_Optional:_
2019-11-22 23:58:52 +01:00
1. Use supervisor to monitor and restart swoole/amphp servers. Example of `/etc/supervisor/conf.d/telegram_api_server.conf` :
2019-03-05 15:28:32 +01:00
```
2019-11-22 23:58:52 +01:00
[program:telegram_api_server]
2019-11-08 13:41:59 +01:00
command=/usr/bin/php /home/admin/web/tg.i-c-a.su/TelegramApiServer/server.php
2019-03-05 15:28:32 +01:00
numprocs=1
2019-11-08 13:41:59 +01:00
directory=/home/admin/web/tg.i-c-a.su/TelegramApiServer/
2019-03-05 15:28:32 +01:00
autostart=true
autorestart=true
2019-03-12 15:01:22 +01:00
stdout_logfile=none
redirect_stderr=true
2019-03-05 15:28:32 +01:00
```
2019-01-07 13:24:29 +01:00
**Usage**
1. Run server/parser
```
php server.php [--help] [-a|--address=127.0.0.1] [-p|--port=9503]
Options:
--help Show this message
2019-03-19 00:38:32 +01:00
-a --address Server ip (optional) (example: 127.0.0.1)
2019-01-07 13:24:29 +01:00
-p --port Server port (optional) (example: 9503)
2020-01-11 21:53:58 +01:00
-s --session Prefix for session file (optional) (example: xtrime).
Multiple sessions can be used via CombinedAPI. Example "--session=user --session=bot"
If running multiple sessions, then "session" parameter must be provided with every request.
2019-01-07 13:24:29 +01:00
2019-03-19 00:38:32 +01:00
Also options can be set in .env file (see .env.example)
2019-01-07 13:24:29 +01:00
```
2019-01-20 18:20:41 +01:00
1. Access telegram api directly via simple get requests.
2019-02-03 19:17:38 +01:00
Rules:
* All methods from MadelineProto supported: [Methods List ](https://docs.madelineproto.xyz/API_docs/methods/ )
2020-01-12 00:11:18 +01:00
* Url: `http://%address%:%port%/api/[%session%/]%class%.%method%/?%param1%=%val%`
2019-01-20 18:20:41 +01:00
* < b > Important: api available only from ip in whitelist.</ b >
By default it is: `127.0.0.1`
You can add client ip in .env file to `API_CLIENT_WHITELIST` (use json format)
2019-02-03 19:17:38 +01:00
* 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** :
2019-06-21 20:44:20 +02:00
`http://127.0.0.1:9503/api/getInfo/?id=@xtrime` or `http://127.0.0.1:9503/api/getInfo/?abcd=@xtrime` works the same
2020-01-12 00:11:18 +01:00
* CombinedAPI (multiple sessions) support.
If running with multiple sessions use include 'session' in path, before method, to define which session to use for request:
* `php server.php --session=session --session=bot --session=xtrime`
* `http://127.0.0.1:9503/api/xtrime/getSelf`
* `http://127.0.0.1:9503/api/bot/getSelf`
* `http://127.0.0.1:9503/api/session/getSelf`
Each session is store in `{$session}.madeline` file in root folder of library.
2020-01-12 20:25:12 +01:00
* EventHandler updates via websocket. Connect to `ws://127.0.0.1:9503/events` . You will get all events in json.
Each event stored inside object, where key is name of session which created event.
When using CombinedAPI (multiple account) name of session can be added to path of websocket endpoint.
`ws://127.0.0.1:9503/events/session_name` . This endpoint will emmit events only from given session.
PHP websocket client example: [websocket-events.php ](https://github.com/xtrime-ru/TelegramApiServer/blob/master/examples/websocket-events.php )
2019-01-07 13:24:29 +01:00
2019-01-20 18:20:41 +01:00
Examples:
2019-06-21 20:44:20 +02:00
* 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`
2019-02-03 19:17:38 +01:00
* repost: `http://127.0.0.1:9503/api/messages.forwardMessages/?data[from_peer]=@xtrime&data[to_peer]=@xtrime&data[id]=1234`
2019-01-20 18:20:41 +01:00
* get messages from channel/user: `http://127.0.0.1:9503/api/getHistory/?data[peer]=@breakingmash&data[limit]=10`
2019-11-22 23:58:52 +01:00
* get messages with text in HTML: `http://127.0.0.1:9503/api/getHistoryHtml/?data[peer]=@breakingmash&data[limit]=10`
2019-01-22 23:03:36 +01:00
* search: `http://127.0.0.1:9503/api/searchGlobal/?data[q]=Hello%20World&data[limit]=10`
2019-01-20 18:20:41 +01:00
* sendMessage: `http://127.0.0.1:9503/api/sendMessage/?data[peer]=@xtrime&data[message]=Hello!`
2019-01-26 16:55:45 +01:00
* copy message from one channel to other (not repost): `http://127.0.0.1:9503/api/copyMessages/?data[from_peer]=@xtrime&data[to_peer]=@xtrime&data[id][0]=1`
2019-01-07 13:24:29 +01:00
**Contacts**
* Telegram: [@xtrime ](tg://resolve?domain=xtrime )
* Email: alexander(at)i-c-a.su
2019-06-02 18:22:03 +02:00
**Donations**
* BTC: 1BE1nitXgEAxg7A5tgec67ucNryQwusoiP
* ETH: 0x0e2d369E28DCA2336803b9dE696eCDa50ff61e27