Страницы: Пред. 1 2 3 След.
RSS
Как сделать отправку в Telegram из макроса VBA Excel, Telegram из макроса VBA Excel
 
Ребят, помогите к картинке прикрутить еще и текстовое описание.
У метода sendPhoto помимо указания чат-ID и photo есть еще опциональная возможность указывать caption (текст, который будет прикреплен к картинке).
Вроде все правильно делаю, но не хотят сообщения на русском прикрепляться, хотя и энкодирую их в UTF-8.
Если прикреплять сообщение английскими буквами, то все ок отрабатывает, с кириллицей же никак не хочет.

Код
Public Sub telegram_send_picture()
 
    Const URL = "https://api.telegram.org/bot"
    Const TOKEN = "bla-bla-bla:some_TOKEN"   ' тут токен бота
    Const METHOD_NAME = "/sendPhoto?"
    Const CHAT_ID = "-1234567890"            ' тут ID чата, куда послать картинку
       
    Const FOLDER = "C:\Тест бота Телеграмм\"    ' папка, в которой лежит картинка
    Const JPG_FILE = "Picture1.jpg"             ' имя картинки с расширением
    
    Dim msg$: msg = "Какой-то русский текст"    ' сообщение (описание), которое надо прикрепить к картинке. 
' Если сюда указать английский текст, то все отлично работает. С русскими буквами не хочет
    msg = EncodeUTF8noBOM(msg)                  ' переводим русский текст в UTF-8 (функция описана ниже)
     
    Dim data As Object, key
    Set data = CreateObject("Scripting.Dictionary")
    data.Add "chat_id", CHAT_ID                 ' добавляем в словарь чат-ID
    data.Add "caption", msg                     ' добавляем в словарь текст, который надо прикрепить к картинке, переведенный в UTF-8
     
    
    BOUNDARY = "--OYWFRYGNCYQAOCCT44655,4239930556"   ' разделитель для form-data
 
    'заполняем словарь форм датами чат-ID и сообщения
    Dim part As String, ado As Object
    For Each key In data.keys
        part = part & "--" & BOUNDARY & vbCrLf
        part = part & "Content-Disposition: form-data; name=""" & key & """" & vbCrLf & vbCrLf
        part = part & data(key) & vbCrLf
    Next
    
    ' filename
    part = part & "--" & BOUNDARY & vbCrLf
    part = part & "Content-Disposition: form-data; name=""photo""; filename=""" & JPG_FILE & """" & vbCrLf & vbCrLf


    ' read jpg file as binary
    Dim jpg
    Set ado = CreateObject("ADODB.Stream")
    ado.Type = 1 'binary
    ado.Open
    ado.LoadFromFile FOLDER & JPG_FILE
    ado.Position = 0
    jpg = ado.read
    ado.Close
 
    ' combine part, jpg , end
    ado.Open
    ado.Position = 0
    ado.Type = 1 ' binary
    ado.Write ToBytes(part)
    ado.Write jpg
    ado.Write ToBytes(vbCrLf & "--" & BOUNDARY & "---")
    ado.Position = 0
 
    Dim req As Object, reqURL As String
    Set req = CreateObject("MSXML2.XMLHTTP")
    reqURL = URL & TOKEN & METHOD_NAME
    With req
        .Open "POST", reqURL, False
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & BOUNDARY
        .send ado.read
        MsgBox .responseText
    End With
 
End Sub
 
Function ToBytes(str As String) As Variant
    Dim ado As Object
    Set ado = CreateObject("ADODB.Stream")
    ado.Open
    ado.Type = 2 ' text
    ado.Charset = "_autodetect"
    ado.WriteText str
    ado.Position = 0
    ado.Type = 1
    ToBytes = ado.read
    ado.Close
End Function

' перевод в UTF8
Function EncodeUTF8noBOM(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 4095: t = Chr(AscW(l) \ 64 \ 64 + 224) & Chr(AscW(l) \ 64) & Chr(8 * 16 + AscW(l) Mod 64)
            Case Is > 127: t = Chr(AscW(l) \ 64 + 192) & Chr(8 * 16 + AscW(l) Mod 64)
            Case Else: t = l
        End Select
        EncodeUTF8noBOM = EncodeUTF8noBOM & t
    Next
End Function



В итоге в виде response приходит ошибка, что текст д.б. декодирован в UTF8. Но он ведь и декодирован.
[img]C:\Тест%20бота%20Телеграмм\Безымянный.jpg[/img]
 
Всем, привет!

А у меня вопрос по текстовой части: возможно как-либо отправить помимо текста(кириллического) еще и символы(снежинки например(те, которые вставляются через вставить символ))/смайлики?
 
Добрый день! Возможно.
Берете символы в кодировке UTF-8, например отсюда https://apps.timwhitlock.info/emoji/tables/unicode
Только \x заменяете на %, чтобы вместо \xE2\x9D\x84 получилось %E2%9D%84
 
Цитата
dimbaks: Берете символы в кодировке UTF-8, например отсюда
или из основного источника
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
Ребят, помогите к картинке прикрутить еще и текстовое описание.
У метода sendPhoto помимо указания чат-ID и photo есть еще опциональная возможность указывать caption (текст, который будет прикреплен к картинке).
Вроде все правильно делаю, но не хотят сообщения на русском прикрепляться, хотя и энкодирую их в UTF-8.
Если прикреплять сообщение английскими буквами, то все ок отрабатывает, с кириллицей же никак не хочет.

Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91      Public   Sub   telegram_send_picture()                Const   URL =   " https://api.telegram.org/bot "          Const   TOKEN =   "bla-bla-bla:some_TOKEN"     ' тут токен бота          Const   METHOD_NAME =   "/sendPhoto?"          Const   CHAT_ID =   "-1234567890"              ' тут ID чата, куда послать картинку                      Const   FOLDER = "C:\Тест бота Телеграмм\"      ' папка, в которой лежит картинка          Const   JPG_FILE =   "Picture1.jpg"               ' имя картинки с расширением                   Dim   msg$: msg =   "Какой-то русский текст"      ' сообщение (описание), которое надо прикрепить к картинке.     ' Если сюда указать английский текст, то все отлично работает. С русскими буквами не хочет          msg = EncodeUTF8noBOM(msg)                    ' переводим русский текст в UTF-8 (функция описана ниже)                    Dim   data   As   Object  , key          Set   data = CreateObject(  "Scripting.Dictionary"  )          data.Add   "chat_id"  , CHAT_ID                   ' добавляем в словарь чат-ID          data.Add   "caption"  , msg                       ' добавляем в словарь текст, который надо прикрепить к картинке, переведенный в UTF-8                             BOUNDARY =   "--OYWFRYGNCYQAOCCT44655,4239930556"     ' разделитель для form-data                'заполняем словарь форм датами чат-ID и сообщения          Dim   part   As   String  , ado   As   Object          For   Each   key   In   data.keys              part = part &   "--"   & BOUNDARY & vbCrLf              part = part &   "Content-Disposition: form-data; name="  ""   & key &   ""  ""   & vbCrLf & vbCrLf              part = part & data(key) & vbCrLf          Next                   ' filename          part = part &   "--"   & BOUNDARY & vbCrLf          part = part &   "Content-Disposition: form-data; name="  "photo"  "; filename="  ""   & JPG_FILE &   ""  ""   & vbCrLf & vbCrLf                ' read jpg file as binary          Dim   jpg          Set   ado = CreateObject(  "ADODB.Stream"  )          ado.Type = 1   'binary          ado.Open          ado.LoadFromFile FOLDER & JPG_FILE          ado.Position = 0          jpg = ado.read          ado.Close                ' combine part, jpg , end          ado.Open          ado.Position = 0          ado.Type = 1   ' binary          ado.Write ToBytes(part)          ado.Write jpg          ado.Write ToBytes(vbCrLf &   "--"   & BOUNDARY &   "---"  )          ado.Position = 0                Dim   req   As   Object  , reqURL   As   String          Set   req = CreateObject(  "MSXML2.XMLHTTP"  )          reqURL = URL & TOKEN & METHOD_NAME          With   req              .Open   "POST"  , reqURL,   False              .setRequestHeader   "Content-Type"  ,   "multipart/form-data; boundary="   & BOUNDARY              .send ado.read              MsgBox .responseText          End   With          End   Sub          Function   ToBytes(str   As   String  )   As   Variant          Dim   ado   As   Object          Set   ado = CreateObject(  "ADODB.Stream"  )          ado.Open          ado.Type = 2   ' text          ado.Charset =   "_autodetect"          ado.WriteText str          ado.Position = 0          ado.Type = 1          ToBytes = ado.read          ado.Close    End   Function       ' перевод в UTF8    Function   EncodeUTF8noBOM(  ByVal   txt   As   String  )   As   String          For   i = 1   To   Len(txt)              l = Mid(txt, i, 1)              Select   Case   AscW(l)                  Case   Is   > 4095: t = Chr(AscW(l) \ 64 \ 64 + 224) & Chr(AscW(l) \ 64) & Chr(8 * 16 + AscW(l)   Mod   64)                  Case   Is   > 127: t = Chr(AscW(l) \ 64 + 192) & Chr(8 * 16 + AscW(l)   Mod   64)                  Case   Else  : t = l              End   Select              EncodeUTF8noBOM = EncodeUTF8noBOM & t          Next    End   Function   
   


В итоге в виде response приходит ошибка, что текст д.б. декодирован в UTF8. Но он ведь и декодирован.
[img]c:\%D0%A2%D0%B5%D1%81%D1%82%20%D0%B1%D0%BE%D1%82%D0%B0%20%D0%A2%D0%B5%D0%BB%D0%B5%D0%B3%D1%80%D0%B0%D0%BC%D0%BC\%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.jpg[/img]
Изменено: Shevch - 31.05.2022 13:56:42
 
Цитата
написал:
Ребят, помогите к картинке прикрутить еще и текстовое описание.
У метода sendPhoto помимо указания чат-ID и photo есть еще опциональная возможность указывать caption (текст, который будет прикреплен к картинке).
Вроде все правильно делаю, но не хотят сообщения на русском прикрепляться, хотя и энкодирую их в UTF-8.
Если прикреплять сообщение английскими буквами, то все ок отрабатывает, с кириллицей же никак не хочет.

Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91      Public   Sub   telegram_send_picture()                Const   URL =   " https://api.telegram.org/bot "          Const   TOKEN =   "bla-bla-bla:some_TOKEN"     ' тут токен бота          Const   METHOD_NAME =   "/sendPhoto?"          Const   CHAT_ID =   "-1234567890"              ' тут ID чата, куда послать картинку                      Const   FOLDER = "C:\Тест бота Телеграмм\"      ' папка, в которой лежит картинка          Const   JPG_FILE =   "Picture1.jpg"               ' имя картинки с расширением                   Dim   msg$: msg =   "Какой-то русский текст"      ' сообщение (описание), которое надо прикрепить к картинке.     ' Если сюда указать английский текст, то все отлично работает. С русскими буквами не хочет          msg = EncodeUTF8noBOM(msg)                    ' переводим русский текст в UTF-8 (функция описана ниже)                    Dim   data   As   Object  , key          Set   data = CreateObject(  "Scripting.Dictionary"  )          data.Add   "chat_id"  , CHAT_ID                   ' добавляем в словарь чат-ID          data.Add   "caption"  , msg                       ' добавляем в словарь текст, который надо прикрепить к картинке, переведенный в UTF-8                             BOUNDARY =   "--OYWFRYGNCYQAOCCT44655,4239930556"     ' разделитель для form-data                'заполняем словарь форм датами чат-ID и сообщения          Dim   part   As   String  , ado   As   Object          For   Each   key   In   data.keys              part = part &   "--"   & BOUNDARY & vbCrLf              part = part &   "Content-Disposition: form-data; name="  ""   & key &   ""  ""   & vbCrLf & vbCrLf              part = part & data(key) & vbCrLf          Next                   ' filename          part = part &   "--"   & BOUNDARY & vbCrLf          part = part &   "Content-Disposition: form-data; name="  "photo"  "; filename="  ""   & JPG_FILE &   ""  ""   & vbCrLf & vbCrLf                ' read jpg file as binary          Dim   jpg          Set   ado = CreateObject(  "ADODB.Stream"  )          ado.Type = 1   'binary          ado.Open          ado.LoadFromFile FOLDER & JPG_FILE          ado.Position = 0          jpg = ado.read          ado.Close                ' combine part, jpg , end          ado.Open          ado.Position = 0          ado.Type = 1   ' binary          ado.Write ToBytes(part)          ado.Write jpg          ado.Write ToBytes(vbCrLf &   "--"   & BOUNDARY &   "---"  )          ado.Position = 0                Dim   req   As   Object  , reqURL   As   String          Set   req = CreateObject(  "MSXML2.XMLHTTP"  )          reqURL = URL & TOKEN & METHOD_NAME          With   req              .Open   "POST"  , reqURL,   False              .setRequestHeader   "Content-Type"  ,   "multipart/form-data; boundary="   & BOUNDARY              .send ado.read              MsgBox .responseText          End   With          End   Sub          Function   ToBytes(str   As   String  )   As   Variant          Dim   ado   As   Object          Set   ado = CreateObject(  "ADODB.Stream"  )          ado.Open          ado.Type = 2   ' text          ado.Charset =   "_autodetect"          ado.WriteText str          ado.Position = 0          ado.Type = 1          ToBytes = ado.read          ado.Close    End   Function       ' перевод в UTF8    Function   EncodeUTF8noBOM(  ByVal   txt   As   String  )   As   String          For   i = 1   To   Len(txt)              l = Mid(txt, i, 1)              Select   Case   AscW(l)                  Case   Is   > 4095: t = Chr(AscW(l) \ 64 \ 64 + 224) & Chr(AscW(l) \ 64) & Chr(8 * 16 + AscW(l)   Mod   64)                  Case   Is   > 127: t = Chr(AscW(l) \ 64 + 192) & Chr(8 * 16 + AscW(l)   Mod   64)                  Case   Else  : t = l              End   Select              EncodeUTF8noBOM = EncodeUTF8noBOM & t          Next    End   Function   
   


В итоге в виде response приходит ошибка, что текст д.б. декодирован в UTF8. Но он ведь и декодирован.
[img]c:\%D0%A2%D0%B5%D1%81%D1%82%20%D0%B1%D0%BE%D1%82%D0%B0%20%D0%A2%D0%B5%D0%BB%D0%B5%D0%B3%D1%80%D0%B0%D0%BC%D0%BC\%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.jpg[/img]
Код
Sub Messegephoto()
telegram_pruebas_photo
Send_Message
End Sub


Function telegram_pruebas_photo()
 
    Const URL = "https://api.telegram.org/bot"
    Const Token = "Вставить Токен"
    Const METHOD_NAME = "/sendPhoto?"
    Const CHAT_ID = "ID ЧАТ"
     
    Const FOLDER = "C:\documents\\"
    Const JPG_FILE = "ZOOM.jpg"
     
    Dim data As Object, key
    Set data = CreateObject("Scripting.Dictionary")
    data.Add "chat_id", CHAT_ID
     
    ' generate boundary
    Dim BOUNDARY, s As String, n As Integer
    For n = 1 To 16: s = s & Chr(65 + Int(Rnd * 25)): Next
    BOUNDARY = s & CDbl(Now)
 
    Dim part As String, ado As Object
    For Each key In data.keys
        part = part & "--" & BOUNDARY & vbCrLf
        part = part & "Content-Disposition: form-data; name=""" & key & """" & vbCrLf & vbCrLf
        part = part & data(key) & vbCrLf
    Next
    ' filename
    part = part & "--" & BOUNDARY & vbCrLf
    part = part & "Content-Disposition: form-data; name=""photo""; filename=""" & JPG_FILE & """" & vbCrLf & vbCrLf
     
    ' read jpg file as binary
    Dim jpg
    Set ado = CreateObject("ADODB.Stream")
    ado.Type = 1 'binary
    ado.Open
    ado.LoadFromFile FOLDER & JPG_FILE
    ado.Position = 0
    jpg = ado.read
    ado.Close
 
    ' combine part, jpg , end
    ado.Open
    ado.Position = 0
    ado.Type = 1 ' binary
    ado.Write ToBytes(part)
    ado.Write jpg
    ado.Write ToBytes(vbCrLf & "--" & BOUNDARY & "---")
    ado.Position = 0
 
    Dim req As Object, reqURL As String
    Set req = CreateObject("MSXML2.XMLHTTP")
    reqURL = URL & Token & METHOD_NAME
    With req
        .Open "POST", reqURL, False
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & BOUNDARY
        .send ado.read
        'MsgBox .responseText ??????? ??????? ????
    End With
 
End Function
 
Function ToBytes(str As String) As Variant
 
    Dim ado As Object
    Set ado = CreateObject("ADODB.Stream")
    ado.Open
    ado.Type = 2 ' text
    ado.Charset = "_autodetect"
    ado.WriteText str
    ado.Position = 0
    ado.Type = 1
    ToBytes = ado.read
    ado.Close
 
End Function

Function Send_Message()
Dim objRequest As Object
Dim strChatId As String
Dim strMessage As String
Dim strPostData As String

strChatId = Sheets("ZOOM").range("L1").Value   '
strAPI_Token = range("L2").Value               '
strMessage = range("B4").Value                 '
strPostData = "chat_id=" & strChatId & "&text=" & strMessage
Set objRequest = CreateObject("MSXML2.XMLHTTP")

With objRequest
    .Open "POST", "https://api.telegram.org/bot" & strAPI_Token & "/sendMessage?", False
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    .send (strPostData)
End With

End Function



 
Спасибо, но это не совсем то. В данном случае два отдельных сообщения будут посылаться, сначала отдельно сообщение с картинкой, потом отдельно текстовое сообщение.
Я же пытаюсь отправить одним сообщением картинку, которая в этом же сообщении будет сопровождаться определенным текстом.
 
Люди, вы что делаете? Теперь школьнички заспамят всех...
У меня сын уже попробовал в колледже бота подключить на общую рассылку (правда, на питоне), я имел неприятный разговор с директором. Но ладно, я бы понял, если бы сам написал, и от радости тестил на однокурсниках, а просто на 4PDA скачал.
Читали "Хищные вещи века" Стругацких? Вот это оно и есть.
 
Не участников форума надо ругать, а сыном заниматься что бы он свою энергию и  мысли в нужное русло направил.

Ситуация такая:
Есть таблица. ( :D Логично, правда?). Есть данные распиханные по ячейкам.
Представим что ведём подсчёт результатов беговой эстафеты. Столбцы, например, такие:
Время  Время2 Имя Результат
1 02:30 03:45 Ваня0:45
2 02:30 04:10 Маша 01:40
И т.д.
Есть две кнопки "! место" и "2 место"

Для отправки нам, например, нужны данные из столбцов  А С D F.

То есть нужно что бы в чат улетали данные из ячеек на пересечении конкретных столбцов, но на основе АКТИВНОЙ СТРОКИ.

Размышляя, в том числе и благодаря этой теме пришёл к таким мыслям:

Код message = RussianStringToURLEncode_New(ActiveCell.Text) Отправляет текст в выделенной ячейке.  Тут всё понятно.

Код message2 = RussianStringToURLEncode_New(Range("A1").Text) Отправляет текст находящийся в ячейке А1. Тут всё понятно.

Если я напишу составное условие sURL = "https://api.telegram.org/bot"; & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message & message2 я отправлю сообщение содержащее текст в выделенной ячейке и текст из ячейки А1. Тут тоже всё понятно.
А дальше как быть?


Ответ на поверхности, что-то не соображу...

И ещё завис над созданием кнопок которые отправляют шаблонный текст "я на месте" и "отошёл" без задействования ячеек таблицы.



Если не сам ответ, то в какую сторону копать?

полистал форум ещё раз, нашёл мысль вот какую:
Код
Sub xxx()  
Dim namb As Long  
Dim activeRow As Long  
activeRow = ActiveCell.Row  
namb = activeRow  
MsgBox namb  
End Sub  

Получается что нужно  message2 = RussianStringToURLEncode_New(Range("=Лист1!C2").Text)
Переделать в ...   типа такого:  message3 = RussianStringToURLEncode_New(activeRow = ActiveCell.Row; Range("myRange1").Columns(А; С; D; F).Text)


Решил пока через спрятанные ячейки с функцией "СЦЕПИТЬ"
Берёт ячейку из столбца "Х" на пересечении с активной строкой.
Решение кривое, но работает ) Спасибо за идеи, много вычитал на этом на форуме.
Код
 message = RussianStringToURLEncode_New(Cells(ActiveCell.Row, 24).Text) 'берёт данные из сборной ячейки АКТИВНОЙ СТРОКИ (данном случае столбец X)
Изменено: Константин - - 18.06.2022 15:33:33
 
Добрый день всем!
Хочу продолжить тему, задав такой вопрос: что нужно исправить в вышеупомянутом коде, что бы изображение отсылалось без сжатия.
Когда вручную отправляешь в Телеграм графический файл (путем его простого перетягивания мышкой из папки на ПК в чат Телеграм), Телеграм предлагает на выбор два варианта отправки "Перетащите сюда изображения для отправки их без сжатия" и "Перетащите сюда фотографии для быстрой отправки". Код, представленный в этом форуме, является аналогом "быстрой" отправки, то бишь отправки с некоторой долей сжатия, что сказывается на качестве, отсылаемого изображения. А как с помощью кода можно отправить изображение без сжатия?Спасибо!
 
Добрый день, я решил эту проблему отсылая фото как документ.
 
Цитата
написал:
Добрый день, я решил эту проблему отсылая фото как документ.
Точно! Дмитрий, точно! Огромное спасибо!

Осталось разобраться, как отсылать файлы с русскими названиями. Ибо в противном случае на Телеграм приходит, что-то несуразное.
Изменено: Izobilie Logic - 29.10.2022 09:38:38
 
Цитата
написал:
Цитата
написал:
Добрый день, я решил эту проблему отсылая фото как документ.
Точно! Дмитрий, точно! Огромное спасибо!

Осталось разобраться, как отсылать файлы с русскими названиями. Ибо в противном случае на Телеграм приходит, что-то несуразное.
Ни как
Как вариант пробуйте переименовывать через транслит
типа
eto imya fayla.xlsx
"Правильно заданный вопрос,половина ответа!"
 
Всем привет!
Хоть и с запозданием  :)  хочу поблагодарить volond75 за совет с транслитом.
Ну, и желая продолжить данную ветку обсуждения способов VBA-отправки в Телеграм, напишу парочку вопросов.
1-й вопрос. Если я не ошибаюсь, мы пришли к тому, что файл с подписью на русском языке можно отослать в Телеграм только в два захода: первый, выслав текстовое сообщение с названием файла, ну, или с каким либо комментарием к нему (sendMessage), и второй заход это отправка самого файла (sendDocument). Здесь я столкнулся с такой проблемой: у меня есть к отправке десяток файлов, которые я отсылаю в следующем порядке:
  sendMessage (1)
  sendDocument (1)
  ...
  sendMessage (10)
  sendDocument (10)
но вот приходят они по принципу "кто меньше, тот и быстрее", ну, например так:
  sendMessage (1)
  sendMessage (2)
  sendMessage (3)
  sendDocument (1)
  sendMessage (4)
  sendMessage (5)
  sendDocument (2)
и т. д.
Как это побороть? Очень не хотелось бы терять связь между сопроводительной надписью и файлом.
2-й вопрос образовательного характера. Не могу найти вразумительного ответа, что такое "Boundary" и зачем он нужен, на что он влияет? И почему он бывает то в виде константы (как пример: 3fbd04f5-b1ed-4060-99b9-fca7ff59c113), то в виде генерируемого значения:
Код
Dim Boundary, s As String, n As Integer
For n = 1 To 16: s = s & Chr(65 + Int(Rnd * 25)): Next
Boundary = s & CDbl(Now)
Спасибо!
 
Цитата
Izobilie Logic написал:
что такое "Boundary"
boundary
 
М-да... пожалуй мне эту Бандуру ("Boundary") не понять.  :D
Но, спасибо doober!
 
Izobilie Logic, Это просто строка разделитель,

понятно здесь
 
Игорь Федорович спасибо!
Но остается небольшой вопрос, если это просто строка разделитель, зачем некоторые так изгаляются и прописывают целую процедуру с применением случайных чисел?
Код
Dim Boundary, s As String, n As Integer
For n = 1 To 16: s = s & Chr(65 + Int(Rnd * 25)): Next
Boundary = s & CDbl(Now)
Не проще ли принять какую-нибудь стандартную комбинацию символов или придумать какой-нибудь оператор отвечающий за такое разделение?
 
Здравствуйте.
Кто-нибудь пробовал доработать чтобы сообщения приходили только подписавшимся на бот. Или это не возможно?
 
Я далеко не профессионал в области VBA, но все же хочу спросить: comment.imho, Вы хотите, что рассылка осуществлялась не по адресам, Вами указанным, а всем кто подписался на ваш бот? То бишь, сообщение будут получать все кто захочет и что бы Вы это не контролировали?
 
Izobilie Logic, сейчас этот работает так что вы пишете в поиске телеграма название бота и переходите в него... не нажимая кнопку подписаться вы уже видите все сообщения что приходят в бот... мне же интересно что бы до того момента пока не нажали подписаться ничего не было видно.
 
Мне кажется, что это не совсем так.
Давайте я расскажу алгоритм рассылки, во всяком случае, как он проистекает у меня.
Что бы оформить рассылку конкретному человеку я прошу его выслать мне какое либо сообщение на основании которого я, через бот "Get My Id",  узнаю его ID, проще говоря набор циферок олицетворяющих его адрес в "Телеграм". Затем я прошу адресата зайти на созданный мною бот и зарегистрироваться там, нажав, если я не ошибаюсь, кнопку "Start". После чего адресат начинает в этом боте получать сообщение высланные на его адрес. Если я не хочу, чтобы адресат получал мои сообщения, я удаляю его ID из списка получателей и он более не получает (новые) сообщения в моем боте. Ну, и если получатель сам захочет все это прекратить он просто удаляет у себя мой бот.
Подводим итог: без подписки (регистрации), а главное без моего согласия, адресат не получит от меня сообщения.
 
Я не совсем разбираюсь в терминологии соцсетей, но "бот" это не "блог", в котором каждый, зайдя на него, может увидеть все, что я там выкладываю.
 
судя по количеству сообщений в теме
тема отправки сообщения VBA через Телеграм  так же неисчерпаема вглубь, как атом

извините, лезу не в свое дело:
администрация сайта не считает, что с учетом интереса к теме 45тыс. просмотров есть смысл оставить 2 сообщения
1. как оправить
2. собственно, как это сделать
чтобы люди не читали всякую ерунду в т.ч. это сообщение)
Изменено: Ігор Гончаренко - 24.12.2022 20:16:13
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Ребят, помогите
Код
https://github.com/abakum/tmBot
Изменено: Константин Абакумов - 09.02.2023 00:03:49
 
Всем привет! Написал код, но почему-то при запуске выводит ошибку. При этом надписывал разные варианты кода, которые были выше. Кто сможет сказать в чем причина? Так как запрос в Гугл ничего толкового не дал.
Сам код:
Sub Send_to_Telegram_Bot_example()
       Dim Token As String, ChatID As String, Text As String
       Dim sURI As String, oHttp As Object, sHTML As String
       message = Range("B10").Text
       Token = "5835891000:AAG80T3BTBNpI2H9aeCHwmOXEOLkkl4QЕhj"
       ChatID = "197356622"
       sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message
       Set oHttp = CreateObject("Msxml2.XMLHTTP")
       oHttp.Open "POST", sURL, False
       oHttp.send
       Set oHttp = Nothing
End Sub

ошибка:
License information for this component not found.  You do not have an appropriate license to use this functionality in the design environment.
Изменено: Kuzma Pikar - 09.02.2023 00:35:12
 
 У нас наверное разный  гугл
https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/license-informat...
Скорее всего у Вас нет этого компонента Set oHttp = CreateObject("Msxml2.XMLHTTP")
"Правильно заданный вопрос,половина ответа!"
 
А как можно это исправить? Проверил на другом компе, все работает. Но на мак буке не хочет.
 
Всем доброго.
Делюсь своими мыслями:
Код
Sub MTT
Dim Token As String, ChatID As String, message As String
Dim sURL As String, oHttp As Object, sHTML As String
msg = Format(Cells(ActiveCell.Row, 2).Value, "dd.mm.yyyy hh:nn") & "  %0a" & Cells(ActiveCell.Row, 3) & "  %0a" & Cells(ActiveCell.Row, 4) & " %0a Сообщение отправил: " & Cells(ActiveCell.Row, 5)  'создали переменную из ячеек активной строки
message = RussianStringToURLEncode_New(msg)
Token = 
ChatID = 
sURL = "https://api.telegram.org/bot" & Token & "/sendMessage?chat_id=" & ChatID & "&text=" & message
Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.send
    Set oHttp = Nothing
End Sub


Тут формируется сообщение из ячеек активной строки таблицы. Первыми идут дата и время, потом содержание ячеек.

Отправка стандартно- через "бот", в группу. А как всё же отправить от собственного имени конкретному абоненту?
Собственно как узнать номер абонента я в курсе, но вот coreAPI что-то не соображу как прикрутить...
Изменено: Константин - - 17.02.2023 02:18:34
 
А на мой вопрос есть ответ?

Чтобы работало получатель должен запустить бот. Также получатель может и удалить бота. Отправитель отправляет периодически сообщения и не знает доходят ли сообщения.
Возможно ли получать обратную связь, т.е. проверку дошло ли сообщение?
Я не знаю, в ячейку ставить 1 если дошло и 0 если не дошло
Страницы: Пред. 1 2 3 След.
Наверх