php:telegramzabbix调用机器人发送报警消息-电报telegram技巧分享

telegram换行发送消息

有更好的方法!问题是由于URL编码… 您可以使用

\n

使用普通的PHP文本,但将其通报给

urlencode

方法,如下所示:


$txt = urlencode("here is my text.\n and this is a new line \n another new line");

对我有效!

1)假如您在Windows / Linux操作系统中开发代码,只需使用输入文字:


$text = 'test 123 another text';

多数大众同意!

2)假如您的代码在Windows / Linux服务器上运行,则可以使用

PHP_EOL

常量而不是

\n


$text = 'text 123 '.PHP_EOL.'yet another text';

3)假如您搜索独立于操作系统的解决方案,则可以使用

%0A



chr(10)

来实现此目标:


$text = 'text 123 '.chr(10).'yet another text';

对于将来的访问者,我在评述中引用@Dagon答案:

使用

%0A

将在电报信息中进行换行

你应该使用urlencode来解决这个问题:


$text ="sth sth sth sth"; $text = urlencode($text);

全部这些答案同时是“准确”和“错误”。实际上,取决于您拥有的许多输入。比方,假如您有一个文本地区供输入,然后将内容发送给Telegram,假如用户在文本地区中誊写并按回车键,则Telegram中的文本将为


hello\neverybody

不是


hello everybody

实行URL编码不会改变任何内容。经过许多积极后,我发现与将文本地区数据从页面发送到另一页面这一事实发生冲突,从而逃走了一些数据。

我解决的方法是用一个未转义的\ n更换转义的\ n。 以是:


$my_msg = str_replace("\\n","\n",$my_msg);

它可以在Mac,PC等装备上使用文本地区中的文本。

阅读并实验了全部这些答案之后,我只想公布自己的解决方案。我在Laravel 5.8中有一个应用程序,可以通过电子邮件和电报消息发送预订。


$telegramMessage = "<strong>Reservation Request</strong>\n". '<strong>Name:</strong> ' . $reservation->reserv_name . "\n". '<strong>E-mail:</strong> <a href="mailto:' . $reservation->email . '"> ' . $reservation->email . "</a>\n". '<strong>Phone:</strong> ' . $reservation->phone . "\n". '<strong>Reservation Date/Time:</strong> ' . $reservation->reserv_date_time->format('d-m-Y H:i') . "\n". '<strong>Number of people:</strong> ' . $reservation->number_of_people . "\n". '<strong>Message:</strong> ' . $reservation->reserv_message . "\n"; Telegram::sendMessage([ 'chat_id' => env('TELEGRAM_CHAT_ID', ''), 'parse_mode' => 'HTML', 'text' => $telegramMessage, ]);

我或多或少地使用了Telegram API容许的全部html标签。您应该留意\ n必须用双引号引起来。

为制止编码和编码问题,我在代码中使用了这个简单的解决方案:


  • 首先

    ,我通过在&#34; sendMessage&#34;中设置

    parse_mode = HTML

    参数,以HTML格式发送短信。 URL。

  • 然后

    ,我为每个换行插入以下代码:


    <pre>\n</pre>

固然

text

变量在附加到网址之进步行了卷曲转义:


$text = curl_escape($handle, $text);

它大概不像你想要的那样在波斯语等Unicode语言中表现结果! 您可以预备文本并使用它:


$txt = implode("\n", explode('\n', $txt));

对我来说,此解决方案有用: 使用双引号


$message='Hi' $message=$message."\n"; $message=$message.'Guys'

我用这种方法解决了问题:


$txt = 'aaaaaaaaa\nnew line1 \nnewline2'; $parameters = array('chat_id' => $chatId, "text" => $txt); $parameters["method"] = "sendMessage"; echo json_encode($parameters);

在这里试试: https://telegram-bot-sdk.readme.io/docs/sendmessage

众所周知,telegram的机器人还是很好用,并且是免费的,以是这就给监控系统发送报警消息提供了一个非常好的渠道,相信许多小伙伴已经垂涎三尺了,以是空话不多说,直奔主题吧!

zabbix系统底子设置部分此处就直接跳过了,假如需求请参阅 https://blog.51cto.com/183530300/category8.html

此处我们直接从创建机器人开始,固然创建机器人的条件是你要先有一个telegram账号,接下来是在telegram客户端上的操作了

第一步:在搜索栏里直接使用@BotFather打开和telegram官方机器人的对话框

第二步:发送/start

第三步:给自己的机器人取一个名字(需要切合官方的要求:需要以_bot末端,前面的名字是自定义部分)

第四步:当机器人名字切合官方尺度时,就会收到官方发送过来的token,此token肯定要牢记,由于日后需要常常使用的

