Answer the question
In order to leave comments, you need to log in
How to implement the sendAudio function through a POST request in golang to send an audio file to Telegram via a chat bot?
I’m writing a Telegram bot on GO without using third-party APIs
I just can’t figure out how to make the correct POST request to send a local audio file
Answer the question
In order to leave comments, you need to log in
I wrote at random, it works)
func sendAudio(ip int, fileName string) {
// Открываем файл
file, err := os.Open(fileName)
if err != nil {
log.Fatalln(err)
}
// Закрываем файл по завершению
defer file.Close()
// Буфер для хранения нашего тела запроса в виде байтов
var requestBody bytes.Buffer
// Создаем писателя
multiPartWriter := multipart.NewWriter(&requestBody)
// Инициализируем поле
fileWriter, err := multiPartWriter.CreateFormFile("audio", fileName)
if err != nil {
log.Fatalln(err)
}
// Скопируйте содержимое файла в поле
_, err = io.Copy(fileWriter, file)
if err != nil {
log.Fatalln(err)
}
// Заполняем остальные поля
fieldWriter, err := multiPartWriter.CreateFormField("normal_field")
if err != nil {
log.Fatalln(err)
}
_, err = fieldWriter.Write([]byte("Value"))
if err != nil {
log.Fatalln(err)
}
// Закрываем запись данных
multiPartWriter.Close()
// Создаем объект реквеста
req, err := http.NewRequest("POST", "https://api.telegram.org/bot[ТОКЕН БОТА]/sendAudio?chat_id=[chat_id]", &requestBody)
if err != nil {
log.Fatalln(err)
}
// Получаем и устанавливаем тип контента
req.Header.Set("Content-Type", multiPartWriter.FormDataContentType())
// Отправляем запрос
client := &http.Client{}
_, err = client.Do(req)
if err != nil {
log.Fatalln(err)
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question