On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 652
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 24.10.22 10:21. Заголовок: Чатбот


Приветствую !

У каждого клиента свой чатбот. Ключи в базе и я могу разослать сообщения тому или иному на телефон. Все работает. Можно ли сделать так - бот только один, а клиенты, по токену, к нему подключаются ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 [только новые]


администратор




Пост N: 1853
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.10.22 19:16. Заголовок: fil пишет: fil пиш..


fil пишет:
[quote]` fil пишет:

 цитата:
У каждого клиента свой чатбот.


Не понятно зачем у каждого свой. На то он и чат бот чтоб все запросы обрабатывать.. Каждому клиенту при обращении присваивается свой чат id. По нему и стройте логику ответов бота.
По сути вопроса, да можете по ключу подключиться к любому боту, и контролировать общение этого бота. Только зачем их плодить.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 653
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 24.10.22 21:55. Заголовок: Хорошо. А как клиент..


Хорошо. А как подключиться к чужому боту дабы получить ID ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить



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


Ага, сенкс, завтра пробну !!

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 655
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 24.10.22 23:17. Заголовок: Хотя я не понимаю ка..


Хотя я не понимаю каким образом эта прога может сделать рассылку клиенту телеграмма ежели он заранее не подключен к боту /start

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1855
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.10.22 08:06. Заголовок: fil пишет: Хотя я н..


fil пишет:

 цитата:
Хотя я не понимаю каким образом эта прога может сделать рассылку клиенту телеграмма ежели он заранее не подключен к боту /start


Никаким, клиент должен сначала войти в чат и получить чат id. После того по id бот может слать чего угодно

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1856
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.10.22 08:50. Заголовок: Давайте кое что проя..


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

Спасибо: 0 
ПрофильЦитата Ответить



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


А могу-ли я писать в группу, дабы все участники видели ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1857
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.10.22 10:54. Заголовок: fil пишет: могу-ли ..


fil пишет:

 цитата:
могу-ли я писать в группу, дабы все участники видели ?


Через бота, он разошлёт.
Вроде есть еще возможность сделать бота модератором канала,

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 657
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 25.10.22 11:10. Заголовок: Через бота, он разош..



 цитата:
Через бота, он разошлёт.


Есть такая API функция ? Сам бот должен быть в группе?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1858
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.10.22 11:19. Заголовок: fil пишет: Есть так..


fil пишет:

 цитата:
Есть такая API функция ? Сам бот должен быть в группе?


Готовой нет, бот это ваша программа и она знает всех участников.

Разумеется программ должна постоянно мониторить группу иначе это будет монолог клиента с пустотой.
Простой пример бота я вам дал соберите , возможно поправки сделаете и запустите . далее из своего телеграмма напишите боту. Уверен половина вопросов исчезнет.

Чат бот это ваша программа контроля чата, телеграмм апи дает вам место имя и доступ.
Клиенты с подключением через мессенджер чужих записей не видят.
С подключением из программы с токеном вы берете на себя роль бота и мониторите весь чат.
Фиксируйте в базе чат id всех подключившихся и спамить им телегу сколько хотите.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 658
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 26.10.22 13:15. Заголовок: Из бота в группу тек..


Из бота в группу текст слать научился. Никак тока по русски не получается, все кракозябры. Хотя, вроде, в UTF-8

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1860
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.10.22 18:58. Заголовок: fil пишет: се крако..


fil пишет:

 цитата:
се кракозябры


Посмотри в моём примере , utf8 мало , нужно экранировать служебные символы

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 659
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 26.10.22 19:35. Заголовок: Уж его то я попробов..


Уж его то я попробовал в первую очередь. Похоже дело в BOM

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1861
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.10.22 21:53. Заголовок: fil пишет: Похоже д..


fil пишет:

 цитата:
Похоже дело в BOM


Тогда надо искать причину, я не сталкивался с этим. Пример делал под консоль, проблем не ловил.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 44
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет