Reputation: 551
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?
Upvotes: 44
Views: 154588
Reputation: 319
to get smileys and emojis.. you can always reference this emoji documentation for DEVs https://carpedm20.github.io/emoji/
Upvotes: 0
Reputation: 61
IMPORTANT THING:
No one said it.
You have to use double quote, not single ones.
Code below will give you just text: \xF0\x9F\x98\x822021-11-21 09:54:25
define('TELEGRAM_TOKEN', '9999999999:FFFFFFFFFFFFraxb6jajm8cDlKPOH-FFFFFFF');
define('TELEGRAM_CHATID', '@my_bot');
message_to_telegram('\xF0\x9F\x98\x82' . 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("\xF0\x9F\x98\x82" . date('Y-m-d H:i:s'));
Upvotes: 3
Reputation: 128
You need to json_decode unicode value first, try like this.
json_decode('"\ud83d\ude0a"')
Upvotes: 1
Reputation: 42354
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. 😎
Upvotes: 0
Reputation: 777
You just to use the \u
and the unicode literal like following:
😀
$emojie = "\u{1F600}";
Resource: https://stackoverflow.com/a/33548423/8760592
Upvotes: 5
Reputation: 417
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:
Upvotes: 7
Reputation: 382
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)
Upvotes: 1
Reputation: 3834
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 = '\xF0\x9F\x98\x81';
$telegramReadyResponse = 'Hi user ' . telegram_emoji($utf8emoji);
Upvotes: 10
Reputation: 31
Just another choice $curl .... -F text="😁" -F parse_mode=html .... "https://api.telegram.org/botTOKEN/sendMessage"
will enable parse_mode to html and use HTML hexadecimal (hex) reference(😁) for unicode U+1F601
Upvotes: 0
Reputation: 131
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"
Upvotes: 5
Reputation: 11
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.
Upvotes: 1
Reputation: 973
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.
Upvotes: 4
Reputation: 30805
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.
Upvotes: 1
Reputation: 590
you need to specify emoji's unicode value.
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.
Upvotes: 22
Reputation:
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:
😁 \xF0\x9F\x98\x81 GRINNING FACE WITH SMILING EYES
😉 \xF0\x9F\x98\x89 WINKING FACE
Upvotes: 64