จะอัพเดตข้อความตอบกลับเป็นคำสั่งสแลชโดย API ได้อย่างไร

บริบท

ฉันกำลังสร้างแอป Slack โดยใช้คำสั่ง Slash ซึ่งกำลังสร้างข้อความตอบกลับ in_channel พร้อมปุ่มให้ผู้ใช้โต้ตอบด้วย คำสั่งสแลชถูกใช้ในช่องส่วนตัว

เมื่อผู้ใช้คลิกที่ปุ่มแอปของฉันสามารถอัปเดตข้อความนั้นเพื่อแสดงสถานะใหม่ - เพียงแค่ตอบกลับคำขอเครื่องหมายทับด้วยข้อความที่อัปเดตและโดยการตั้งค่า replace_original = true

ปัญหา

นอกจากนี้ ฉันยังต้องการอัปเดตข้อความดังกล่าวทีละชุด เช่น เมื่อตัวจับเวลาหมด ฉันพยายามอัปเดตข้อความด้วย chat.update แต่ฉันได้รับข้อผิดพลาด cant_update_message API .

นี่คือคำขอที่ฉันใช้สำหรับการทดสอบในบุรุษไปรษณีย์:

https://slack.com/api/chat.update?token={TOKEN}&channel={CHANNEL}&ts={TS}&text=Updated&as_user=true

อย่างไรก็ตาม ตามเอกสารประกอบ ฉันควรจะสามารถอัปเดตข้อความบอทได้:

ประเภทข้อความที่ถูกต้อง

เฉพาะข้อความที่โพสต์โดยผู้ใช้ที่ได้รับการรับรองความถูกต้องเท่านั้นที่สามารถอัปเดตได้ด้วยวิธีนี้ ซึ่งรวมถึงข้อความแชทปกติ และข้อความที่มีประเภทย่อย me_message ผู้ใช้บอทอาจอัปเดตข้อความที่โพสต์ได้

และข้อความที่ฉันต้องการอัปเดตอย่างชัดเจนเป็นของแอป slack ของฉันและดูเหมือนข้อความบอทปกติ ต่อไปนี้คือลักษณะของข้อความนั้นใน conversations.history:

{
    "text": "Some text...",
    "bot_id": "Bxxxxxxxx",            
    "type": "message",
    "subtype": "bot_message",
    "ts": "{TS}"
}

ยังไงก็ตาม ฉันลบข้อความนั้นโดยใช้พารามิเตอร์เดียวกันผ่าน chat.delete ได้ผล

ฉันพลาดอะไรไป?


person Erik Kalkoken    schedule 11.09.2018    source แหล่งที่มา


คำตอบ (1)


ฉันได้พูดคุยกับฝ่ายสนับสนุน Slack เกี่ยวกับคำถามของฉัน และพวกเขายืนยันว่าไม่สามารถอัปเดตข้อความตอบกลับผ่าน chat.update ได้

นี่คือคำตอบแบบเต็ม:

ผู้ใช้ไม่สามารถอัพเดตการตอบสนองของคำสั่ง in_channel slash ได้ เนื่องจากการตอบกลับของคำสั่ง slash ไม่ได้ใช้ web API ดังนั้นจึงไม่ได้เชื่อมโยงกับโทเค็นใดโดยเฉพาะ จึงเป็นไปไม่ได้ที่การเรียก chat.update จะตรวจสอบว่าได้รับอนุญาตให้อัปเดตข้อความหรือไม่ จึงมีข้อผิดพลาด

คำแนะนำของฉันคือส่งการตอบกลับคำสั่ง eslash ชั่วคราวหรือการตอบกลับคำสั่ง slash ว่าง จากนั้นใช้วิธี chat.postMessage API เพื่อส่งข้อความ "in channel" ซึ่งสามารถอัปเดตได้ในภายหลังโดยใช้วิธี chat.update API

ตามที่แนะนำ ตอนนี้ฉันจะสร้างข้อความ "ในเกม" ผ่านวิธี chat.postMessage API แทน ซึ่งทำให้ฉันอัปเดตได้ในภายหลัง อย่างไรก็ตาม สิ่งนี้ทำให้เกิดปัญหาในการเข้าถึงช่องส่วนตัว เพื่อบรรเทาปัญหาดังกล่าว ตอนนี้ฉันจะขอให้ผู้ใช้เพิ่มผู้ใช้บอทของฉันลงในช่องส่วนตัวทั้งหมด ซึ่งจะทำให้แอปของฉันเข้าถึงได้

ฉันอยากจะหลีกเลี่ยงแนวทางนี้ตั้งแต่แรก เนื่องจากมันสร้างขั้นตอนพิเศษให้กับผู้ใช้ แต่ไม่มีทางเลือกใดที่ดีกว่านี้ (แต่แอป github ใช้วิธีการเดียวกัน)

person Erik Kalkoken    schedule 12.09.2018