feat: add Telegram file attachment support (inbound + outbound)
Inbound:
- tg-ingest detects document/photo/audio/video/voice attachments
- Downloads files via Telegram Bot API (getFile + download)
- Inlines small text files (<50KB) directly in the prompt
- Stores binary/large files to S3 (attachments/{chat_id}/{update_id}/{filename})
- agent-runner appends file context to the AgentCore prompt
Outbound:
- New send_file tool for the agent to send documents back to users
- TelegramAdapter.send_document uses multipart/form-data POST
- CDK grants tg-ingest S3 write access and passes bucket name env var
This commit is contained in:
@@ -184,6 +184,18 @@ def handler(event, context):
|
||||
]
|
||||
prompt = f"You have {len(records)} queued messages:\n" + "\n".join(lines)
|
||||
|
||||
# ── Attach file context if present ────────────────────────────────────
|
||||
attachment = first.get('attachment')
|
||||
if attachment:
|
||||
file_name = attachment.get('file_name', 'unknown')
|
||||
if 'inline_content' in attachment:
|
||||
prompt += f"\n\n[Attached file: {file_name}]\n```\n{attachment['inline_content']}\n```"
|
||||
elif 's3_key' in attachment:
|
||||
s3_ref = f"s3://{attachment['s3_bucket']}/{attachment['s3_key']}"
|
||||
prompt += f"\n\n[Attached file: {file_name} ({attachment.get('mime_type', '')}) — stored at {s3_ref}]"
|
||||
elif 'error' in attachment:
|
||||
prompt += f"\n\n[Attachment {file_name} could not be processed: {attachment['error']}]"
|
||||
|
||||
# ── Build payload for AgentCore Runtime 1 ────────────────────────────
|
||||
payload: dict[str, Any] = {
|
||||
'prompt': prompt,
|
||||
|
||||
Reference in New Issue
Block a user