Как отправить файлы с помощью Telegram Bots с помощью AWS Lambda? - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь отправить файл mp3 с помощью бота-телеграммы.

Когда я запускаю его локально, используя узел в терминале, этот код прекрасно работает:

'use strict'
const Telegraf = require('telegraf')
const bot = new Telegraf('Token')

bot.command('audio', (ctx) => {
        ctx.replyWithAudio({source: './media/song.mp3'})
    })

const { PORT = 3000 } = process.env
bot.startWebhook('/', null, PORT)

Однако, когда я развертываю это как функцию AWS Lambda, я получаю следующую ошибку:

  Apr 29th 12:24:12pm ERRO staging 4 events.js:183
  Apr 29th 12:24:12pm ERRO staging 4       throw er; // Unhandled 'error' event
  Apr 29th 12:24:12pm ERRO staging 4       ^
  Apr 29th 12:24:12pm ERRO staging 4
  Apr 29th 12:24:12pm ERRO staging 4 Error: write after end
  Apr 29th 12:24:12pm ERRO staging 4     at write_ (_http_outgoing.js:622:15)
  Apr 29th 12:24:12pm ERRO staging 4     at ServerResponse.write (_http_outgoing.js:617:10)
  Apr 29th 12:24:12pm ERRO staging 4     at MultipartStream.ondata (_stream_readable.js:639:20)
  Apr 29th 12:24:12pm ERRO staging 4     at emitOne (events.js:116:13)
  Apr 29th 12:24:12pm ERRO staging 4     at MultipartStream.emit (events.js:211:7)
  Apr 29th 12:24:12pm ERRO staging 4     at MultipartStream.Readable.read (_stream_readable.js:475:10)
  Apr 29th 12:24:12pm ERRO staging 4     at flow (_stream_readable.js:846:34)
  Apr 29th 12:24:12pm ERRO staging 4     at resume_ (_stream_readable.js:828:3)
  Apr 29th 12:24:12pm ERRO staging 4     at _combinedTickCallback (internal/process/next_tick.js:138:11)
  Apr 29th 12:24:12pm ERRO staging 4     at process._tickCallback (internal/process/next_tick.js:180:9)

Я почти уверен, что это потому, что я не понимаю, как хранятся файлы при развертывании лямбда-функции. Как каталоги сохраняются, чтобы я мог получить их? Это вообще возможно?

Мой пакет zip содержит следующие каталоги:

Zip file

Для этого бота я использовал apex up для развертывания и telegraf для написания кода.

1 Ответ

0 голосов
/ 29 апреля 2018

Если ваш MP3 находится в загруженном вами пакете zip, то вы можете найти это и все остальное в комплекте, когда работает лямбда.

В лямбде вы можете получить каталог, содержащий распакованный пакет, с process.env.LAMBDA_TASK_ROOT. Ваш файл будет относиться к этому.

bot.command('audio', (ctx) => {
    ctx.replyWithAudio({
        source: process.env.LAMBDA_TASK_ROOT + '/media/song.mp3'
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...