SlackAPI の chat.postMessage を使って、CurlコマンドなどからユーザーにDMを送ろうとした場合に、以下のようなエラーが発生する場合があります。
{“ok”:false,”error”:”channel_not_found”}
今回は、この場合の原因と対策です。
前提知識
チャンネルに投稿したい場合は “channel”:”#チャンネル名”を指定するが、この”channel”にユーザーを指定するとDMが送信できる。パーミッションなどもDMだからといって特別なものを指定する必要はなく、BOTのchat:writ の権限さえアレば良い。
原因
Channelにユーザーを指定する際に、ユーザー名や表示名を指定していた。正しくはユーザーIDを指定しなければいけなかった。
対策
ChannelにはユーザーIDを指定するように変更する。メンバーIDはプロフィール画像から「プロフィール」→「その他」→メンバーIDをコピー で確認できます。
CURLコマンドはこんなかんじ。
curl https://slack.com/api/chat.postMessage -X POST -H ‘Authorization: Bearer xoxb-あなたのアプリのトークン’ -H ‘Content-type: application/json;charset=UTF-8’ –data ‘{“channel”:”@XXXXXXXXX”,”text”:”Hello”}’
参考リンク
## lambdaからslackにメッセージ送信してみる – tweet blog
https://encr.jp/blog/posts/20200311_morning/
## 【最新版slackアプリ開発】久しぶりにslackアプリを作った時にslackbotライブラリでは使えなかったのでBoltに移行した – Sassyブログ
https://www.sassy-blog.com/entry/20211105/1636086081#Slack%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99
## Slackアプリ制作超入門:最初のBotメッセージを送信するまで
https://a-records.info/slack-app-send-message-curl/