# Integration with chats

**URL:** <https://meta.discourse.org/t/topic/414961>\
**Category:** Self-hosting\
**Created:** [October 18, 2026, 10:46am UTC](https://meta.discourse.org/t/topic/414961 "2026-10-18T10:46:49Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vsekraski](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vsekraski/32/553869_2.png) [@Vsekraski](https://meta.discourse.org/u/Vsekraski)\
**Post date:** [October 18, 2026, 10:46am UTC](https://meta.discourse.org/t/topic/414961/1 "2026-10-18T10:46:49Z")

</div>

I want to connect the integration to a Telegram chat. I created a bot and added the token in the plugin settings. But nothing is happening, and the bot isn’t responding.  
When I send a test message through the plugin, I get a 500 error. Please help.

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [October 18, 2026, 11:04am UTC](https://meta.discourse.org/t/topic/414961/2 "2026-10-18T11:04:52Z")

</div>

Check /logs for the actual error that lead to the 500 please and share it, including the backtrace

---

<div class="post-metadata">

**Author:** ![Vsekraski](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vsekraski/32/553869_2.png) [@Vsekraski](https://meta.discourse.org/u/Vsekraski)\
**Post date:** [October 18, 2026, 11:15am UTC](https://meta.discourse.org/t/topic/414961/3 "2026-10-18T11:15:37Z")

</div>

```

Message (11 copies reported)

Net::OpenTimeout (Failed to open TCP connection to api.telegram.org|2001:67c:4e8:f004::9,149.154.166.110.final-destination.invalid:443 (execution expired))  
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’

Backtrace

/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

Env

HTTP HOSTS:  
```

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [October 18, 2026, 11:17am UTC](https://meta.discourse.org/t/topic/414961/4 "2026-10-18T11:17:29Z")

</div>

> [@Vsekraski](#):
>
> Net::OpenTimeout (Failed to open TCP connection to api.telegram.org|2001:67c:4e8:f004::9,149.154.166.110.final-destination.invalid:443 (execution expired))

well, that’s more clear, no?

what happens when you try to `ping api.telegram.org` from your server?

I get:

```plaintext
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

```

which looks healthy.

---

<div class="post-metadata">

**Author:** ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Post date:** [October 18, 2026, 11:18am UTC](https://meta.discourse.org/t/topic/414961/5 "2026-10-18T11:18:40Z")

</div>

Please put your logs in triple backticks. It’s quite a mouthful to scroll through.

````plaintext
```
logs here
```

````

---

<div class="post-metadata">

**Author:** ![Vsekraski](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vsekraski/32/553869_2.png) [@Vsekraski](https://meta.discourse.org/u/Vsekraski)\
**Post date:** [October 18, 2026, 11:20am UTC](https://meta.discourse.org/t/topic/414961/6 "2026-10-18T11:20:52Z")

</div>

I’m sorry, I still haven’t figured out how to do it (

---

<div class="post-metadata">

**Author:** ![Vsekraski](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/vsekraski/32/553869_2.png) [@Vsekraski](https://meta.discourse.org/u/Vsekraski)\
**Post date:** [October 18, 2026, 11:23am UTC](https://meta.discourse.org/t/topic/414961/7 "2026-10-18T11:23:08Z")

</div>

Also, could this be related to the fact that Telegram is blocked in Russia? My server, where the forum is hosted, is also located in Russia.

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [October 18, 2026, 11:26am UTC](https://meta.discourse.org/t/topic/414961/8 "2026-10-18T11:26:01Z")

</div>

yes that would be a showstopper
