skip to Main Content

I need to send messages containing emoji with my Telegram Bot.

So I copy/paste emoji code :nine: for example, in my message text and send it to a user, BUT emoji didn`t work.

This is my sample code and function:

function tel_send($key, $t, $c)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.telegram.org/bot" . $key . "/sendMessage");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "cache=" . (time() / rand(1, time() - 100)) . "&text=" . $t . "&chat_id=" . $c);
    $ss = curl_exec($ch);
    curl_close($ch);
    return $ss;
}
tel_send($key, "My number - :nine:", $val['message']['chat']['id']);

So, my question is: How can I send emoji by Telegram bot?

15

Answers


  1. you need to specify emoji’s unicode value.

    check here

    these are returned by a function as emoji value like u’U000026C4′ which is snowman. although it is in python, you can apply it for php.

    Login or Signup to reply.
  2. I faced the same issue a few days ago..
    The solution is to use Bytes (UTF-8) notation from this table:
    http://apps.timwhitlock.info/emoji/tables/unicode

    examples:

    😁 xF0x9Fx98x81 GRINNING FACE WITH SMILING EYES

    😉 xF0x9Fx98x89 WINKING FACE

    Login or Signup to reply.
  3. An addition to this answer https://stackoverflow.com/a/31431810/1114926.

    The link that Mustafa provided doesn’t represent all emoji. This source is better http://emojipedia.org/ ☝️. It has variations of emoji in addition to the major sign.

    Login or Signup to reply.
  4. Real solution is to use https://github.com/spatie/emoji (composer require spatie/emoji) for Emoji codes. Now your code will look like

    Emoji::CHARACTER_EYES
    

    or

    Emoji::eyes()
    

    This is something you could really use. Unlike writing all the codes manually and having hard time understanding what is it on the first glance.

    Login or Signup to reply.
  5. See emojis and their UTF-8 codes here:
    http://apps.timwhitlock.info/emoji/tables/unicode

    Then you must convert UTF-8 codes to Telegram-ready response text with the following code:

    <?php
    
    function telegram_emoji($utf8emoji) {
        preg_replace_callback(
            '@\x([0-9a-fA-F]{2})@x',
            function ($captures) {
                return chr(hexdec($captures[1]));
            },
            $utf8emoji
        );
    
        return $utf8emoji;
    }
    
    $utf8emoji = 'xF0x9Fx98x81';
    
    $telegramReadyResponse = 'Hi user ' . telegram_emoji($utf8emoji);
    
    Login or Signup to reply.
  6. I have been looking for an answer for this for a long time, but could not get it working. my scripting skills are poor and converting php answers to bash proved a challenge.

    But, nonetheless I got it working with a most simple solution:
    I went to telegram desktop messenger, there i send the required emoji (🚌).

    Than I made a variable: bus=”🚌”

    Now I can use the variable in the curl as: “text=some text $bus”

    This works great using bash on linux, I suppose it could also work in php.

    Login or Signup to reply.
  7. I am using this code at linux bash and curl command for grinning face

    curl -X POST "https://api.telegram.org/botTOKEN/sendMessage" -d "chat_id=ID&text=%F0%9F%98%80&parse_modwarninge=Markdown"
    
    Login or Signup to reply.
  8. Just another choice
    $curl …. -F text=”&#x1F601″ -F parse_mode=html …. “https://api.telegram.org/botTOKEN/sendMessage

    will enable parse_mode to html and use HTML hexadecimal (hex) reference(&#x1F601) for unicode U+1F601

    Login or Signup to reply.
  9. You can just copy emojy from telegram and paste in text to send like 🏠

    $bot_url    = "https://api.telegram.org/bot$apiToken/";
    $url        = $bot_url . "sendPhoto?chat_id=@Your chanel user";
    
    $post_fields = array(
        'chat_id'   => $chat_id,
        'caption'   => 'Test caption 🏠',
        'photo'     => new CURLFile(realpath("logo.jpg"))
    );
    
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Content-Type:multipart/form-data"
    ));
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
    $output = curl_exec($ch);
    

    another way you can use the name of shap ,for example for home you can use :house:
    example:

    :phone:
    :white_check_mark:
    :factory:
    :page_with_curl:
    
    Login or Signup to reply.
  10. Easiest way is to just copy and past the emoji you need in your code.
    But then you will have to make sure your source code files are stored UTF8

    I just opened Telegram on my system and copied the ones I needed and never looked back 🙂 Funny thing is that I do not have to work with constants, specific names
    or the unicode character value. I can directly see what emoji is used IN MY EDITOR.

    $message = 'Pointing down: 👇';
    

    If you process that into a message (example above is PHP, but I guess it will work in any programming language)

    Login or Signup to reply.
  11. > PHP 7

    You just to use the u and the unicode literal like following:

    😀

    $emojie = "u{1F600}";
    

    Resource: https://stackoverflow.com/a/33548423/8760592

    Login or Signup to reply.
  12. Note that, at least with JavaScript/Node.js, you can just paste the emoticon’s directly into the code and they translate find into the Telegram API. EG. 😎

    Login or Signup to reply.
  13. You need to json_decode unicode value first, try like this.

    json_decode('"ud83dude0a"')
    
    Login or Signup to reply.
  14. IMPORTANT THING:

    No one said it.

    You have to use double quote, not single ones.
    Code below will give you just text: xF0x9Fx98x822021-11-21 09:54:25

    define('TELEGRAM_TOKEN', '9999999999:FFFFFFFFFFFFraxb6jajm8cDlKPOH-FFFFFFF');
    
    define('TELEGRAM_CHATID', '@my_bot');  
    
    message_to_telegram('xF0x9Fx98x82' . date('Y-m-d H:i:s'));
    
    function message_to_telegram($text)
    {
        $ch = curl_init();
        curl_setopt_array(
            $ch,
            array(
                CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage',
                CURLOPT_POST => TRUE,
                CURLOPT_RETURNTRANSFER => TRUE,
                CURLOPT_TIMEOUT => 10,
                CURLOPT_POSTFIELDS => array(
                    'chat_id' => TELEGRAM_CHATID,
                    'text' => $text,
                ),
            )
        );
        curl_exec($ch);
    }
    

    But with double quotes you’ll get emoji:

    message_to_telegram("xF0x9Fx98x82" . date('Y-m-d H:i:s'));
    
    Login or Signup to reply.
  15. to get smileys and emojis.. you can always reference this emoji documentation for DEVs
    https://carpedm20.github.io/emoji/

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search