Имя: Пароль:
1C
1С v8
Значок амперсанда & мешает работе Телеграм-бота? Решение в (5)
0 topa310
 
15.11.23
15:38
Доброго времени суток
Есть бот, написанный на 1С для телеграма. В качестве приветственного окна, если все заполнено правильно, он выдает кнопки:

Кнопки1.Добавить(Новый Структура("text,callback_data","Задолженность","dolg"));
Кнопки1.Добавить(Новый Структура("text,callback_data","Последнее показание","pokazanie_out_rrg"));
Кнопки2.Добавить(Новый Структура("text,callback_data","Контактная информация","contact_info"));
Кнопки3.Добавить(Новый Структура("text,callback_data","Передать показание счетчика","pokazanie_in_abonent"));
Кнопки4.Добавить(Новый Структура("text,callback_data","Узнать текущий тариф","tarif_abonent"));
Кнопки5.Добавить(Новый Структура("text,callback_data","Записаться на прием","talon_abonent"));
Если Наличие_EMail=Ложь Тогда 
   Кнопки6.Добавить(Новый Структура("text,callback_data","Передать адрес электронной почты","transfer_email_abonent"));
КонецЕсли;
Кнопки7.Добавить(Новый Структура("text,url","Оплата", "https://ССЫЛКА/?targetOrg=20032"));


Внимание на кнопку7. В данном исполнении при нажатии в телеграмме на кнопку "Оплата" пользователя перекидывает прямо по ссылке на нужный сайт с нужными значениями. Проблема стоит такая: нужна новая ссылка, но чтобы там была заполнена не только организация (Org в ссылке), но и лицевой счет. Как это я планировал сделать:

Кнопки7.Добавить(Новый Структура("text,url","Оплата", "https://ССЫЛКА/review?org=20032&acc="+ЛицевойСчет));


И вот значок амперсанта, который идет перед "acc=", после которого заполняется поле лицевого счета на сайте, все ломает. В его присутствии бот отказывается выдавать клавиатуру с кнопками обратно в чат, если же убрать именно его - все становится нормально.

Пробовал делать структуру через callbackdata, как в других кнопках, тогда получалось:

Кнопки7.Добавить(Новый Структура("text,callback_data","Оплата", "payment_attempt"));


А дальше делал проверку, что если пользователь нажал кнопку, под которой payment_attempt, то выполняем соответствующую процедуру, в ходе которой сообщением от бота выдавалась бы нужная ссылка:

ЛицевойСчет=Получить_лс_по_id(id); 
ТекстСообщения="Ссылка на оплату: https://ССЫЛКА/review?org=20032&acc="+ЛицевойСчет;
Если ЛицевойСчет<>"" Тогда
		sendMessage(id, ТекстСообщения);
Иначе
	sendMessage(id, "Не задан лицевой счет");	
КонецЕсли;


Но бот вместо этого выдает ссылку ровно до символа амперсанда и дальше - ничего. Если поставить амперсанд где-то раньше - ссылка уменьшится, если поставить его в начале переменной "Текст сообщения" - ничего не придет.

Устал сражаться с одним символом, прошу помощи у прошаренных.

Помимо всего прочего, я делал еще двойной амперсанд (&&), Символ(38) и некоторые другие варианты, которые смог найти в интернете, но ни один из них мою проблему не решил. Возможно, каким-то из них я неправильно воспользовался, так что если у вас есть какие-то идеи, связанные со способами выше, не стесняйтесь их высказать.
1 Волшебник
 
15.11.23
15:38
А вот здесь условие правильное?

Если Наличие_EMail=Ложь Тогда
2 topa310
 
15.11.23
15:44
(1) Да. Если электронной почты у этого абонента нет (не привязана к Лицевому счету), то бот в чате показывает кнопку6, по нажатию которой можно привязать электронную почту. Если же почта уже есть, то кнопка не нужна и не добавляется.
3 Звездец
 
15.11.23
15:49
если его попробовать заменить аски кодом соответствующим?
4 topa310
 
15.11.23
15:51
(3) как это сделать, чтобы 1С его принял в строку? Символ(38), как я уже писал, не срабатывает, есть другой вариант?
5 АНДР
 
15.11.23
15:57
20032%26acc
6 dmt
 
15.11.23
15:58
7 topa310
 
15.11.23
16:13
(5) гений зашел в тред
спасибо огромное, помогло