Какой стртктуры должен быть ответ от Telegram bot Webhook?

Ссылка скопирована
1 ответ

Всем привет, не так давно обнаружил нововведение в Telegram Bot API: вместо того чтобы отсылать отдельный POST запрос к api telegram теперь можно отправить response со статусом 200 на входящий Update.
https://core.telegram.org/bots/faq#how-can-i-make-...

Какой стртктуры должен быть ответ от Telegram bot Webhook?

Отправляю json формата:

{"method":"sendMessage","chat_id":11111111,"text":"Reply test"}

{"method":"sendMessage","chat_id":11111111,"text":"Reply test"}

но сообщение не отсылается.
Проверил локально: ответ от вебхука приходит корректный

Какой стртктуры должен быть ответ от Telegram bot Webhook?

на всякий случай код на GO:

type Response struct { 	Method string `json:"method"` 	ChatId int    `json:"chat_id"` 	Text   string `json:"text"` }  func handleUpdate(w http.ResponseWriter, r *http.Request) { 	response := Response{Method: "sendMessage", ChatId: 10101010, Text: "struct"} 	jsonData, err := json.Marshal(response) 	w.Write(jsonData)         if err != nil { 		log.Fatal(err) 	} 	jsonStr := string(jsonData) 	log.Print(jsonStr) 	w.WriteHeader(http.StatusOK) 	w.Header().Set("Content-Type", "application/json") 	if err != nil { 		log.Fatalf("Error happened in JSON marshal. Err: %s", err) 	} 	return }

type Response struct { Method string `json:"method"` ChatId int `json:"chat_id"` Text string `json:"text"` } func handleUpdate(w http.ResponseWriter, r *http.Request) { response := Response{Method: "sendMessage", ChatId: 10101010, Text: "struct"} jsonData, err := json.Marshal(response) w.Write(jsonData) if err != nil { log.Fatal(err) } jsonStr := string(jsonData) log.Print(jsonStr) w.WriteHeader(http.StatusOK) w.Header().Set("Content-Type", "application/json") if err != nil { log.Fatalf("Error happened in JSON marshal. Err: %s", err) } return }

Что делаю не так?

Дополнительно:

Проверьте заголовки ответа. Content-Type правильный? Content-Length присутствует?

  • приложил скрин, видимо да, в Content-Type дело, сейчас попробую, спасибо
  • Rsa97, ну вроде в коде он правильный content-type пишет. content-length должен вроде автоматически писаться.
  • А chat_id у вас такой и есть или в реальном коде вы его берёте из запроса?
    Вообще лично я бы не заморачивался с этим и делал бы запросы по старинке - так хотябы можно получить подтверждение доставки.
  • Василий Банников, Очерёдность тоже может иметь значение. В коде заголовок добавляется после записи тела.
  • Rsa97, и правда.
  • Content-Type: application/json должен быть, а у тебя он text/plain.
    Вероятно, ты заголовки выставляешь уже после того как началась отправка ответа.

    • Помогло, спасибо, передвинул w.Header().Set("Content-Type", "application/json") в начало функции и все отработало как надо
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Для того чтобы правильно структурировать ответ от Telegram bot Webhook, необходимо следовать определенным правилам и форматам. Вот пример структуры ответа от Telegram bot Webhook:

    {
        "update_id": 10000,
        "message": {
            "message_id": 1365,
            "from": {
                "id": 123456789,
                "is_bot": false,
                "first_name": "John",
                "last_name": "Doe",
                "username": "johndoe"
            },
            "chat": {
                "id": 123456789,
                "first_name": "John",
                "last_name": "Doe",
                "username": "johndoe",
                "type": "private"
            },
            "date": 1628833072,
            "text": "Hello, World!"
        }
    }

    { "update_id": 10000, "message": { "message_id": 1365, "from": { "id": 123456789, "is_bot": false, "first_name": "John", "last_name": "Doe", "username": "johndoe" }, "chat": { "id": 123456789, "first_name": "John", "last_name": "Doe", "username": "johndoe", "type": "private" }, "date": 1628833072, "text": "Hello, World!" } }

    Этот пример показывает структуру ответа от Telegram bot Webhook, где содержится информация об обновлении, сообщении, отправителе и чате. Важно учитывать, что каждое поле должно быть заполнено корректно и соответствовать требованиям Telegram API.

    Также следует помнить, что ответ от Telegram bot Webhook может содержать и другие поля в зависимости от конкретного запроса или действия. Важно изучить документацию Telegram API для полного понимания всех возможных параметров и структуры ответа.

    Надеюсь, данная информация поможет вам правильно структурировать ответ от Telegram bot Webhook и решить вашу проблему. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать. Буду рад помочь!

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно