Не переносится клавиатура в телеграмм с 1с

1. user2122798 16.01.25 15:54 Сейчас в теме
Пока Выборка.Следующий() Цикл
		СсылкаОбъект = Выборка.Ссылка;
		Объект = СсылкаОбъект.ПолучитьОбъект();
		
		Если Объект.Отправлено = Ложь Тогда
			
			МассивКнопокСтрок = Новый Массив;
			Кнопки = Новый Структура;
			Кнопки.Вставить("text", Лев(Выборка.НазваниеЗадания, 80));
			Кнопки.Вставить("callback_data", "/Gettask" + Выборка.ID);
			МассивКнопокСтрок.Добавить(Кнопки);
			МассивСтрок.Добавить(МассивКнопокСтрок);
			
			Клавиатура = Новый Структура;
			Клавиатура.Вставить("inline_keyboard", МассивСтрок);
			
			ТекстСообщения = "Новое задание!";
			
			Если ОтправитьСообщениеВTelegram(ТекстСообщения, Клавиатура) Тогда
				//Объект.Отправлено = Истина;
				//Объект.Записать();
			КонецЕсли;
			
		КонецЕсли;
	КонецЦикла;

СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
	АдресЗапроса = "bot" + МойToken + "/sendMessage?chat_id=" + ЧатID + "&parse_mode=HTML&text=";
	
	АдресЗапроса = АдресЗапроса + ТекстСообщения;
	
	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("chat_id", ЧатID);
	ПараметрыЗапроса.Вставить("text", ТекстСообщения); 
	ПараметрыЗапроса.Вставить("parse_mode", "HTML");  
	
	Если Клавиатура <> Неопределено Тогда
		ПараметрыЗапроса.Вставить("reply_markup", Клавиатура);
	КонецЕсли;
	 	
	ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
	ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json");
	ЗапросHTTP.Заголовки.Вставить("Connection", "keep-alive");
	
	Попытка
		ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
        Если ОтветHTTP.КодСостояния = 200 Тогда
			Возврат Истина;
		Иначе      
			
			Возврат Ложь;
			
		КонецЕсли;
		
	Исключение
		
		Возврат Ложь;
		
	КонецПопытки;
	
КонецФункции
Показать

вот код, отправляет сообщение только "Новое задание", но не кнопки на которые можно будет нажать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. antz 16.01.25 15:56 Сейчас в теме
А что в процедуре ОтправитьСообщениеВTelegram?
3. user2107191 16.01.25 15:58 Сейчас в теме
(2) "Ничо не знаю - с моей стороны пули улетели. Проблема на вашей стороне." (С)
7. antz 16.01.25 16:15 Сейчас в теме
8. user2107191 16.01.25 16:16 Сейчас в теме
(7) Судя по (4) - улетели!!!
9. antz 16.01.25 16:19 Сейчас в теме
5. user2122798 16.01.25 16:00 Сейчас в теме
(2)
Функция ОтправитьСообщениеВTelegram(ТекстСообщения, Клавиатура = Неопределено) 
	
	МойToken = "123"; // Токен
	АдресTelegramAPI = "api.telegram.org";
	ЧатID = "123"; // Chat ID
	
	СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
	АдресЗапроса = "bot" + МойToken + "/sendMessage?chat_id=" + ЧатID + "&parse_mode=HTML&text=";
	
	АдресЗапроса = АдресЗапроса + ТекстСообщения;
	
	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("chat_id", ЧатID);
	ПараметрыЗапроса.Вставить("text", ТекстСообщения); 
	ПараметрыЗапроса.Вставить("parse_mode", "HTML");  
	
	Если Клавиатура <> Неопределено Тогда
		ПараметрыЗапроса.Вставить("reply_markup", Клавиатура);
	КонецЕсли;
	 	
	ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
	ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json");
	ЗапросHTTP.Заголовки.Вставить("Connection", "keep-alive");
	
	Попытка
		ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
		Если ОтветHTTP.КодСостояния = 200 Тогда
			Возврат Истина;
		Иначе      
			
			Возврат Ложь;
			
		КонецЕсли;
		
	Исключение
		
		Возврат Ложь;
		
	КонецПопытки;
	
КонецФункции
Показать
6. antz 16.01.25 16:15 Сейчас в теме
(5) И вот эти ПараметрыЗапроса - они так там и болтаются не пришитые?
10. user2122798 16.01.25 16:22 Сейчас в теме
(6) да, вот держите весь код

