Go to file
2020-01-19 19:27:41 +03:00
examples Move sessions to subfolder. 2020-01-15 00:39:41 +03:00
src Session management rewrite 2020-01-19 19:27:41 +03:00
.env.example Small fixes 2019-12-08 15:46:54 +03:00
.gitignore Update composer. Get madeline via custom loader. 2019-12-03 02:33:40 +03:00
bootstrap.php Dotenv upgrade to v4 2020-01-01 01:44:44 +03:00
composer.json Session management rewrite 2020-01-19 19:27:41 +03:00
composer.lock Session management rewrite 2020-01-19 19:27:41 +03:00
config.php Session management 2020-01-19 06:17:14 +03:00
LICENSE Initial commit 2018-12-24 14:48:21 +03:00
README.md Session management rewrite 2020-01-19 19:27:41 +03:00
server.php Session management rewrite 2020-01-19 19:27:41 +03:00

TelegramApiServer

Fast, simple, async php telegram api server: MadelineProto and AmpPhp Server

Features

  • Fast async amp http server
  • Full access to telegram api: bot and user
  • Multiple sessions
  • Stream media (view files in browser)
  • Websocket endpoint for events

Architecture Example Architecture Example

Installation

  1. Git clone this repo

  2. composer install -o --no-dev to install required libs

  3. Create .env from .env.example

  4. Fill variables in .env

  5. Get app_id and app_hash at my.telegram.org or leave blank. MadelineProto will generate them on start.

    Optional:

  6. 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

  1. Run server/parser

    usage: php server.php [--help] [-a=|--address=127.0.0.1] [-p=|--port=9503] [-s=|--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)
                        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)
    
  2. Access telegram api directly with simple GET/POST requests.

    Its recommended to use http_build_query for GET 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 to API_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 or http://127.0.0.1:9503/api/getInfo/?abcd=@xtrime works the same

    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

Advanced features

  • 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 and sessions/users/user1.madeline
    • glob syntax for sessions:
      • --session=* to use all sessions/*.madeline files.
      • --session=users/* --session=bots/* to use all session files from sessions/bots and sessions/users folders.
  • Session management Session can be added and removed while server is running.

    Examples:

    • Adding session: http://127.0.0.1:9503/system/addInstance?session=users/xtrime
    • Removing session: http://127.0.0.1:9503/system/removeInstance?session=users/xtrime

    If there is no authorization in session, or session file is blank, authorization required:

    User:

    • http://127.0.0.1:9503/api/users/xtrime/phoneLogin?phone=+7123...
    • http://127.0.0.1:9503/api/users/xtrime/completePhoneLogin?code=123456
    • (optional) http://127.0.0.1:9503/api/users/xtrime/complete2falogin?password=123456
    • (optional) http://127.0.0.1:9503/api/users/xtrime/completeSignup?firstName=MyExampleName

    Bot:

    • http://127.0.0.1:9503/combinedApi/botLogin?token=34298141894:aflknsaflknLKNFS
  • 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

Contacts

  • Telegram: @xtrime
  • Email: alexander(at)i-c-a.su
  • Donations:
    • BTC: 1BE1nitXgEAxg7A5tgec67ucNryQwusoiP
    • ETH: 0x0e2d369E28DCA2336803b9dE696eCDa50ff61e27