前提・実現したいこと
Slack apiのchat.unfurlを使って、AWS lambdaからurlに関する情報を返したい。
発生している問題・エラーメッセージ
returnの値の中にunfurling_idを書いているが、
missing_unfurl_idになってしまう。
ERROR Error: An API error occurred: missing_unfurl_id at Object.platformErrorFromResult (/opt/nodejs/node_modules/@slack/web-api/dist/errors.js:51:33) at WebClient.apiCall (/opt/nodejs/node_modules/@slack/web-api/dist/WebClient.js:158:28) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async postMessage (/var/task/index.js:106:20) at async Runtime.exports.handler (/var/task/index.js:123:21) { code: 'slack_webapi_platform_error', data: { ok: false, error: 'missing_unfurl_id', response_metadata: { scopes: [Array], acceptedScopes: [Array] } } }
該当のソースコード
受け取った値
javascript
1{ 2 token: 'QxsXXXXXX', 3 team_id: 'YYYYYY', 4 api_app_id: 'ZZZZZZZ', 5 event: { 6 type: 'link_shared', 7 user: 'U0XXXXXX', 8 channel: 'C0XXXXXX', 9 message_ts: '163XXXX.XXXX', 10 links: [ [Object] ], 11 source: 'conversations_history', 12 unfurl_id: 'C0XXXXX.163XXXXX.YYYYYY.4041d4facXXXXXXXXX', 13 is_bot_user_member: true, 14 thread_ts: '163XXXXX.000200', 15 event_ts: '163XXXXXX.274916' 16 }, 17 type: 'event_callback', 18 ........ 19}
送信した値
javascript
1const AWS = require("aws-sdk"); 2const docClient = new AWS.DynamoDB.DocumentClient(); 3const { App } = require('@slack/bolt'); 4 5exports.handler = async (event, context, callback) => { 6 const obj = JSON.parse(JSON.stringify(event)); 7 const posted_url = obj.event.links[0].url; 8 9 const postMessage = async (data) => { 10 const app = new App({ 11 token: process.env.USER_OAUTH_TOKEN, 12 signingSecret: process.env.SIGNING_SECRET 13 }); 14 try { 15 const result = app.client.chat.unfurl(data); 16 return await result; 17 } 18 catch (error) { 19 console.error(error); 20 } 21 }; 22 23 const setResnponse = async(userName) => { 24 const text = userName + "AAAA"; 25 const unfurling = { 26 "token": process.env.USER_OAUTH_TOKEN, 27 "channel": obj.event.channel, 28 "ts": obj.event.message_ts, 29 "source": "composer", 30 "unfurl_id": obj.event.unfurl_id, 31 "unfurls": { 32 posted_url: { 33 "blocks": [ 34 { 35 "type": "section", 36 "text": { 37 "type": "mrkdwn", 38 "text": text 39 } 40 ] 41 } 42 }, 43 }; 44 45 const data = setResnponse("BBB") 46 const res = await postMessage(data); 47 return res; 48}; 49
試したこと
SlackからPOSTで受け取った値にあったunfurling_idを含め、
(@slack/boltを使って)postMessageを返したのですが、うまくいきませんでした。。
アドバイス、ヒントなどあれば教えていただきたいです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Slack
AWS API Gateway /Lambda
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/15 08:30 編集
2021/11/15 23:35
2021/11/17 03:37
2021/11/17 03:55
2021/11/20 02:35