&НаСервере
Процедура ОтправитьНовоеЗадание() Экспорт

	МойToken = "123"; // Токен
	АдресTelegramAPI = "api.telegram.org";
	ЧатID = "123"; // Chat ID
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
	|    Заявки.Ссылка КАК Ссылка,
	|    Заявки.НазваниеЗадания КАК НазваниеЗадания,
	|    Заявки.ID КАК ID
	|ИЗ
	|    Документ.Заявки КАК Заявки
	|ГДЕ
	|    Заявки.Исполнитель = &Исполнитель
	|    И Заявки.Отправлено = ЛОЖЬ
	|    И Заявки.Статус = &Статус
	|УПОРЯДОЧИТЬ ПО
	|    Заявки.Дата УБЫВ";
	
	Запрос.УстановитьПараметр("Исполнитель", Справочники.Пользователи.НайтиПоНаименованию("Иван Иванов"));
	Запрос.УстановитьПараметр("Статус", Справочники.Статус.НайтиПоНаименованию("Ждёт выполнения"));
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	МассивСтрок = Новый Массив;
	
	Пока Выборка.Следующий() Цикл
		СсылкаОбъект = Выборка.Ссылка;
		Объект = СсылкаОбъект.ПолучитьОбъект();
		
		Если Объект.Отправлено = Ложь Тогда
			
			МассивКнопокСтрок = Новый Массив;
			Кнопки = Новый Структура;
			Кнопки.Вставить("text", Лев(Выборка.НазваниеЗадания, 80));
			Кнопки.Вставить("callback_data", "/Gettask" + Выборка.ID);
			МассивКнопокСтрок.Добавить(Кнопки);
			МассивСтрок.Добавить(МассивКнопокСтрок);
			
			Клавиатура = Новый Структура;
			Клавиатура.Вставить("inline_keyboard", МассивСтрок);
			
			ТекстСообщения = "Новое задание!";
			
			Если ОтправитьСообщениеВTelegram(ТекстСообщения, Клавиатура) Тогда
				//Объект.Отправлено = Истина;
				//Объект.Записать();
			КонецЕсли;
			
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

Функция ОтправитьСообщениеВTelegram(ТекстСообщения, Клавиатура = Неопределено) 
	
	МойToken = "123"; // Токен
	АдресTelegramAPI = "api.telegram.org";
	ЧатID = "123"; // Chat ID
	
	СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
	АдресЗапроса = "bot" + МойToken + "/sendMessage?chat_id=" + ЧатID + "&parse_mode=HTML&text=";
	
	АдресЗапроса = АдресЗапроса + ТекстСообщения;
	
	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("chat_id", ЧатID);
	ПараметрыЗапроса.Вставить("text", ТекстСообщения); 
	ПараметрыЗапроса.Вставить("parse_mode", "HTML");  
	
	Если Клавиатура <> Неопределено Тогда
		ПараметрыЗапроса.Вставить("reply_markup", Клавиатура);
	КонецЕсли;
	 	
	ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
	ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json");
	ЗапросHTTP.Заголовки.Вставить("Connection", "keep-alive");
	
	Попытка
		ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
		Если ОтветHTTP.КодСостояния = 200 Тогда
			Возврат Истина;
		Иначе      
			
			Возврат Ложь;
			
		КонецЕсли;
		
	Исключение
		
		Возврат Ложь;
		
	КонецПопытки;
	
КонецФункции
Показать
11. user2107191 16.01.25 16:27 Сейчас в теме
(10) Ну и пусть болтаются.
4. user2122798 16.01.25 15:58 Сейчас в теме
должно быть как на 1-ом скриншоте, а выводит то что на 2-ом
Прикрепленные файлы:
12. mkalimulin 1446 16.01.25 17:11 Сейчас в теме
Чтобы в сообщение Телеграм отправлялся параметр `reply_markup`, вам нужно изменить способ отправки запроса к API Телеграм. В текущем коде параметры запроса добавляются к URL, и запрос отправляется методом GET, что не позволяет корректно передать вложенный JSON-объект `reply_markup`.

Вам нужно:

1. Изменить метод запроса на POST.
2. Удалить параметры из URL и отправлять их в теле запроса.
3. Сериализовать структуру параметров, включая `reply_markup`, в JSON.
4. Установить заголовок `Content-Type` на `application/json`.

**Исправленный код будет выглядеть так:**

