【aws-系统】简单的SNS到电报通知机器人
动机
我已经使用此设置几个月了,这是我的用例:
- 预定的提醒。我有一些安排好的CloudWatch Events,以提醒我有关各种日常活动以及我从文章和书籍中保存的想法数据库中的随机推销的信息。
- 应用程序警报。我从AWS Amplify Console获得构建警报,从CloudWatch获得警报,并从CloudFormation获得堆栈创建通知。
- 一次性的东西很奇怪。我需要一种机制来跟踪特定网页上的更新,因此我编写了一个Lambda,每5分钟抓取一次它,并在发生更改时向我发送警报。
建筑
这就是我们将要建立的。我们将有一个SNS主题,该主题可以接收事件并将其发布到Lambda函数。Lambda将发布到Telegram。看起来很简单,但是将这些通知设为私有存在一些陷阱。

1.创建一个电报机器人
首先,我们需要在Telegram中创建一个新的bot。为此,我们需要使用BotFather,它是创建其他机器人的第一方Telegram机器人。
在Telegram中,找到@botfather或直接转到http:// t. me/botfather与BotFather进行对话。BotFather头像看起来有点像亚伯拉罕·林肯(Abraham Lincoln),名字旁边带有蓝色的“已验证”对勾。确保您使用的是官方漫游器,而不是任何使用类似用户名的骗局!
要创建机器人,请发送/newbot给BotFather并按照说明进行操作。完成设置后,BotFather将向您发送用于将消息发布到机器人的令牌。复制以红色突出显示的令牌,以后将需要它。

2.获取您的电报用户ID
要专门针对您与机器人的私人聊天发布通知,您需要知道您的用户ID。除了人类使用的@username之外,Telegram用户还具有数字ID。Telegram Bot API只能与数字ID一起使用。
这部分有点棘手,因为没有机制可以从应用程序本身获取用户ID。但是使用Telegram Bot API很容易。
2.1与机器人开始对话。(或者加群,看群号)
通过用户名找到您的新机器人,例如,在我使用的情况下@SNSTelegramNotifierBot。向机器人发送内容以发起对话。

2.2。使用Telegram Bot API检索消息
我们刚刚发送的消息在Telegram后端创建了一个聊天室,现在我们可以使用Telegram Bot API检索该消息并查看相关的元数据,包括数字用户ID。为此,我们将getUpdates通过从Web浏览器发送一个简单的请求来使用Telegram的方法。
使用以下格式撰写网址:https://api.telegram.org/botTOKEN/getUpdates。
它应该看起来像这样。
https://api.telegram.org/bot123456789:kjlfjksdfhhsdlkfhksjFKJHFJ/getUpdates
重要提示:不要忘记bot令牌之前的前缀。否则,它将无法正常工作。
现在,在浏览器中打开此URL。
2.3。从消息中获取用户标识
在浏览器中打开此URL时,您应该返回一个JSON,其中包含您刚发送的消息以及一堆有关聊天的元数据。用户ID [result][message][from][id]位于代码段中突出显示的行中。请注意,对于私人聊天,第17行中的聊天ID与第9行中的用户ID匹配。保存用户ID值,以后我们将需要它。
{
"ok": true,
"result": [
{
"update_id": 123456789,
"message": {
"message_id": 112,
"from": {
"id": 987654321,
"is_bot": false,
"first_name": "Firstname",
"last_name": "Lastname",
"username": "username",
"language_code": "en"
},
"chat": {
"id": 987654321,
"first_name": "Firstname",
"last_name": "Lastname",
"username": "username",
"type": "private"
},
"date": 1553317998,
"text": "test"
}
}
]
}
3.创建一个SNS主题
转到AWS管理控制台>简单通知服务>主题> 创建主题。给它起一个名字,然后单击“创建主题”。
4.创建一个Lambda函数
4.1。创建一个功能
转到AWS管理控制台> Lambda> 创建功能。给函数命名,然后选择Python 3.7运行时。单击创建功能。
4.2。配置环境变量
滚动到“ 环境变量”部分,TOKEN并USER_ID使用前面步骤中的值创建变量。我们这样做是为了避免将这些变量存储在代码中。理想情况下,您不应将令牌存储在环境变量中,而应使用AWS Secrets Manager。
4.3。粘贴代码
将以下代码段粘贴到“ 功能代码”部分,然后单击“ 保存”。
import json
import os
import logging
from botocore.vendored import requests
# Initializing a logger and settign it to INFO
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Reading environment variables and generating a Telegram Bot API URL
TOKEN = os.environ['TOKEN']
USER_ID = os.environ['USER_ID']
TELEGRAM_URL = "https://api.telegram.org/bot{}/sendMessage".format(TOKEN)
# Helper function to prettify the message if it's in JSON
def process_message(input):
try:
# Loading JSON into a string
raw_json = json.loads(input)
# Outputing as JSON with indents
output = json.dumps(raw_json, indent=4)
except:
output = input
return output
# Main Lambda handler
def lambda_handler(event, context):
# logging the event for debugging
logger.info("event=")
logger.info(json.dumps(event))
# Basic exception handling. If anything goes wrong, logging the exception
try:
# Reading the message "Message" field from the SNS message
message = process_message(event['Records'][0]['Sns']['Message'])
# Payload to be set via POST method to Telegram Bot API
payload = {
"text": message.encode("utf8"),
"chat_id": USER_ID
}
# Posting the payload to Telegram Bot API
requests.post(TELEGRAM_URL, payload)
except Exception as e:
raise e
鸣谢:此代码是部分基于安德里Dvoiak的岗位上HackerNoon
4.4。添加SNS触发器
在“ 设计器”部分的“ 添加触发器”下,选择“ SNS” 。
选择您在步骤3中创建的主题,然后单击添加。再次保存功能。
配置现已完成!
5.测试
返回SNS控制台并打开您在步骤3中创建的主题。单击发布消息。
在“ 消息”正文中键入要发送到端点的内容,然后单击“ 发布消息”。
您将立即在电报中看到该消息。

