| Автор | Сообщение |
|
|
| |
Пост N: 652
Зарегистрирован: 17.06.10
|
|
Отправлено: 24.10.22 10:21. Заголовок: Чатбот
Приветствую ! У каждого клиента свой чатбот. Ключи в базе и я могу разослать сообщения тому или иному на телефон. Все работает. Можно ли сделать так - бот только один, а клиенты, по токену, к нему подключаются ?
|
 |

|
|
Ответов - 36
, стр:
1
2
All
[только новые]
|
|
|
|
| |
Пост N: 1853
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.10.22 19:16. Заголовок: fil пишет: fil пиш..
fil пишет: [quote]` fil пишет: | цитата: | | У каждого клиента свой чатбот. |
| Не понятно зачем у каждого свой. На то он и чат бот чтоб все запросы обрабатывать.. Каждому клиенту при обращении присваивается свой чат id. По нему и стройте логику ответов бота. По сути вопроса, да можете по ключу подключиться к любому боту, и контролировать общение этого бота. Только зачем их плодить.
|
 |

|
|
|
| |
Пост N: 653
Зарегистрирован: 17.06.10
|
|
Отправлено: 24.10.22 21:55. Заголовок: Хорошо. А как клиент..
Хорошо. А как подключиться к чужому боту дабы получить ID ?
|
 |

|
|
|
| |
Пост N: 1854
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.10.22 22:26. Заголовок: fil пишет: Хорошо. ..
fil пишет: | цитата: | | Хорошо. А как подключиться к чужому боту дабы получить ID |
| примерно так function TestBot() local i := 0, n local odoc := CreateObject( "MSXML2.DOMDocument" ) local ohttp := CreateObject( "MSXML2.XMLHTTP" ) local URL:="https://api.telegram.org/bot"+cTOKEN+"/getUpdates?offset=-1" // cToken - токен полученный при регистрации бота local cJson local aHash := hb_hash() hb_cdpSelect( "RU866" ) HB_LANGSELECT( "RU" ) ohttp:Open( "POST" ,URL, .F. ) oHttp:SetRequestHeader("Accept" ,"application/xml") oHttp:SetRequestHeader("Content-Type","application/json") oDoc:async:=.f. oDoc:LoadXml('<?xml version=""1.0"" encoding=""utf-8""?>') oHttp:Send(oDoc:xml) cJson := Alltrim(oHttp:responseText) hb_JsonDecode( cJson, @aHash ) ? aHash["ok"] ? n := Len( aHash["result"] ) for i := 1 To n ? aHash["result"][n]["update_id"] ? aHash["result"][n]["message"]["message_id"] ? aHash["result"][n]["message"]["from"]["id"] ? aHash["result"][n]["message"]["from"]["is_bot"] ? aHash["result"][n]["message"]["from"]["first_name"] ? aHash["result"][n]["message"]["from"]["language_code"] ? aHash["result"][n]["message"]["chat"]["id"] // это и есть ChatID ? aHash["result"][n]["message"]["chat"]["first_name"] ? aHash["result"][n]["message"]["chat"]["type"] ? aHash["result"][n]["message"]["date"] ? aHash["result"][n]["message"]["text"] ? end ? sendmsg( hb_ntoc(aHash["result"][1]["message"]["chat"]["id"]) , "привет мир" ) // отправить сообщение в чат return nil function sendmsg(cChatId,cMsg) local odoc := CreateObject( "MSXML2.DOMDocument" ) local ohttp := CreateObject( "MSXML2.XMLHTTP" ) local cJson local cUrl := "https://api.telegram.org/bot"+cTOKEN+"/sendMessage?text=" + UUrlEncode(hb_strToUtf8( cMsg )) + "&chat_id="+cChatId+'"' local aHash := hb_Hash() ohttp:Open( "GET" ,cUrl, .F. ) ohttp:SetRequestHeader( "Accept" , "application/xml") ohttp:SetRequestHeader( "Content-Type" ,"application/json" ) oDoc:async := .f. oDoc:LoadXml('<?xml version=""1.0"" encoding=""utf-8""?>') ohttp:Send(oDoc:xml) cJson := oHttp:ResponseBody hb_JsonDecode( cJson, @aHash ) return aHash["ok"] FUNCTION UUrlEncode( cString ) LOCAL nI, cI, cRet := "" FOR nI := 1 TO Len( cString ) cI := SubStr( cString, nI, 1 ) IF cI == " " cRet += "+" ELSEIF Asc( cI ) >= 127 .OR. Asc( cI ) <= 31 .OR. cI $ '=&%+' cRet += "%" + hb_StrToHex( cI ) ELSE cRet += cI ENDIF NEXT RETURN cRet FUNCTION UUrlDecode( cString ) LOCAL nI cString := StrTran( cString, "+", " " ) nI := 1 DO WHILE nI <= Len( cString ) nI := hb_At( "%", cString, nI ) IF nI == 0 EXIT ENDIF IF Upper( SubStr( cString, nI + 1, 1 ) ) $ "0123456789ABCDEF" .AND. ; Upper( SubStr( cString, nI + 2, 1 ) ) $ "0123456789ABCDEF" cString := Stuff( cString, nI, 3, hb_HexToStr( SubStr( cString, nI + 1, 2 ) ) ) ENDIF nI++ ENDDO RETURN cString ЗЫ Для чтения состояния бота используется метод getUpdates из api телеграмма. тут покажет все новые сообщения с указанием от какого чат ID они получены для отправки клиенту используется метод SendMessage из api
|
 |

|
|
|
| |
Пост N: 654
Зарегистрирован: 17.06.10
|
|
Отправлено: 24.10.22 22:52. Заголовок: Ага, сенкс, завтра п..
Ага, сенкс, завтра пробну !!
|
 |

|
|
|
| |
Пост N: 655
Зарегистрирован: 17.06.10
|
|
Отправлено: 24.10.22 23:17. Заголовок: Хотя я не понимаю ка..
Хотя я не понимаю каким образом эта прога может сделать рассылку клиенту телеграмма ежели он заранее не подключен к боту /start
|
 |

|
|
|
| |
Пост N: 1855
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.10.22 08:06. Заголовок: fil пишет: Хотя я н..
fil пишет: | цитата: | | Хотя я не понимаю каким образом эта прога может сделать рассылку клиенту телеграмма ежели он заранее не подключен к боту /start |
| Никаким, клиент должен сначала войти в чат и получить чат id. После того по id бот может слать чего угодно
|
 |

|
|
|
| |
Пост N: 1856
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.10.22 08:50. Заголовок: Давайте кое что проя..
Давайте кое что проясним. 1 токен нужен для управления ботом , для того чтобы работать от имени бота 2. Клиент подключается к боту или по имени бота или по куар коду 3 как только клиент начал чат , этому чату присваивается id 4 клиент видит только свой чат в телеге 5 бот ( программа подключенная по токену ) видит все чаты и по id может выбирать клиента. 6 бот не может слать сообщения не своим клиентам. 7. Бот не может получить персональные данные клиентов. Он знает только имя под которым клиент зарегистрирован. 8. Опрос бота или в цикле ( потоке и пр ) или через web hook. В первом случае постоянно теребим телеграмм запросами , во втором постоянно мониторим порт. 9 Передавать боту и через бота клиенту можно любые данные . 10 бот регистрируется по телефонному номеру, соответственно кто то должен свой номер предоставить. Можно на фейковый номер ( есть сервисы предоставляющие эту услугу ), но с риском потери контроля над ботом.
|
 |

|
|
|
| |
Пост N: 656
Зарегистрирован: 17.06.10
|
|
Отправлено: 25.10.22 10:38. Заголовок: А могу-ли я писать в..
А могу-ли я писать в группу, дабы все участники видели ?
|
 |

|
|
|
| |
Пост N: 1857
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.10.22 10:54. Заголовок: fil пишет: могу-ли ..
fil пишет: | цитата: | | могу-ли я писать в группу, дабы все участники видели ? |
| Через бота, он разошлёт. Вроде есть еще возможность сделать бота модератором канала,
|
 |

|
|
|
| |
Пост N: 657
Зарегистрирован: 17.06.10
|
|
Отправлено: 25.10.22 11:10. Заголовок: Через бота, он разош..
Есть такая API функция ? Сам бот должен быть в группе?
|
 |

|
|
|
| |
Пост N: 1858
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.10.22 11:19. Заголовок: fil пишет: Есть так..
fil пишет: | цитата: | Есть такая API функция ? Сам бот должен быть в группе? |
| Готовой нет, бот это ваша программа и она знает всех участников. Разумеется программ должна постоянно мониторить группу иначе это будет монолог клиента с пустотой. Простой пример бота я вам дал соберите , возможно поправки сделаете и запустите . далее из своего телеграмма напишите боту. Уверен половина вопросов исчезнет. Чат бот это ваша программа контроля чата, телеграмм апи дает вам место имя и доступ. Клиенты с подключением через мессенджер чужих записей не видят. С подключением из программы с токеном вы берете на себя роль бота и мониторите весь чат. Фиксируйте в базе чат id всех подключившихся и спамить им телегу сколько хотите.
|
 |

|
|
|
|
|
| |
Пост N: 1859
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.10.22 11:25. Заголовок: Все методы тут http..
|
 |

|
|
|
| |
Пост N: 658
Зарегистрирован: 17.06.10
|
|
Отправлено: 26.10.22 13:15. Заголовок: Из бота в группу тек..
Из бота в группу текст слать научился. Никак тока по русски не получается, все кракозябры. Хотя, вроде, в UTF-8
|
 |

|
|
|
| |
Пост N: 1860
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.10.22 18:58. Заголовок: fil пишет: се крако..
fil пишет: Посмотри в моём примере , utf8 мало , нужно экранировать служебные символы
|
 |

|
|
|
| |
Пост N: 659
Зарегистрирован: 17.06.10
|
|
Отправлено: 26.10.22 19:35. Заголовок: Уж его то я попробов..
Уж его то я попробовал в первую очередь. Похоже дело в BOM
|
 |

|
|
|
| |
Пост N: 1861
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.10.22 21:53. Заголовок: fil пишет: Похоже д..
fil пишет: Тогда надо искать причину, я не сталкивался с этим. Пример делал под консоль, проблем не ловил.
|
 |

|
|
|
| |
Пост N: 7998
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.11.24 18:40. Заголовок: Привет Игорь Haz пиш..
Привет Игорь Haz пишет: Пробовал затестить и вот на этой строке падает зараза "Ошибка загрузки указанного ресурса 0X800C0008 msxml3.dll " хрен знает что ему надо
|
 |

|
|
|
| |
Пост N: 358
Зарегистрирован: 05.10.06
|
|
Отправлено: 28.11.24 21:48. Заголовок: Dima пишет: Пробова..
Dima пишет: | цитата: | Пробовал затестить и вот на этой строке падает зараза "Ошибка загрузки указанного ресурса 0X800C0008 msxml3.dll " хрен знает что ему надо |
| у меня тоже падало, в итоге так как многие методы через Get запросы работают, попробуй пустую строку отправить. А если нужно через POST то сформируй xml ручками, у меня вроде тесты прокатывали И еще, по умолчанию телега работает в режиме вэбхука, если ты будешь сам опрашивать, нужно его удалить, метод такой: cUrl:=::url+::token+"/deleteWebhook"
|
 |

|
|
|
| |
Пост N: 1979
Зарегистрирован: 20.02.11
|
|
Отправлено: 29.11.24 11:03. Заголовок: Dima пишет: этой ст..
Dima пишет: | цитата: | этой строке падает зараза "Ошибка загрузки указанного ресурса 0X800C0008 msxml3.dll " хрен знает что ему надо |
| Дим, привет рад тебя слышать. Я сейчас в отпуске, не могу подробно посмотреть.Нет ноутбука с собой. По ошибке - скорее всего строка в методе сенд не нравится , попробуй любоу слово в английском. Или другой объект . HTTP создать , их много разных Попозже если доберусь до своих архивов напишу.
|
 |

|
|
|
| |
Пост N: 7999
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.11.24 11:46. Заголовок: MIKHAIL пишет: cUrl..
MIKHAIL пишет: | цитата: | | cUrl:=::url+::token+"/deleteWebhook" |
| Спасибо , взял на заметку ! Haz пишет: | цитата: | | Попозже если доберусь до своих архивов напишу. |
| Игорь не нужно уже , вопрос решил с помощью LibCurl
|
 |

|
|
Ответов - 36
, стр:
1
2
All
[только новые]
|
|