```1C
// Формируем адрес запроса без параметров
АдресЗапроса = "bot" + МойToken + "/sendMessage";

// Формируем структуру параметров
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("chat_id", ЧатID);
ПараметрыЗапроса.Вставить("text", ТекстСообщения);
ПараметрыЗапроса.Вставить("parse_mode", "HTML");
Если Клавиатура <> Неопределено Тогда
ПараметрыЗапроса.Вставить("reply_markup", Клавиатура);
КонецЕсли;

// Сериализуем параметры в JSON
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
ТекстЗапросаJSON = ЗаписьJSON.Закрыть();

// Создаем HTTP-запрос
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
ЗапросHTTP.УстановитьТелоИзСтроки(ТекстЗапросаJSON, "UTF-8");

// Устанавливаем заголовки
ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json");

// Устанавливаем метод запроса на POST
ЗапросHTTP.УстановитьМетод("POST");

// Отправляем запрос
Попытка
ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
Если ОтветHTTP.КодСостояния = 200 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Исключение
Возврат Ложь;
КонецПопытки;
```

**Пояснение:**

- **Удаление параметров из URL:** Теперь `АдресЗапроса` содержит только базовый путь к методу API без параметров.
- **Формирование структуры параметров:** Все необходимые параметры запроса, включая `reply_markup`, добавляются в структуру `ПараметрыЗапроса`.
- **Сериализация в JSON:** Используя объект `ЗаписьJSON`, мы сериализуем структуру параметров в строку JSON.
- **Настройка HTTP-запроса:**
- Метод запроса устанавливается на POST с помощью `УстановитьМетод("POST")`.
- Тело запроса устанавливается на сериализованный JSON с помощью `УстановитьТелоИзСтроки`.
- Заголовок `Content-Type` устанавливается на `application/json`.
- **Отправка запроса и обработка ответа:** Запрос отправляется, и в зависимости от кода состояния возвращается `Истина` или `Ложь`.

**Важно:** Убедитесь, что ваша версия платформы 1С поддерживает работу с JSON и имеет методы для сериализации данных в JSON. Если таких методов нет, вам может понадобиться использовать внешние библиотеки или самостоятельно реализовать сериализацию.

Таким образом, изменив способ формирования и отправки запроса, вы сможете корректно отправлять `reply_markup` в сообщении Телеграм.
13. antz 16.01.25 17:15 Сейчас в теме
(12) ОтправитьДляОбработки - это и есть POST, УстановитьМетод не нужно, а так согласен.
14. user2107191 16.01.25 17:20 Сейчас в теме
(13) Не спорь с нейросеткой!
SlavaKron; orakool; +2 Ответить
15. user2122798 20.01.25 14:25 Сейчас в теме
нейросеть не помогла
Прикрепленные файлы:
18. mkalimulin 1446 20.01.25 14:31 Сейчас в теме
(15)
		ЗаписьJSON=новый ЗаписьJSON;
		ЗаписьJSON.УстановитьСтроку();
21. SlavaKron 20.01.25 14:53 Сейчас в теме
(18) Нет уж. Приходите через год (шутка). Можно, чтобы оно генерило без редактуры?
19. user2122798 20.01.25 14:40 Сейчас в теме
все равно не помогло
Прикрепленные файлы:
20. antz 20.01.25 14:47 Сейчас в теме
(19)
Прикрепленные файлы:
22. user2122798 20.01.25 14:57 Сейчас в теме
не работает(
Прикрепленные файлы:
23. antz 20.01.25 15:07 Сейчас в теме
(22) И УстановитьМетод не нужно, выше же писал, что ОтправитьДляОбработки - это и есть POST.
24. user2122798 20.01.25 15:15 Сейчас в теме
ничего не отправляет
Прикрепленные файлы:
25. antz 20.01.25 15:24 Сейчас в теме
(24) отправляет, но фигню.
27. user2107191 20.01.25 15:26 Сейчас в теме
(24) Это ты отправляешь пустое место.
28. user2122798 20.01.25 15:27 Сейчас в теме
(27) код как прислали выше, я ничего в нем не менял
29. user2107191 20.01.25 15:34 Сейчас в теме
(28)
код как прислали выше, я ничего в нем не менял
Врёшь
30. antz 20.01.25 15:35 Сейчас в теме
(24) перед отправкой надо

ЗапросHTTP.УстановитьТелоИзСтроки(ТекстЗапросаJSON)
31. user2122798 20.01.25 15:42 Сейчас в теме
32. antz 20.01.25 15:47 Сейчас в теме
33. SlavaKron 20.01.25 15:49 Сейчас в теме
(32) А что вы ожили после 3 лет забвения?
34. antz 20.01.25 15:51 Сейчас в теме
26. user2122798 20.01.25 15:26 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот