Skip to content
This repository has been archived by the owner on May 14, 2022. It is now read-only.


Repository files navigation

###Update 2015-12-23:

As i currently have no time to work on this project anymore and telegram released its own bot-api, there won't be many new updates to this project in the future. I will try to go through all currently open issues so there is nothing left in the issue section anymore (even if i need to close some things with wontfix).
If someone wants to takeover this project i am willing to give him push-rights or link to his fork on github/packagist.

If you want to port your project to the new bot-api take a look at the unofficial php-sdk.


php-client for telegram-cli

Packagist Codacy License


  • a running telegram-cli listening on a unix-socket (-S) or a port (-P) and returning all answers as JSON (--json).
    Needs to be configured already (phone-number, etc.).
  • php >= 5.3.0


###Setup telegram-cli telegram-cli needs to run on a unix-socket (-S) or a port (-P), so telegram-cli-client can connect to it. All answers need to be returned as JSON (--json).
You should also start it with -W so the contact-list gets loaded on startup.
For this example we will take the following command (execute it from the dir, where you installed telegram-cli, not the php-client), -d lets it run as daemon.:

./bin/telegram-cli --json -dWS /tmp/tg.sck &

If you run the telegram-cli under another user than your php-script and you are using linux, you need to change the rights of the socket so that the php-script can access it (thanks to dennydai for this!).
For example, add both to a telegram-group and then do

chown :telegram /tmp/tg.sck
chmod g+rwx /tmp/tg.sck

If you never started telegram-cli before, you need to start it first in normal mode, so you can type in your telegram-phone-number and register it, if needed (./bin/telegram-cli).

To stop the daemon use killall telegram-cli or kill -TERM [telegram-pid].

###Install telegram-cli-client with composer In your project-root:

composer require --update-no-dev zyberspace/telegram-cli-client

Composer will then automatically add the package to your project requirements and install it (also creates the composer.json if you don't have one already).
If you want to use the discovery-shell, remove the --update-no-dev from the command.

###Use it

$telegram = new \Zyberspace\Telegram\Cli\Client('unix:///tmp/tg.sck');

$contactList = $telegram->getContactList();
$telegram->msg($contactList[0]->print_name, 'Hey man, what\'s up? :D');

###Use it with the discovery-shell A really easy way to learn the api is by using the embedded discover-shell. You need to install the dev-dependencies for this (composer update --dev).

$ ./discovery-shell.php
-- discovery-shell to help discover a class or library --

Use TAB for autocompletion and your arrow-keys to navigate through your method-history.
Beware! This is not a full-featured php-shell. The input gets parsed with PHP-Parser to avoid the usage of
> $telegram->getContactList();
array(13) {
> $telegram->msg('my_contact', 'Hi, i am sending this from a php-client for telegram-cli.');


To create the docs, just run phpdoc in the the project-root.
An online-version is available at

Supported Commands

You can execute every command with the exec()-method from the RawClient-class, but there are also several command-wrappers available (doc-link) that you should prefer to use (see the example.php).
If you prefer to only use your own command-wrappers instead, just extend the RawClient-class (takes care about the socket-connection and has some helper-methods).

In your command-wrappers or if you use exec() directly, please don't forget to escape the peers (contacts, chat-names, etc.) with escapePeer() and all string-arguments with escapeStringArgument() to avoid errors.


The api of the commands wrappers will definitely change in the future, for example getHistory() only returns the raw answer of the telegram-cli right now and is not really useful. Therefore you should not use this in production yet.

If you still want to use this in your project, make sure you stay at the same minor-version (~0.1.0 or 0.1.* for example).


This software is licensed under the Mozilla Public License v. 2.0. For more information, read the file LICENSE.