mullwar / telebot

The easy way to write Telegram bots in Node.js
https://www.npmjs.com/package/telebot
MIT License
1.48k stars 268 forks source link

Не работает webhook #12

Closed rsaosk closed 8 years ago

rsaosk commented 8 years ago

Добрый день!

Не работает webhook.js из примера (ngrok работает).

Вставил token,ip и поменял название для сгенерированных ключей. Ключи с другими библиотеками работают (проверял для Telegram под Nodejs и Python).

const bot = new TeleBot({ token: '12345678:FGGRGRGfcdefefUIOPbbb', webhook: { // Self-signed certificate: key: './webhook_pkey.pem', cert: './webhook_cert.pem', url: 'https://95.12.34.56', host: '0.0.0.0', port: 443 } });

В консоли показывается установка webhook и старт безопасного сервера, а дальше тишина. На присланные команды не отвечает.

[bot.webhook] set to "https://95.12.34.56/12345678:FGGRGRGfcdefefUIOPbbb" [bot.webhook] started secure server on "0.0.0.0:443"

kosmodrey commented 8 years ago

Здравствуйте,

У Вас в webhook url указан адрес Вашего сервера – на данный момент Телеграм работает только с доменными именами, но никак не с ip-адресами.

Если привяжете адрес сервера к домену, и укажите его в качестве webhook url – должно всё заработать.

rsaosk commented 8 years ago

По руководству https://core.telegram.org/bots/self-signed сгенерировал ключи для домена.

openssl req -newkey rsa:2048 -sha256 -nodes -keyout YOURPRIVATE.key -x509 -days 365 -out YOURPUBLIC.pem -subj "/C=RU/ST=Russia/L=Voronezh/O=RsaDev LTD/CN=mysite.ru"

Поменял код:

const bot = new TeleBot({ token: '12345678:FGGRGRGfcdefefUIOPbbb', webhook: { // Self-signed certificate: key: './YOURPRIVATE.key', cert: './YOURPUBLIC.pem', url: 'https://mysite.ru', host: '0.0.0.0', port: 443 } });

Результат тот же. Ответа нет.

[bot.webhook] set to "https://mysite.ru/12345678:FGGRGRGfcdefefUIOPbbb" [bot.webhook] started secure server on "0.0.0.0:443"

kosmodrey commented 8 years ago

Как я понял, Вы недавно поменяли DNS домену, обычно ему требуется некоторое время, чтобы был доступен повсюду.

На всякий случай, проверьте ещё правильность SSL сертификата при помощи какого-нибудь сервиса, например: https://www.sslshopper.com/ssl-checker.html

Если всё в порядке, попробуйте вручную послать POST запрос на Ваш https://mysite.ru/12345678:FGGRGRGfcdefefUIOPbbb имитирующей Телеграм (если надо составить, напишите, помогу). Если запрос будет успешно обработан – значит проблема будет скорей всего на стороне Телеграма.

rsaosk commented 8 years ago

1) DNS поменял давно. Пинг работает.

2) Сертификат проверку проходит (показывает все данные). В конце только предупреждение, что сертификата самоподписанный.

3) Отправил POST запрос на https://mysite.ru/12345678:FGGRGRGfcdefefUIOPbbb через PHPStorm Rest Client (передал a=5).

Скрипт вылетел с ошибкой обработки (это и логично - не по структуре JSON передал). Значит до своего сервака я достучался.

undefined:1 a=5 ^

SyntaxError: Unexpected token = in JSON at position 0 at Object.parse (native) at IncomingMessage.req.on.x (/var/www/server/node_modules/telebot/lib/webhook.js:35:34) at emitNone (events.js:86:13) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:926:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickCallback (internal/process/next_tick.js:98:9)

kosmodrey commented 8 years ago

Из этого можно сделать вывод, что сервер исправен и правильно настроен, но почему-то Телеграм не посылает запросы на данный адрес.

Webhook не работает только в TeleBot библиотеке?

rsaosk commented 8 years ago

Сейчас проверял другую библиотеку с этими же сертификатами - работает. Значит только в TeleBot библиотеке не работает.

kosmodrey commented 8 years ago

Спасибо за отчёт, буду смотреть.

kosmodrey commented 8 years ago

Новый патч должен устранить данную ошибку. Проверьте Ваш код с https://github.com/kosmodrey/telebot/commit/d2df45dfab918ed473a5da9ed4427f2238bd5770 изменением.

П.С. Ip-адрес в качестве webhook url тоже работает (хотя пару недель назад в тех. поддержке сказали что не поддерживают).

rsaosk commented 8 years ago

Спасибо! Заработало как с доменным именем, так и с ip адресом.

kosmodrey commented 8 years ago

Отлично! Выкатываю новую 1.0.5 версию для всех.

Спасибо что сообщили об ошибке :+1: