Хочу подключить интеграцию к чату Telegram. Создал бота, добавил токен в настройках плагина. Но ничего не происходит, бот не реагирует.
На тестовое сообщение в плагине получают ошибку 500 error. Помогите пожалуйста
AI-generated summary
Пользователь Vsekraski обратился за помощью с интеграцией Telegram в self-hosted инстансе Discourse: после добавления токена бота тестовое сообщение возвращает ошибку 500. Администратор merefield попросил предоставить логи для диагностики.
В предоставленных логах Vsekraski обнаружена ошибка Net::OpenTimeout, указывающая на невозможность установить TCP-соединение с api.telegram.org. merefield предположил проблему с сетевым доступом и предложил проверить пинг до API Telegram, который у него работает корректно.
Нат Дхаливал напомнил об использовании тройных обратных кавычек для форматирования кода в логах, на что автор темы извинился за нарушение формата здесь. В итоге Vsekraski предположил, что причиной является блокировка Telegram в России, где находится его сервер. merefield подтвердил, что это действительно является критическим препятствием (showstopper) для работы интеграции.
Пожалуйста, проверьте /logs, найдите фактическую ошибку, которая привела к 500, и поделитесь ею вместе с backtrace.
Сообщение (сообщено о 11 копиях)
Net::OpenTimeout (Не удалось открыть TCP-соединение с api.telegram.org|2001:67c:4e8:f004::9,149.154.166.110.final-destination.invalid:443 (время выполнения истекло))
lib/freedom_patches/final_destination_connect.rb:35:in ‘FinalDestinationTCPSocketPatch#open’
lib/final_destination/http.rb:20:in ‘FinalDestination::HTTP#connect’
app/controllers/application_controller.rb:458:in ‘block in ApplicationController#with_resolved_locale’
app/controllers/application_controller.rb:458:in ‘ApplicationController#with_resolved_locale’
app/controllers/application_controller.rb:1140:in ‘ApplicationController#ensure_dont_cache_page’
lib/middleware/omniauth_bypass_middleware.rb:35:in ‘Middleware::OmniauthBypassMiddleware#call’
lib/middleware/crawler_hooks.rb:13:in ‘Middleware::CrawlerHooks#call’
lib/content_security_policy/middleware.rb:12:in ‘ContentSecurityPolicy::Middleware#call’
lib/middleware/anonymous_cache.rb:431:in ‘Middleware::AnonymousCache#call’
lib/middleware/csp_script_nonce_injector.rb:13:in ‘Middleware::CspScriptNonceInjector#call’
lib/middleware/track_view_session_id_injector.rb:12:in ‘Middleware::TrackViewSessionIdInjector#call’
config/initializers/008-rack-cors.rb:14:in ‘Discourse::Cors#call’
lib/middleware/default_headers.rb:13:in ‘Middleware::DefaultHeaders#call’
config/initializers/100-quiet_logger.rb:20:in ‘DiscourseRackQuietAssetsLogger#call’
config/initializers/100-silence_logger.rb:29:in ‘SilenceLogger#call’
lib/middleware/enforce_hostname.rb:23:in ‘Middleware::EnforceHostname#call’
lib/middleware/request_tracker.rb:384:in ‘Middleware::RequestTracker#call’
lib/middleware/overload_protections.rb:18:in ‘Middleware::OverloadProtections#call’
lib/middleware/processing_request.rb:14:in ‘Middleware::ProcessingRequest#call’
lib/markdown_endpoint/vary_middleware.rb:10:in ‘MarkdownEndpoint::VaryMiddleware#call’
Стек вызовов
/usr/local/lib/ruby/3.4.0/socket.rb:68:in ‘Socket#connect’
/usr/local/lib/ruby/3.4.0/socket.rb:68:in ‘Addrinfo#connect_internal’
/usr/local/lib/ruby/3.4.0/socket.rb:141:in ‘Addrinfo#connect’
/usr/local/lib/ruby/3.4.0/socket.rb:753:in ‘block in Socket.tcp_with_fast_fallback’
internal:kernel:168:in ‘Kernel#loop’
/usr/local/lib/ruby/3.4.0/socket.rb:721:in ‘Socket.tcp_with_fast_fallback’
/usr/local/lib/ruby/3.4.0/socket.rb:661:in ‘Socket.tcp’
lib/freedom_patches/final_destination_connect.rb:35:in ‘FinalDestinationTCPSocketPatch#open’
net-http (0.9.1) lib/net/http.rb:1792:in ‘block in Net::HTTP#timeouted_connect’
timeout (0.6.1) lib/timeout.rb:296:in ‘block in Timeout.timeout’
timeout (0.6.1) lib/timeout.rb:304:in ‘Timeout.timeout’
net-http (0.9.1) lib/net/http.rb:1791:in ‘Net::HTTP#timeouted_connect’
net-http (0.9.1) lib/net/http.rb:1677:in ‘Net::HTTP#connect’
lib/final_destination/http.rb:20:in ‘FinalDestination::HTTP#connect’
net-http (0.9.1) lib/net/http.rb:1655:in ‘Net::HTTP#do_start’
net-http (0.9.1) lib/net/http.rb:1629:in ‘Net::HTTP#start’
net-http (0.9.1) lib/net/http.rb:2401:in ‘Net::HTTP#request’
rack-mini-profiler (5.0.0) lib/patches/net_patches.rb:19:in ‘block in Net::HTTP#request_with_mini_profiler’
rack-mini-profiler (5.0.0) lib/mini_profiler/profiling_methods.rb:51:in ‘Rack::MiniProfiler::ProfilingMethods#step’
rack-mini-profiler (5.0.0) lib/patches/net_patches.rb:18:in ‘Net::HTTP#request_with_mini_profiler’
plugins/discourse-chat-integration/lib/discourse_chat_integration/provider/telegram/telegram_provider.rb:117:in ‘DiscourseChatIntegration::Provider::TelegramProvider.do_api_request’
plugins/discourse-chat-integration/lib/discourse_chat_integration/provider/telegram/telegram_provider.rb:81:in ‘DiscourseChatIntegration::Provider::TelegramProvider.sendMessage’
plugins/discourse-chat-integration/lib/discourse_chat_integration/provider/telegram/telegram_provider.rb:159:in ‘DiscourseChatIntegration::Provider::TelegramProvider.trigger_notification’
plugins/discourse-chat-integration/app/controllers/discourse_chat_integration/chat_controller.rb:97:in ‘DiscourseChatIntegration::ChatController#test’
actionpack (8.1.4) lib/action_controller/metal/basic_implicit_render.rb:8:in ‘ActionController::BasicImplicitRender#send_action’
actionpack (8.1.4) lib/abstract_controller/base.rb:221:in ‘AbstractController::Base#process_action’
actionpack (8.1.4) lib/action_controller/metal/rendering.rb:199:in ‘ActionController::Rendering#process_action’
actionpack (8.1.4) lib/abstract_controller/callbacks.rb:267:in ‘block in AbstractController::Callbacks#process_action’
activesupport (8.1.4) lib/active_support/callbacks.rb:121:in ‘block in ActiveSupport::Callbacks#run_callbacks’
app/controllers/application_controller.rb:458:in ‘block in ApplicationController#with_resolved_locale’
i18n (1.14.8) lib/i18n.rb:354:in ‘I18n::Base#with_locale’
app/controllers/application_controller.rb:458:in ‘ApplicationController#with_resolved_locale’
activesupport (8.1.4) lib/active_support/callbacks.rb:130:in ‘block in ActiveSupport::Callbacks#run_callbacks’
app/controllers/application_controller.rb:1140:in ‘ApplicationController#ensure_dont_cache_page’
activesupport (8.1.4) lib/active_support/callbacks.rb:130:in ‘block in ActiveSupport::Callbacks#run_callbacks’
activesupport (8.1.4) lib/active_support/callbacks.rb:141:in ‘ActiveSupport::Callbacks#run_callbacks’
actionpack (8.1.4) lib/abstract_controller/callbacks.rb:266:in ‘AbstractController::Callbacks#process_action’
actionpack (8.1.4) lib/action_controller/metal/rescue.rb:36:in ‘ActionController::Rescue#process_action’
actionpack (8.1.4) lib/action_controller/metal/instrumentation.rb:76:in ‘block in ActionController::Instrumentation#process_action’
activesupport (8.1.4) lib/active_support/notifications.rb:210:in ‘block in ActiveSupport::Notifications.instrument’
activesupport (8.1.4) lib/active_support/notifications/instrumenter.rb:58:in ‘ActiveSupport::Notifications::Instrumenter#instrument’
activesupport (8.1.4) lib/active_support/notifications.rb:210:in ‘ActiveSupport::Notifications.instrument’
actionpack (8.1.4) lib/action_controller/metal/instrumentation.rb:75:in ‘ActionController::Instrumentation#process_action’
actionpack (8.1.4) lib/action_controller/metal/params_wrapper.rb:259:in ‘ActionController::ParamsWrapper#process_action’
activerecord (8.1.4) lib/active_record/railties/controller_runtime.rb:39:in ‘ActiveRecord::Railties::ControllerRuntime#process_action’
actionpack (8.1.4) lib/abstract_controller/base.rb:154:in ‘AbstractController::Base#process’
actionview (8.1.4) lib/action_view/rendering.rb:40:in ‘ActionView::Rendering#process’
rack-mini-profiler (5.0.0) lib/mini_profiler/profiling_methods.rb:90:in ‘block in ActionController::Base#profile_method’
actionpack (8.1.4) lib/action_controller/metal.rb:252:in ‘ActionController::Metal#dispatch’
actionpack (8.1.4) lib/action_controller/metal.rb:335:in ‘ActionController::Metal.dispatch’
actionpack (8.1.4) lib/action_dispatch/routing/route_set.rb:65:in ‘ActionDispatch::Routing::RouteSet::Dispatcher#dispatch’
actionpack (8.1.4) lib/action_dispatch/routing/route_set.rb:50:in ‘ActionDispatch::Routing::RouteSet::Dispatcher#serve’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:35:in ‘block in ActionDispatch::Journey::Router#serve’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:86:in ‘block in ActionDispatch::Journey::Router#recognize’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:66:in ‘Array#each’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:66:in ‘ActionDispatch::Journey::Router#recognize’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:31:in ‘ActionDispatch::Journey::Router#serve’
actionpack (8.1.4) lib/action_dispatch/routing/route_set.rb:906:in ‘ActionDispatch::Routing::RouteSet#call’
railties (8.1.4) lib/rails/engine.rb:534:in ‘Rails::Engine#call’
railties (8.1.4) lib/rails/railtie.rb:225:in ‘Kernel#public_send’
railties (8.1.4) lib/rails/railtie.rb:225:in ‘Rails::Railtie.method_missing’
actionpack (8.1.4) lib/action_dispatch/routing/mapper.rb:33:in ‘block in class:Constraints’
actionpack (8.1.4) lib/action_dispatch/routing/mapper.rb:62:in ‘ActionDispatch::Routing::Mapper::Constraints#serve’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:35:in ‘block in ActionDispatch::Journey::Router#serve’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:92:in ‘block in ActionDispatch::Journey::Router#recognize’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:66:in ‘Array#each’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:66:in ‘ActionDispatch::Journey::Router#recognize’
actionpack (8.1.4) lib/action_dispatch/journey/router.rb:31:in ‘ActionDispatch::Journey::Router#serve’
actionpack (8.1.4) lib/action_dispatch/routing/route_set.rb:906:in ‘ActionDispatch::Routing::RouteSet#call’
lib/middleware/omniauth_bypass_middleware.rb:35:in ‘Middleware::OmniauthBypassMiddleware#call’
lib/middleware/crawler_hooks.rb:13:in ‘Middleware::CrawlerHooks#call’
rack (2.2.24) lib/rack/tempfile_reaper.rb:15:in ‘Rack::TempfileReaper#call’
rack (2.2.24) lib/rack/conditional_get.rb:40:in ‘Rack::ConditionalGet#call’
rack (2.2.24) lib/rack/head.rb:12:in ‘Rack::Head#call’
lib/content_security_policy/middleware.rb:12:in ‘ContentSecurityPolicy::Middleware#call’
lib/middleware/anonymous_cache.rb:431:in ‘Middleware::AnonymousCache#call’
lib/middleware/csp_script_nonce_injector.rb:13:in ‘Middleware::CspScriptNonceInjector#call’
lib/middleware/track_view_session_id_injector.rb:12:in ‘Middleware::TrackViewSessionIdInjector#call’
config/initializers/008-rack-cors.rb:14:in ‘Discourse::Cors#call’
rack (2.2.24) lib/rack/session/abstract/id.rb:266:in ‘Rack::Session::Abstract::Persisted#context’
rack (2.2.24) lib/rack/session/abstract/id.rb:260:in ‘Rack::Session::Abstract::Persisted#call’
actionpack (8
Окружение
HTTP HOSTS:
Ну, теперь всё стало понятнее, не так ли?
Что происходит, когда вы пытаетесь выполнить ping api.telegram.org с вашего сервера?
У меня получается:
ping api.telegram.org
PING api.telegram.org (149.154.166.110) 56(84) bytes of data.
64 bytes from 149.154.166.110: icmp_seq=1 ttl=49 time=33.3 ms
64 bytes from 149.154.166.110: icmp_seq=2 ttl=49 time=31.5 ms
64 bytes from 149.154.166.110: icmp_seq=3 ttl=49 time=33.1 ms
что выглядит нормально.
Пожалуйста, оборачивайте логи в тройные обратные кавычки. Иначе их очень неудобно просматривать.
```
logs here
```
Прошу прощения, я так и не научился это делать (
Еще, возможно это связано с тем что в России telegram заблокирован ? А мой сервер где находится форум тоже в России
да, это было бы критической проблемой