【aws-系统】简单的SNS到电报通知机器人的更多相关文章
- Java消息系统简单设计与实现
前言:由于导师在我的毕设项目里加了消息系统(本来想水水就过的..),没办法...来稍微研究研究吧..简单简单... 需求分析 我的毕设是一个博客系统,类似于简书这样的,所以消息系统也类似,在用户的消息 ...
- PNotify – 简单易用的 JS 通知,消息提示插件
PNotify 是一个 JavaScript 通知插件,前身为 Pines Notify.它旨在提供无与伦比的灵活性,同时很容易使用.它可以提供无阻塞的通知,允许用户无需关闭通知或者提示信息就可以点击 ...
- Ubuntu学习笔记-win7&Ubuntu双系统简单搭建系统指南
win7&Ubuntu双系统简单搭建系统指南 本文是自己老本子折腾Ubuntu的一些记录,主要是搭建了一个能够足够娱乐(不玩游戏)专注练习自己编程能力的内容.只是简单的写了关于系统的安装和一些 ...
- 用django创建一个简单的sns
用django创建一个简单的sns 1.首先创建一个工程newsns django-admin.py startproject newsns 在工程目录下新建一个文件夹templates,在该文件夹下 ...
- SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...
- 39条常见的Linux系统简单面试题
39条常见的Linux系统简单面试题 本文主要分享39条常见的Linux系统简单面试题,其中包括如何看当前Linux系统有几颗物理CPU和每颗CPU的核数.如何实时查看网卡流量为多少等等,希望对你有所 ...
- 实验二:Linux系统简单文件操作命令
項目 内容 这个作业属于哪个课程() 课程链接 这个作业的要求在哪里 实验要求 学号-姓名 17043133-木腾飞 作业学习目标 学习在Linux系统终端下进行命令行操作: 学习掌握常用命令行操作并 ...
- ftp客户端自动同步 Windows系统简单操作ftp客户端自动同步
服务器管理工具它是一款功能强大的服务器集成管理器,包含win系统和linux系统的批量连接,vnc客户端,ftp客户端等等实用功能.我们可以使用这款软件的ftp客户端定时上传下载的功能来进实现ftp客 ...
- 钉钉通知机器人与SpringBoot的集成
Spring Boot Admin 集成自定义监控告警(2.0.1版本)------钉钉机器人 - yuancao24的博客 - CSDN博客https://blog.csdn.net/yuancao ...
随机推荐
- 微信小程序日期时间选择器(精确到秒)
<picker mode="multiSelector" value="{{dateTime1}}" bindchange="changeDat ...
- 有钱人买钻石+dfs中使用贪心
有钱人买钻石 ECNU-3306 题解:这个题目,乍一看以为是dp背包,可是数据量却那么大,只有1,5,10,25四种面额的硬币,每种数量若干,要使得能够刚好兑换成功总金额,在此前提下,还要使得硬币数 ...
- IDEA中部署servlet
配置和不是servlet 第一种方法:(两种方法不能混用,使用第一种方法后,尽量删除第二种方法的注解方式) 使用xml文件配置: name没有什么特别的,就是需要统一即可.url-pattern中的地 ...
- Java基础:特性write once;run anywhere!
三高:高可用 高性能 高并发 特性: 简单性 面向对象:万物皆为对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 Java三大版本 javaSE:标准版(桌面程序,控制台) javaME ...
- C指针与二维数组
先贴上完整的代码: #include<stdio.h> int main(int argc, char *argv[]){ int a[3] [5]={1,2,3,4,5,6,7,8,9, ...
- java IO NIO BIO 最权威的总结
1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 1.4 总结 2. NIO (New I/O) 2.1 NIO 简介 2.2 NIO的特性/N ...
- Linux 三剑客之 awk 实战详解教程
我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...
- x86汇编 条件跳转
条件跳转表 汇编语言-条件跳转指令 直接转移指令 指令格式 机器码 测试标志 条件说明 符号 JO OPR 70 OF=1 结果有溢出 JNO OPR 71 OF= ...
- go语言的初体验
分享最近学习 Go 语言的心得和体会,适合有编程基础的人,因为这里只做经验性的总结概述,不做基础教学的入门知识讲解,如果想要学习编程语言的基础知识,请出门左转进入官方文档,查看基础教学文档. Go 概 ...
- 浏览ASP.NET网页(6)
当我们搭建好了IIS后,就不需要开发工具进行编译打开网站啦,我们可以在IIS下进行预览,如图所示: 需要注意的是,网页的后缀名是.aspx,不是.cs






