lamerv
lamerv

Reputation: 31

Import Telethon Session AWS Lambda

I am trying to use Telethon with AWS Lambda. More precisely I am trying get messages from some public channels using client object.

Is there a way to import an existing session in AWS Lambda, in order to prevent Telegram/telethon to ask for a validation code (which is not possible to input) ?

Here is the code I am using to try to connect to telegram through telethon in AWS Lambda :

api_id== os.environ.get('TELEGRAM_API_ID')
api_hash = os.environ.get('TELEGRAM_API_HASH')
userName = os.environ.get('TELEGRAM_USERNAME')
phone = os.environ.get('TELEGRAM_PHONE')
os.chdir("/tmp")
client = TelegramClient(userName, api_id, api_hash)

Here is the session file I have imported in AWS Lambda through Layers (same name as userName) session file

But it seems the session file is not used/read as telethon is asking the verification code and phone number.

Anyone know how to fix this ? Thanks

Upvotes: 3

Views: 632

Answers (1)

MBVyn
MBVyn

Reputation: 71

It took some time, but I found a solution to this problem and ran a Telegram client on Lambda)

All you need to do is use a different session type, namely StringSession.

As indicated in the official documentation, all you need to do is generate a StringSession in your local environment, save the string in a file or local variables and use it in your lambda code.

Generate StringSession, you will see the output in your terminal in this case:

from telethon.sync import TelegramClient
from telethon.sessions import StringSession

with TelegramClient(StringSession(), api_id, api_hash) as client:
    print(client.session.save())

Save your newly created StringSession into environment variables in Lambda, as described here and now you can do something like this:

from telethon.sync import TelegramClient
from telethon.sessions import StringSession

import os 

string = os.environ.get('session') # env variable named "session"

with TelegramClient(StringSession(string), api_id, api_hash) as client:
     client.loop.run_until_complete(client.send_message('me', 'Hi'))

Upvotes: 7

Related Questions