Slack subscriptions don't work

Hi,

I'm moving from v0.41 to 0.43.1 and the subscriptions don't send.

Here is my logs :

    2022-06-07 01:55:24,131 INFO query-processor.card :: La durée moyenne d'exécution de la question est de 802.0 ms ; en utilisant un TTL "magique" de 8.0 s. 💾
    2022-06-07 01:55:24,451 INFO middleware.cache :: L'exécution de la requête a pris 205.0 ms ; le minimum pour l'éligibilité du cache est 60.0 s.
    2022-06-07 01:55:24,567 INFO query-processor.card :: La durée moyenne d'exécution de la question est de 2.8 s ; en utilisant un TTL "magique" de 28.0 s. 💾
    2022-06-07 01:55:25,914 INFO middleware.cache :: L'exécution de la requête a pris 1.2 s ; le minimum pour l'éligibilité du cache est 60.0 s.
    2022-06-07 01:55:26,099 INFO query-processor.card :: La durée moyenne d'exécution de la question est de 752.0 ms ; en utilisant un TTL "magique" de 8.0 s. 💾
    2022-06-07 01:55:26,492 INFO middleware.cache :: L'exécution de la requête a pris 108.0 ms ; le minimum pour l'éligibilité du cache est 60.0 s.
    2022-06-07 01:55:27,498 WARN integrations.slack :: {:error-code "not_in_channel",
     :message "Erreur d'API Slack: not_in_channel",
     :response {:ok false, :error "not_in_channel"}}

    2022-06-07 01:55:27,773 WARN integrations.slack :: {:error-code "channel_not_found",
     :message "Erreur d'API Slack: channel_not_found",
     :response {:ok false, :error "channel_not_found"}}

    2022-06-07 01:55:27,775 ERROR metabase.pulse :: Erreur à l'envoi de la notification !
    clojure.lang.ExceptionInfo: Erreur d'API Slack: channel_not_found {:error-code "channel_not_found", :message "Erreur d'API Slack: channel_not_found", :response {:ok false, :error "channel_not_found"}, :url "https://slack.com/api/conversations.join", :request {:headers {:authorization "Bearer\nxoxb-3613226227602-3612312813895-83HEp5LDKAxzePPPcyiNf5oH"}, :as :stream, :conn-timeout 10000, :socket-timeout 10000, :form-params {:channel "meta"}}}
    	at metabase.integrations.slack$do_slack_request.invokeStatic(slack.clj:125)
    	at metabase.integrations.slack$do_slack_request.invoke(slack.clj:106)
    	at metabase.integrations.slack$POST.invokeStatic(slack.clj:135)
    	at metabase.integrations.slack$POST.invoke(slack.clj:132)
    	at metabase.integrations.slack$fn__63385$join_channel_BANG___63390$fn__63391.invoke(slack.clj:267)
    	at metabase.integrations.slack$fn__63385$join_channel_BANG___63390.invoke(slack.clj:263)
    	at metabase.integrations.slack$fn__63410$upload_file_BANG___63415$fn__63416$fn__63417.invoke(slack.clj:282)
    	at metabase.integrations.slack$fn__63410$upload_file_BANG___63415$fn__63416.invoke(slack.clj:276)
    	at metabase.integrations.slack$fn__63410$upload_file_BANG___63415.invoke(slack.clj:269)
    	at metabase.pulse$create_and_upload_slack_attachments_BANG_$fn__76376.invoke(pulse.clj:202)
    	at clojure.core.protocols$fn__8181.invokeStatic(protocols.clj:168)
    	at clojure.core.protocols$fn__8181.invoke(protocols.clj:124)
    	at clojure.core.protocols$fn__8136$G__8131__8145.invoke(protocols.clj:19)
    	at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
    	at clojure.core.protocols$fn__8168.invokeStatic(protocols.clj:75)
    	at clojure.core.protocols$fn__8168.invoke(protocols.clj:75)
    	at clojure.core.protocols$fn__8110$G__8105__8123.invoke(protocols.clj:13)
    	at clojure.core$reduce.invokeStatic(core.clj:6830)
    	at clojure.core$reduce.invoke(core.clj:6812)
    	at metabase.pulse$create_and_upload_slack_attachments_BANG_.invokeStatic(pulse.clj:195)
    	at metabase.pulse$create_and_upload_slack_attachments_BANG_.invoke(pulse.clj:186)
    	at metabase.pulse$create_and_upload_slack_attachments_BANG_.invokeStatic(pulse.clj:192)
    	at metabase.pulse$create_and_upload_slack_attachments_BANG_.invoke(pulse.clj:186)
    	at metabase.pulse$fn__76489.invokeStatic(pulse.clj:375)
    	at metabase.pulse$fn__76489.invoke(pulse.clj:373)
    	at clojure.lang.MultiFn.invoke(MultiFn.java:229)
    	at metabase.pulse$send_notifications_BANG_$fn__76504.invoke(pulse.clj:391)
    	at metabase.pulse$send_notifications_BANG_.invokeStatic(pulse.clj:390)
    	at metabase.pulse$send_notifications_BANG_.invoke(pulse.clj:386)
    	at metabase.pulse$send_pulse_BANG_.invokeStatic(pulse.clj:415)
    	at metabase.pulse$send_pulse_BANG_.doInvoke(pulse.clj:395)
    	at clojure.lang.RestFn.invoke(RestFn.java:410)
    	at metabase.api.pulse$fn__77604.invokeStatic(pulse.clj:239)
    	at metabase.api.pulse$fn__77604.invoke(pulse.clj:225)
    	at compojure.core$wrap_response$fn__28036.invoke(core.clj:160)
    	at compojure.core$wrap_route_middleware$fn__28020.invoke(core.clj:132)
    	at compojure.core$wrap_route_info$fn__28025.invoke(core.clj:139)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:151)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:153)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:153)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:153)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:152)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048.invoke(core.clj:200)
    	at metabase.server.middleware.auth$enforce_authentication$fn__66749.invoke(auth.clj:14)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048.invoke(core.clj:200)
    	at compojure.core$make_context$handler__28076.invoke(core.clj:289)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:299)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:300)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at metabase.api.routes$fn__78112$fn__78115.invoke(routes.clj:59)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048.invoke(core.clj:200)
    	at clojure.lang.AFn.applyToHelper(AFn.java:160)
    	at clojure.lang.AFn.applyTo(AFn.java:144)
    	at clojure.core$apply.invokeStatic(core.clj:667)
    	at clojure.core$apply.invoke(core.clj:662)
    	at metabase.server.routes$fn__78262$fn__78263.doInvoke(routes.clj:67)
    	at clojure.lang.RestFn.invoke(RestFn.java:436)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048.invoke(core.clj:200)
    	at compojure.core$make_context$handler__28076.invoke(core.clj:289)
    	at compojure.core$make_context$fn__28080.invoke(core.clj:299)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:153)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:153)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at compojure.core$wrap_route_matches$fn__28029.invoke(core.clj:153)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048$f__28049$respond_SINGLEQUOTE___28050.invoke(core.clj:197)
    	at metabase.server.routes$fn__78248$fn__78250.invoke(routes.clj:45)
    	at compojure.core$routes$fn__28048$f__28049.invoke(core.clj:198)
    	at compojure.core$routes$fn__28048.invoke(core.clj:200)
    	at metabase.server.middleware.exceptions$catch_uncaught_exceptions$fn__75074.invoke(exceptions.clj:98)
    	at metabase.server.middleware.exceptions$catch_api_exceptions$fn__75071.invoke(exceptions.clj:86)
    	at metabase.server.middleware.log$log_api_call$fn__78732$fn__78733$fn__78734.invoke(log.clj:211)
    	at metabase.driver.sql_jdbc.execute.diagnostic$do_with_diagnostic_info.invokeStatic(diagnostic.clj:15)
    	at metabase.driver.sql_jdbc.execute.diagnostic$do_with_diagnostic_info.invoke(diagnostic.clj:9)
    	at metabase.server.middleware.log$log_api_call$fn__78732$fn__78733.invoke(log.clj:203)
    	at toucan.db$_do_with_call_counting.invokeStatic(db.clj:216)
    	at toucan.db$_do_with_call_counting.invoke(db.clj:209)
    	at metabase.server.middleware.log$log_api_call$fn__78732.invoke(log.clj:202)
    	at metabase.server.middleware.browser_cookie$ensure_browser_id_cookie$fn__81968.invoke(browser_cookie.clj:38)
    	at metabase.server.middleware.security$add_security_headers$fn__60352.invoke(security.clj:148)
    	at metabase.server.middleware.json$wrap_json_body$fn__81107.invoke(json.clj:63)
    	at metabase.server.middleware.json$wrap_streamed_json_response$fn__81125.invoke(json.clj:99)
    	at metabase.server.middleware.offset_paging$handle_paging$fn__60376.invoke(offset_paging.clj:42)
    	at ring.middleware.keyword_params$wrap_keyword_params$fn__82235.invoke(keyword_params.clj:55)
    	at ring.middleware.params$wrap_params$fn__82254.invoke(params.clj:77)
    	at metabase.server.middleware.misc$maybe_set_site_url$fn__35182.invoke(misc.clj:59)
    	at metabase.server.middleware.session$bind_current_user$fn__46653$fn__46654.invoke(session.clj:291)
    	at metabase.server.middleware.session$do_with_current_user.invokeStatic(session.clj:270)
    	at metabase.server.middleware.session$do_with_current_user.invoke(session.clj:259)
    	at metabase.server.middleware.session$bind_current_user$fn__46653.invoke(session.clj:290)
    	at metabase.server.middleware.session$wrap_current_user_info$fn__46635.invoke(session.clj:240)
    	at metabase.server.middleware.session$wrap_session_id$fn__46619.invoke(session.clj:173)
    	at metabase.server.middleware.auth$wrap_api_key$fn__66757.invoke(auth.clj:27)
    	at ring.middleware.cookies$wrap_cookies$fn__82155.invoke(cookies.clj:216)
    	at metabase.server.middleware.misc$add_content_type$fn__35165.invoke(misc.clj:27)
    	at metabase.server.middleware.misc$disable_streaming_buffering$fn__35190.invoke(misc.clj:76)
    	at ring.middleware.gzip$wrap_gzip$fn__82197.invoke(gzip.clj:86)
    	at metabase.server.middleware.misc$bind_request$fn__35193.invoke(misc.clj:93)
    	at metabase.server.middleware.ssl$redirect_to_https_middleware$fn__81984.invoke(ssl.clj:38)
    	at metabase.server$async_proxy_handler$fn__78504.invoke(server.clj:73)
    	at metabase.server.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle(Unknown Source)
    	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    	at org.eclipse.jetty.server.Server.handle(Server.java:516)
    	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:400)
    	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645)
    	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392)
    	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
    	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
    	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
    	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
    	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
    	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
    	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
    	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
    	at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: clojure.lang.ExceptionInfo: Erreur d'API Slack: channel_not_found {:error-code "channel_not_found", :message "Erreur d'API Slack: channel_not_found", :response {:ok false, :error "channel_not_found"}}
    	at metabase.integrations.slack$handle_error.invokeStatic(slack.clj:97)
    	at metabase.integrations.slack$handle_error.invoke(slack.clj:77)
    	at metabase.integrations.slack$handle_response.invokeStatic(slack.clj:104)
    	at metabase.integrations.slack$handle_response.invoke(slack.clj:99)
    	at metabase.integrations.slack$do_slack_request.invokeStatic(slack.clj:123)
    	... 200 more
    2022-06-07 01:55:27,815 DEBUG middleware.log :: POST /api/pulse/test 200 3.8 s (111 appels de DB) Connexions App DB : 0/7 Threads Jetty : 3/50 (4 inactif, 0 en file d'attente) (51 total de threads actifs) Requêtes en cours : 0 (0 en file d'attente); postgres DB 2 connections: 0/4 (0 threads blocked)

Hi @ThisIsNAUser
Are you sure that Metabase is able to access the workspace and the Metabase channel to write data to?
Remove all your Slack integration and try again.
Otherwise try to manually join the app to the channels you need:
https://stackoverflow.com/questions/60198159/slack-api-conversations-history-returns-error-not-in-channel

Hi @flamber,

I added manually the bot to the channel and it worked !
Thanks a lot for your help i was going crazy.

@ThisIsNAUser Interesting. It sounds like the App wasn't created correctly, since that's what the link inside of Metabase is supposed to automatically do with the configuration we send.

I also had this problem after upgrading to 0.43. I followed the instructions, everything seemed to work fine and Metabase said the Slack app was working, and would send dashboard subscriptions with no error in the UI, but the server logs showed a "channel_not_found" error. To solve it I had to manually invite the Metabase app to the dedicated Slack channel named in the Metabase settings. Once that was done, everything worked and the app can post to other channels without being invited first - it just had to be manually invited to that particular channel.

@carolynh Slack has changed their API: https://github.com/metabase/metabase/issues/23229

1 Like