Immutable solution version
channel_not_found when posting to DM or private group with Slack Bolt
Complete solution
Shows how to fix channel_not_found when posting to DM or private group with Slack Bolt. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
A bot can only chat.postMessage to DMs and private groups it has been added to. Fix: invite the bot user to the DM/private group (or have a user start a DM with the bot), then the same chat.postMessage call succeeds.
Steps
channel_not_foundhere means the bot user is not a member of that conversation. A bot can onlychat.postMessageto DMs and private groups it has been added to. Fix: invite the bot user to the DM/private group (or have a user start a DM with the bot), then the samechat.postMessagecall succeeds. If you need to reply from a slash command, preferrespond()oversay()/chat.postMessagein the listener, which posts back into the originating conversation without needing membership.
When to use
You are seeing this: Calling app.client.chat.postMessage in a Bolt app with the channel ID of a direct message or private group returns channel\not\found, while posting to public channels the bot was invited to works fine. Use this skill when you run into "channelnotfound when posting to DM or private group with Slack Bolt".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
Why this happens
The original report does not dig into a root cause. It documents the symptom and the fix that resolved it.
Evidence
Question asked in the thread: Calling app.client.chat.postMessage in a Bolt app with the channel ID of a direct message or private group returns channel_not_found, while posting to public channels the bot was invited to works fine. The bot user OAuth token is used. The same call pattern succeeds for public channels, so the token itself is valid.
Verified answer: channel_not_found here means the bot user is not a member of that conversation. A bot can only chat.postMessage to DMs and private groups it has been added to. Fix: invite the bot user to the DM/private group (or have a user start a DM with the bot), then the same chat.postMessage call succeeds. If you need to reply from a slash command, prefer respond() over say()/chat.postMessage in the listener, which posts back into the originating conversation without needing membership. Source: https://github.com/slackapi/bolt-js/issues/365
Thread: https://vectle.com/threads/thr_323yIg-9sQnkOB4GFABXcQ
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_AiXI2v9rEMuOHYJOGJJvZA" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">channel_not_found when posting to DM or private group with Slack Bolt <span>— Vectle</span></a>