nixys / nxs-chat-srv

Nixys chat bot that integrates Telegram and Redmine
GNU General Public License v3.0
35 stars 10 forks source link

access denied: tlgrm user not found #33

Closed openncomp closed 3 years ago

openncomp commented 3 years ago

Здравствуйте, во-первых благодарю за то, что поделились с миром своим замечательным продуктом!


А теперь проблема. При попытке написать боту с любого аккаунта телеграм, бот возвращает:

Hi! Unfortunately, we could not authorize you. However, we are working on it right now and will get back to you with the results within next minute.

Unfortunately, we still cannot find you in our database. If you would like to become our customer, just write us something here and we will reply to you as soon as we can. Thank you.

Соответственно, в редмайне ничего не приходит.

Если у аккаунта телеграм не указан user name, то в логе nxs-chat-srv я вижу следующее:

DEBUG:    [rest-api]: received message from telegram (auth token: "1907******:AAGr*******" (correct), post body: "{"update_id":5698*****,"message":{"message_id":188,"from":{"id":1914******,"is_bot":false,"first_name":"\u0422\u0435\u0445\u043d\u0438\u043a","language_code":"ru"},"chat":{"id":1914******,"first_name":"\u0422\u0435\u0445\u043d\u0438\u043a","type":"private"},"date":1633914690,"text":"\u0420\u0440\u0440"}}
DEBUG:    [rest-api]: ra queue add: success
INFO:     connection accepted     91.108.6.109:46170      "POST /tlgrm?token=1907******:AAGr*******"        200     52      ""
DEBUG:    [queue-worker]: ra queue get: success
DEBUG:    [queue-worker]: db cache get: success (cache type: projects)
DEBUG:    [queue-worker]: db cache get: success (cache type: users)
DEBUG:    [queue-worker]: db cache get: success (cache type: issue_priorities)
WARNING:  [queue-worker]: db-cache user get warn: tlgrm username is empty string
WARNING:  [queue-worker]: access denied: tlgrm user not found (tlgrm userid: 1914******, tlgrm user name: )
DEBUG:    [queue-worker]: db presale get: success
DEBUG:    [queue-worker]: db waitings get: success
DEBUG:    [queue-worker]: db queue add: success (tlgrm userid: 1914******)
DEBUG:    [queue-worker]: db queue set lock: success (tlgrm user id: 1914******, lock expire ms: 30000)
DEBUG:    [queue-worker]: db queue set lock: key is already locked by another process (tlgrm user id: 1914******)
DEBUG:    [queue-worker]: db queue set lock: key is already locked by another process (tlgrm user id: 1914******)
DEBUG:    [queue-worker]: db queue get: success (tlgrm user id: 1914******)
DEBUG:    [queue-worker]: db queue get: success (tlgrm user id: 1914******)
DEBUG:    [queue-worker]: db cache get: success (cache type: projects)
DEBUG:    [queue-worker]: db cache get: success (cache type: users)
DEBUG:    [queue-worker]: db cache get: success (cache type: issue_priorities)
WARNING:  [queue-worker]: db-cache user get warn: tlgrm username is empty string
WARNING:  [queue-worker]: access denied: tlgrm user not found (tlgrm userid: 1914******, tlgrm user name: )

Добавляю имя пользователя аккаунту телеграм, снова пишу сообщение боту, и в логах nxs-chat-srv вижу:

DEBUG:    [rest-api]: received message from telegram (auth token: "1907******:AAGr*******" (correct), post body: "{"update_id":5698*****,"message":{"message_id":189,"from":{"id":1914******,"is_bot":false,"first_name":"\u0422\u0435\u0445\u043d\u0438\u043a","username":"Ber***","language_code":"ru"},"chat":{"id":1914******,"first_name":"\u0422\u0435\u0445\u043d\u0438\u043a","username":"Ber***","type":"private"},"date":1633915685,"text":"\u0420\u0440\u0440"}}
DEBUG:    [rest-api]: ra queue add: success
INFO:     connection accepted     91.108.6.109:46860      "POST /tlgrm?token=1907******:AAGr*******"        200     52      ""
DEBUG:    [queue-worker]: ra queue get: success
DEBUG:    [queue-worker]: db cache get: success (cache type: projects)
DEBUG:    [queue-worker]: db cache get: success (cache type: users)
DEBUG:    [queue-worker]: db cache get: success (cache type: issue_priorities)
WARNING:  [queue-worker]: access denied: tlgrm user not found (tlgrm userid: 1914******, tlgrm user name: Ber***)
DEBUG:    [queue-worker]: db presale get: success
DEBUG:    [queue-worker]: db waitings get: success
DEBUG:    [queue-worker]: db queue add: success (tlgrm userid: 1914******)
...
WARNING:  [queue-worker]: rdmn issue create warn: Redmine unprocessable entity (project id: 16, response code: 422, response body: "{"errors":["Проект не может быть пустым","Трекер не может быть пустым","Статус не может быть пустым"]}")

В редмайне также ничего не происходит.

Создаю нового пользователя в редмайне, указываю у него в поле Telegram (cf_telegram в конфиге) его id аккаунта - ничего не меняется, в логах все то же самое. Но если в поле Telegram указать его user name Ber***, то теперь при написании боту, он возвращает стандартные ответы для создания задачи и в редмайне задача создается штатно.

Вроде вник во все настройки, сделал точно по мануалу из README для теста, понял что и для чего прописывается в конфиге, но не могу понять, бот не умеет распознавать пользователей телеграм по id, а умеет только по их user name?


Буду очень признателен вашей помощи.

AndreiMuvila commented 3 years ago

Доброго времени суток.

Бот использует именно username (вида @VasyaPupkin), так как для пользователей обычно проще указать его, чем отдельно получать Telegram ID.

openncomp commented 3 years ago

Спасибо за ответ! За этим кроется неоднозначность. Не у всех пользователей установлен username, а администратору чаще всего достаточно и проще переслать сообщение от пользователя в @getmyid_bot и получить его id, чем объяснять ему, как создать себе уникальное имя, и следить, чтобы он не надумал его сменить. Может, это можно где-то самому подправить, чтобы по-умолчанию проверялся id вместо username? Или, может, вы бы могли внести варианты выбора штатно. P.S. также идентификация по id, на мой взгляд, расширила бы функционал работы с телеграм группами.


Еще раз спасибо за поддержку проекта.

AndreiMuvila commented 3 years ago

Изначально мы планировали так сделать, однако в итоге приняли решение использовать именно username. Такая реализация позволяет пользователю самостоятельно добавить свои учетные данные в Redmine, не прибегая к сторонним инструментам. Telegram ID бот получает сам и внутри работает именно с ним. Но в текущей версии функционала для переключения на прямое использование Telegram ID нет.

Возможно добавим в будущих версиях.

openncomp commented 3 years ago

Спасибо, очень будем ждать такой функционал.