Qu'est-ce qu'on fait?
Nous écrirons un simple robot de télégramme qui répond avec le même message que celui qui a été envoyé.

Pourquoi AWS Lambda?
Commodité de déploiement, il suffit d'écrire
sls deploy
et lambda est déjà déchargé
Vous ne payez que pour le temps d'exécution de lambda
Pas besoin de configurer de serveurs et de vous soucier de la mise à l'échelle
De quoi avez-vous besoin?
Installé go
Nodejs et npm pour installer sans serveur
Compte AWS pour le déploiement
TLDR
Cloner le référentiel https://github.com/R11baka/echotgbot
Définissez une variable dans le fichier .env BOT_TOKEN
Compiler le binaire
env GOOS=linux go build -o bin/webhook main.go
Déchargement du lambda avec
sls deploy
Installation du webhook avec BOT_TOKEN
Inscrivez-vous avec AWS
AWS aws console aws_access_key_id, aws_secret_access_key .aws/credentials
.aws/credentials
cat ~/.aws/credentials [default] aws_access_key_id = ADEFEFEFFEBDXK3 aws_secret_access_key = Zy6ewfir/zGaT1B2/o9JDWDSssdrla region = us-west-1
, BotFather. , BotFather /newbot
, , . , BotFather . , .
Serverless
Serverless- framework, , AWS Lambda . node, nodejs npm. serverless npm
npm install -g serverless
serverless ,
sls -v Framework Core: 2.35.0 (standalone) Plugin: 4.5.3 SDK: 4.2.2 Components: 3.8.2
serverless. serverless serverless.yml ,
service: echoBot
useDotenv: true
configValidationMode: error # , ,
frameworkVersion: '>=1.28.0 <2.50.0'
provider:
region: "us-west-1"
lambdaHashingVersion: "20201221"
name: aws
runtime: go1.x
logRetentionInDays: 30 #
endpointType: regional
tracing: #
apiGateway: true
lambda: true
iam:
role:
statements:
- Effect: "Allow"
Resource: "*"
Action:
- "xray:*"
package:
patterns:
- "bin/webhook" #
functions:
webhook:
handler: bin/webhook
timeout: 15
description: simple echo bot
memorySize: 128 #
environment:
BOT_TOKEN: ${env:BOT_TOKEN}
events:
- http:
path: /webhook
method: ANY
cors: false
Go
telebot.v2 aws-lambda-go
➜ go mod init testBot go: creating new go.mod: module testBot ➜ go get -u gopkg.in/tucnak/telebot.v2 go: gopkg.in/tucnak/telebot.v2 upgrade => v2.3.5 go: github.com/pkg/errors upgrade => v0.9.1 ➜ go get github.com/aws/aws-lambda-go go: github.com/aws/aws-lambda-go upgrade => v1.23.0
2. main.go
package main
import (
"encoding/json"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
tb "gopkg.in/tucnak/telebot.v2"
"os"
)
func main() {
settings := tb.Settings{
Token: os.Getenv("BOT_TOKEN"),
Synchronous: true,
Verbose: true,
}
tgBot, err := tb.NewBot(settings)
if err != nil {
fmt.Println(err)
panic("can't create bot")
}
tgBot.Handle(tb.OnText, func(m *tb.Message) {
message := m.Text
tgBot.Send(m.Sender, message)
})
lambda.Start(func(req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
var u tb.Update
if err = json.Unmarshal([]byte(req.Body), &u); err == nil {
tgBot.ProcessUpdate(u)
}
return events.APIGatewayProxyResponse{Body: "ok", StatusCode: 200}, nil
})
}
tucnak/telebot.v2 , return return events.APIGatewayProxyResponse{Body: "ok", StatusCode: 200}, nil
, .
Deploy
.env API_TOKEN BotFather
echo API_TOKEN={API_TOKEN_FROM_BOTFATHER} > .env
serverlss . .
sls print
env GOOS=linux go build -o bin/webhook main.go
serverless
serverless deploy -v
,
Service Information service: echoBot stage: dev region: us-west-1 stack: echoBot-dev resources: 11 api keys: None endpoints: ANY - https://y7p31bwnu1.execute-api.us-west-1.amazonaws.com/dev/webhook functions: webhook: echoBot-dev-webhook layers: None
https://y7p31bwnu1.execute-api.us-west-1.amazonaws.com/dev/webhook => token , webhook
Intégration avec télégramme
Il reste à indiquer au télégramme quel point d'extrémité tirer lors de la réception d'un message. Ceci est fait par la commande setWebhook
curl https://api.telegram.org/bot{YOUR_TOKEN}/setWebhook?url={YOUR_DEPLOYED_AWS_URL}
La vérification de l'installation du webhook se fait à l'aide de getWebhookInfo
➜ ~ curl https://api.telegram.org/bot1324913549:AAE1zYMH6K3hF2TOgUQoIP-E1g4rMIamck/setWebhook\?url\= https://y7p31bwnu1.execute-api.us-west-1.amazonaws.com/dev/webhook
{"ok":true,"result":true,"description":"Webhook was set"}
➜ ~ curl https://api.telegram.org/bot1324913549:AAE1zYMH6K3hF2TOgUQoIP-E1g4rMIamck/getWebhookInfo
{"ok":true,"result":{"url":"https://y7p31bwnu1.execute-api.us-west-1.amazonaws.com/dev/webhook","has_custom_certificate":false,"pending_update_count":0,"max_connections":40,"ip_address":"184.169.148.254"}}
les erreurs
En cas de problème, accédez à CloudWatch et consultez les journaux, ou vous pouvez également afficher les journaux à partir de la console
sls logs -f webhook