第五步:将自己的机器人添加到需要吸收报警消息的telegram个人帐号里,要么telegram群组内里

使用 https://api.telegram.org/bot ” 官方发过来token”/getUpdates,获取相应的chat_id,假如机器发个人的,chat是一串纯数字,假如机器人发给群组,chat_id是数据串前带一个-

使用机器人的API向个人telegram账号发消息(提前是你已经添加此机器人为好友了)的调用格式


curl -X POST "https://api.telegram.org/bot"官方发过来token"/sendMessage" -d "chat_id=$contact&text=$message" &&gt;/dev/null


留意:此种方法只能发送单行消息,假如需要换行,只能使用算定的连接符连接需要换行的多行文本

固然只能改进单行消息这是不完美的,那么怎么办了,有方法,那就是使用python封装一下消息请求就可以了,在这里给大家一个我自己实现的過逞脚本


#!/usr/bin/env python -*- coding: utf-8 -*-* @Author: lucker @Date: 2018-06-01 18:59:26 @Last Modified by: lucker @Last Modified time: 2018-06-01 19:09:47 @Description:Zabbix use telegram bot to send message to group** import telegram import sys contact = sys.argv[1] subject = sys.argv[2] content = sys.argv[3] bot = telegram.Bot(token='官方发过来token') chat_id = contact bot.send_message(chat_id=chat_id, text=subject+'\n'+content)


从代码中可以看出,需要安装python库中的一个telegram调用库,才可以实现python调用telegram接口发送消息

只要有了这个可以或许发送多行内容的python脚本,剩下的也就好办了:

第一步:将此脚本放到zabbix服务器上,并授权zabbix账户有实行权限。

第二步:确保你的zabbix服务器python版本是2.7以上,CentOS默认没有这么高的版本,需要手工升级python版本

如有需要,请参阅此博文https://blog.fazero.me/2016/10/13/centos-update-python/

第三步:手动测试使用此脚本发送多行消息,测试示例:python telegram_send_message.py -123456789 主题:测试信息 $’first line\nsecond line\nthird line’

第四步:zabbix的Administration(管理)->Media types(媒介种类)创建一个新的媒介种类,好比:telegram_send_message

第五步:设置需要吸收telegram报警消息的运维职员账户Administration->Users->Media->add->telegram_send_message,添加并启用telegram_send_message这个Media

第六步:创建一个使用telegram发送消息的active(行动),Configuration->Actions->Create action,选择使用对应媒介方法,如适才创建的telegram_send_message,并定义触发此行动的条件。

关于此部分的具体设置過逞,请参阅博文https://blog.51cto.com/183530300/2089051


至此,zabbix调用telegram机器人发送报警消息成功实现,预祝大家设置舒畅,如嘻歡,请转发加点赞!

NVO

2

php telegram telegram-bot

我想通过电报API在一个

<pre>

块或

```

(HTML或贬价剖析模式,我没有偏好)发送消息.

文本是一个带有一些换行符的长字符串.为了便于阅读,我想将其作为代码发送.新行接纳

\n

格式,因此Telegram API可以处置.

但在代码块中我看不到换行符.我已经使用了其他机器人可以在代码块中向我发送一些行,以是我确定它是大概的.

有人可以帮我这个吗?

这是我现在使用的代码:


$url = "https://api.telegram.org/$telegram_apikey/sendMessage?chat_id=$telegram_chatid&parse_mode=Markdown&text=```" . $message ."```"; $telegramResult = file_get_contents($url );

消息是这样的:


-------------------------------------------- \n ------------ IMPORT RESULTS ---------!------- \n -------------------------------------------- \n Product count: 12345 \n Created: 1234 \n Total time: 200 \n -------------------------------------------- \n

本文网址:

http://www.1cm8858.com/d/2020814122631_9977_359254221/home

Ten articles before and after

在2017年拍电报信质报多媒体数字报刊平台-电报telegram技巧分享

telegram下载fordesktop免费(windows)-电报telegram技巧分享

空手来撸币!币圈小白零成本教程详解(电报空投/注册领币离线挖矿)-电报telegram技巧分享

telegram安卓版官方下载-电报telegram技巧分享

【临时用电报停申请1】范文118国网湖南省电力有限公司-电报telegram技巧分享

一次看懂摩斯电码的秘密mBot-电报telegram技巧分享

16个最有趣和最有用的机器人电报telegram-电报telegram技巧分享

搬砖套利骗局爆火币圈盘界警方揭秘全国首例“数字货币案”如何告破-电报telegram技巧分享

北京最早的电报局为什么设在通州?联通戚其功:无线网络智慧城市-电报telegram技巧分享

《歪儿冯骥才》阅读答案.歪儿-电报telegram技巧分享